Skip to content

Releases: jameskomo/docswatcher

v0.5.2

Choose a tag to compare

@github-actions github-actions released this 02 Oct 16:17

A quiet release, in the literal sense.

  • No more warnings on every run. The binaries and docswatcher.jar printed four WARNING: A restricted method in java.lang.System has been called lines each time they ran. The tree-sitter parser loads its native library, and Java 24 and later warn about that unless the program says it is allowed. Both now say so: the binaries are built with --enable-native-access=ALL-UNNAMED, and the jar's manifest carries Enable-Native-Access. Your CI log shows only DocsWatcher's own output.

Nothing else changes; results are identical to 0.5.1. Binaries for Linux x64, macOS arm64 and Windows x64, with checksums.txt. The v0 tag moves to this release, so uses: jameskomo/docswatcher@v0 picks it up with no change.

v0.5.1

Choose a tag to compare

@github-actions github-actions released this 02 Oct 16:00

A fix release. If a repository's scan failed with a regex error, this is the one to take.

  • A bracket in a .gitignore no longer stops the scan. Frameworks such as Next.js name route
    folders with brackets, [slug] or [[...path]], and those names end up in .gitignore files. A
    line like src/app/[[...path]]/page.ts put a bare [ inside a character class. The Java engine
    reads that as a nested class, so the pattern did not compile and the whole scan of that repository
    failed, in the CLI, the GitHub Action, the App and the MCP server alike. The browser engine accepted
    the same line, so the two engines also disagreed about it.

    Both engines now read [ and & inside a class the way git does. A line that still cannot
    compile, such as the backwards range [z-a], now matches nothing instead of ending the scan, so one
    odd line in someone's ignore file can no longer hide everything else. New shared cases pin both
    engines to git's own reading, checked against git check-ignore.

  • A new Shopify record. The metafieldInteger collection source condition is removed in Admin
    API 2027-01. The detector finds it both where it is sent (metafieldInteger: { ... }) and where it
    is read back (... on CollectionSourceInclusionConditionMetafieldInteger), and leaves its
    replacement, metafieldInt, alone. The knowledge watch spotted Shopify's announcement the day it
    was published. 316 change records across 27 providers.

  • Records expire on their date, and a failure that comes from the date is seen the same day.
    Three more records crossed their effective dates and are expired. The nightly CI run now keeps one
    rolling issue open while it fails and closes it when it passes, so a failure no commit explains is
    noticed the morning it happens.

  • Quieter knowledge watch. A forum post's own timestamp (Jun 22, 2023, 5:23:11 AM 6/22/23) is
    no longer reported as deprecation news. A date that comes with anything else still is.

  • The fix workflow opens a draft for review. The pull request a fix dispatch opens is now a
    labelled draft that says an agent wrote it and could not run your tests, so it is reviewed before
    it is merged.

  • The calendar fits a phone. A long API name, such as a GraphQL schema coordinate, wraps instead
    of pushing the page sideways.

Binaries for Linux x64, macOS arm64 and Windows x64, with checksums.txt. Each is smoke-tested
outside the repository before publication and must report its own version. The v0 tag moves to
this release, so uses: jameskomo/docswatcher@v0 picks it up with no change.

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 01 Oct 19:28
d5e65e8

A correctness release. Nothing new to learn, several things that were quietly wrong and are now right.

  • The watch stopped crying wolf. A source counted as deprecation news if a line held a
    deprecation word or a date. Provider pages stamp themselves daily, so every watched page looked
    like a shutdown announcement every morning: one issue a day, each claiming twenty-odd sources had
    changed, when the lines it had matched were Last updated 2026-10-01 UTC. and bare dates. A date
    on its own is no longer a signal — it is what a page prints when it reprints itself. A date
    carried alongside anything else still is, because a table row of model and date is how most
    providers actually publish a shutdown. The watch now keeps one rolling issue it rewrites, instead
    of opening one a day, and a second run on the same day updates the existing one.

  • Records expire when their date arrives. Five records crossed their effective dates between
    September 28 and 30 while still marked active, which the validator correctly refuses — a shutdown
    that has already happened is not pending. CI had been red for three days with no commit to blame,
    and the warning was real but buried inside the daily noise above. Both halves are fixed: the
    records are expired, and the signal that would have surfaced them is legible again.

  • Six new records, and the fixtures that prove them. Four Gemini 3.8 preview deprecations —
    tts, lite-tts, live and live-extended-thinking, shutdown dates still pending — plus the Shopify
    POS staffMemberId removal and the Theme CLI 3.83.x password-store cutoff. The knowledge base is
    now 315 change records across 27 providers, with 113 fixtures, and validate reports no errors.

  • The site says what it actually does. Every built feature is named, linked and presented as
    available rather than coming-soon. The Teams page links the GitHub App's install page directly,
    explains what an ingest token is and when you need one, and says why Send a test is unavailable
    instead of simply disabling it.

  • A documentation claim that was the wrong way round. docs/08-features.md said the fix
    dispatch carries "the evidence with snippets". It carries structural locators only — path, line,
    column — and deliberately so: that payload crosses into another repository's CI, and the snippet
    is attacker-controlled text when the scanned repository is public. The code was already right;
    the docs would have invited someone to reintroduce the snippets.

Binaries for Linux x64, macOS arm64 and Windows x64, with checksums.txt. Each one is smoke-tested
outside the repository before publication and must report its own version, which is the check that
caught a release claiming to be its predecessor once before.

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 26 Sep 12:41
  • 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

v0.3.1

Choose a tag to compare

@github-actions github-actions released this 24 Sep 16:13
  • Native download for Windows x64 (docswatcher-windows-x64.exe). The Action runs on Windows
    runners too, and checks the download against checksums.txt like the others. The 0.3.0 Windows
    build left its grammar libraries out of the image; the resource patterns no longer use a
    backslash, which the Windows build mangled.
  • Intel Macs still use docswatcher.jar with Java 25: GraalVM Community no longer builds for
    macOS x64.

Upgrading from v0.2.1 or earlier? Read the 0.3.0 notes: the Action never failed a build on those releases. https://github.com/jameskomo/docswatcher/blob/main/CHANGELOG.md

Full Changelog: v0.3.0...v0.3.1

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 24 Sep 15:38

Upgrade if you use the GitHub Action or the native binary

  • The Action never failed a build on v0.2.1 and earlier. The Linux native binary printed {}
    for every finding in JSON output, so the Action counted zero breaking findings and passed.
    Anyone on jameskomo/docswatcher@v0 gets the fix automatically, because v0 now points at
    v0.3.0. If you pin version: to v0.2.1 or earlier, remove the pin or set v0.3.0. The Action
    now refuses a report whose findings carry no severity, instead of counting it as clean.
  • The native binary crashed on some repositories (any finding found in more than one place),
    exiting with an error instead of reporting. Fixed.

If your pipeline ran DocsWatcher with v0.2.1 or earlier, run it once more on v0.3.0: findings it
should have failed on were passed.

New

  • Native downloads for macOS on Apple silicon (docswatcher-macos-arm64). The Action picks the
    file for its runner and checks it against the release's checksums.txt before running it.
    Windows and Intel Macs use docswatcher.jar with Java 25 for now.
  • Shopify: GraphQL fields are detected, with records for the automaticDiscounts and
    marketCurrencySettingsUpdate removals, includeRestOfWorld: true erroring in 2027-01, and the
    script tag changes (docs/adr/0007).
  • Google: Gemini 2.5 models are limited to users who already used them.
  • match --report <file> and --inventory <file> give every output from one scan; the Action
    now scans once.
  • The Agents page: try DocsWatcher with your own Claude, OpenAI or Gemini key.

Faster and safer

  • Large repositories scan in seconds rather than minutes (llama_index: 8.5 minutes to about 12 s),
    with identical results.
  • Parsing and querying each file is time-bounded, so an unusual file cannot hold up a scan.
  • The GitHub App uses REST API version 2026-03-10, sends repository paths correctly, and drops a
    cached installation token as soon as the installation changes.
  • knowledge/VERSION is the one knowledge base version everywhere.

Full Changelog: v0.2.1...v0.3.0

v0.2.1

Choose a tag to compare

@github-actions github-actions released this 23 Sep 19:46

Full Changelog: v0.2.0...v0.2.1

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 23 Sep 18:09

Full Changelog: v0.1.3...v0.2.0

v0.1.3

Choose a tag to compare

@github-actions github-actions released this 20 Sep 09:21

Full Changelog: v0.1.2...v0.1.3

v0.1.2

Choose a tag to compare

@github-actions github-actions released this 20 Sep 09:07

Full Changelog: v0.1.1...v0.1.2