Repository navigation
v0.4.0
- 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 routesPOST /subscribe,
/subscribe/confirmand/unsubscribe. Email is sent through Brevo; without
docswatcher.brevo.api-keythe 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.mdno longer suggestshttp/jsonfor 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-secondsplus 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-processrestores 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
runninglong after its time limit (a
restart or a crash stopped it) is failed with an error startingabandoned: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
theread_apiscope 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,apiscope) 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 aDocsWatcherstatus. 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 filesdocswatcher.gitlab.client-secretanddocswatcher.gitlab.token-key. Migration
V7__gitlab.sql. Seedocs/adr/0012-gitlab.mdand "Connecting GitLab" in
docs/07-getting-started.md. GitHub behaviour is unchanged./auth/mealso says which sign-ins
exist (providers) and which one a session used (provider). - GitLab CI template.
include:ci/gitlab/docswatcher.gitlab-ci.ymlfrom a release tag.
The job downloads the Linux binary, checks it against the release'schecksums.txtand 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_VERSIONand more
(docs/11-ci-integration.md). The old GitLab snippet usedalpine: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 withinternal-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-extraand the newknowledgeinput.
docswatcher validate .docswatcherchecks them. Invalid records are always reported: the CLI
exits 3 and names every error. Seedocs/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-Versionfrom 202206 to 202609,
and the legacy Lead Sync APIs. - YouTube Data API:
relatedToVideoId,comments.markAsSpam,commentThreads.updateand 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,KmlLayerand 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.
- Square: the v1 Payments API, OAuth RenewToken, Transactions API writes and the Labor shift
Full Changelog: v0.3.1...v0.4.0