Skip to content

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 26 Sep 12:41
· 33 commits to main since this release
  • Warned before the date. Teams set where alerts go on the organisation dashboard: up to ten
    email addresses and a Slack incoming webhook, 30 and 7 days ahead by default. A daily job sends
    each organisation one digest per channel about open findings that just came within a threshold,
    with the repositories and links to the lines. Nothing is sent twice, a missed day is caught up
    once, and a failed channel is retried. Writers change the settings and can send a test; everyone
    who sees the organisation can read them (docs/adr/0010-alerts-before-the-date.md).
  • Email alerts from the calendar, for anyone. An address and an optional provider; confirmed by
    email before anything is sent; 30 and 7 days before each tracked shutdown; one-click unsubscribe
    in every email; plain text with no tracking. New public routes POST /subscribe,
    /subscribe/confirm and /unsubscribe. Email is sent through Brevo; without
    docswatcher.brevo.api-key the app starts and says email alerts are off.
  • What actually runs. The organisation dashboard shows, per repository, which deprecated
    calls production made (endpoint, provider, calls, last seen, and the finding each confirms or
    the provider's Sunset header) and which open endpoint findings production has never been seen
    making. Telemetry comes from the customer's own OpenTelemetry Collector with a per-repository
    ingest token, created and revoked on the dashboard by anyone with write access; only its hash
    is stored, it can write only its own repository, and the owner token keeps working (migration
    V6). A setup guide on the teams page and in the dashboard gives the Collector config, SDK
    header capture for Java, Python and Node, and what is sent and kept.
    docs/13-runtime-observation.md no longer suggests http/json for the Java and Python SDKs,
    which cannot send it.
  • The App scans in a process of its own. Each scan runs in a separate JVM started from the
    App's own jar, with a heap cap (docswatcher.scan.process.heap-mb, 1024), a wall-clock limit
    (max-seconds plus a minute, after which it is killed) and none of the App's environment. A
    crash in the native parser, a hang or a scan that runs out of memory now fails that scan run
    with a plain message, and webhooks, the API and sign-in carry on. It adds a process start of
    about 0.6 to 1.5 s per scan; docswatcher.scan.isolation: in-process restores the old behaviour.
    The results are the same either way: one scan function runs in both, and a test compares every
    fixture. See ADR 0011.
  • Runs left running are recovered. A scan run still running long after its time limit (a
    restart or a crash stopped it) is failed with an error starting abandoned: and queued again
    once, at startup and every five minutes.
  • The App's configured scan limits now apply to scans that read a team's own API records too;
    those used the engine's defaults, which are the same values unless they were changed.
  • GitLab, beside the GitHub App. Sign in with GitLab (gitlab.com or a self-managed instance, with
    the read_api scope only) and see your GitLab groups on the organisation dashboard, limited to
    the projects GitLab lets you read. A maintainer connects a group or project with an access token
    (Maintainer role, api scope) on /app. DocsWatcher stores the token AES-256-GCM encrypted
    under a key from a secret file, never in plain text. Each push to the default branch is scanned
    with the same engine and limits. Each finding opens an issue, which closes when the code is
    gone, and the commit gets a DocsWatcher status. The snooze, not-in-prod and not-affected
    labels, closing and reopening work as on GitHub. There is no fix pull request on GitLab yet.
    Webhooks go to /webhooks/gitlab, authenticated by a per-connection secret token that
    DocsWatcher keeps only as a hash. New settings: GITLAB_BASE_URL, GITLAB_CLIENT_ID, and the
    secret files docswatcher.gitlab.client-secret and docswatcher.gitlab.token-key. Migration
    V7__gitlab.sql. See docs/adr/0012-gitlab.md and "Connecting GitLab" in
    docs/07-getting-started.md. GitHub behaviour is unchanged. /auth/me also says which sign-ins
    exist (providers) and which one a session used (provider).
  • GitLab CI template. include: ci/gitlab/docswatcher.gitlab-ci.yml from a release tag.
    The job downloads the Linux binary, checks it against the release's checksums.txt and fails
    closed like the Action does. It fails the pipeline on a breaking finding and writes a Code
    Quality report, so findings show in merge requests with their file and line. Variables:
    DOCSWATCHER_PATH, DOCSWATCHER_FAIL_ON, DOCSWATCHER_EXCLUDE, DOCSWATCHER_VERSION and more
    (docs/11-ci-integration.md). The old GitLab snippet used alpine:3, where the glibc binary
    cannot run.
  • The site scans GitLab projects. Paste a gitlab.com project URL, nested groups included, or a
    self-managed instance's full URL where the site's policy allows that host. Share links are
    ?repo=gitlab.com/group/project, and GitHub links are unchanged.
  • Your own APIs. Describe your internal services' deprecations in a .docswatcher/ directory,
    in the knowledge base's format with internal- ids, and every scan of that repository finds
    calls to them. Share them across an organisation through a repository named .docswatcher: the
    GitHub App reads it for every repository of the owner and rescans them when it changes, and the
    CLI and the Action take it as --knowledge-extra and the new knowledge input.
    docswatcher validate .docswatcher checks them. Invalid records are always reported: the CLI
    exits 3 and names every error. See docs/19-your-own-apis.md.
  • A .docswatcher/ directory is no longer scanned as code.
  • Twelve new providers (knowledge 2026.09.26: 27 providers, 309 change records, 111 fixtures):
    • Square: the v1 Payments API, OAuth RenewToken, Transactions API writes and the Labor shift
      endpoints.
    • Paystack: the deprecated Check Authorization endpoint.
    • X (Twitter) API: v1.1 media upload, search, statuses/filter and oEmbed, and the Account
      Activity replay route.
    • LinkedIn Marketing API: the sunset of every monthly Linkedin-Version from 202206 to 202609,
      and the legacy Lead Sync APIs.
    • YouTube Data API: relatedToVideoId, comments.markAsSpam, commentThreads.update and the
      v2 GData feeds.
    • Discord API: API and Gateway v6, v7 and v8, Create Guild for apps, and the old pin routes.
    • Mailchimp: Marketing API 2.0 and Export API 1.0.
    • Google Maps Platform: the Legacy Places, Directions and Distance Matrix web services, and
      Maps JavaScript API removals (Drawing library, heatmap layer, Marker, KmlLayer and more).
    • Firebase: Dynamic Links, the legacy FCM APIs, and the Admin SDK's removed send methods.
    • Salesforce: API versions 21.0 to 30.0, and SOAP login().
    • HubSpot: Contact Lists v1, HubDB v2, Owners v2, Pipelines v1, and the end of numbered API
      versions.
    • Cohere: model retirements (Embed v2.0, Rerank v2.0, Aya 8B, legacy Command models) and the
      deprecated v1 endpoints.

Full Changelog: v0.3.1...v0.4.0