Repository navigation
Watch every standard's spec for changes, weekly - #9
Merged
Merged
Conversation
Each standard now lists its spec sources with the exact state that was read (spec_sources), generated into spec-pins.json. A weekly workflow compares them with the live specs, keeps one issue per changed spec, and publishes a status file that makes the standard's page say "The spec changed after this check." The check is scripts/spec-drift.mjs, shared with Ora's watcher. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VeACDNmxsBifFG4eSqRsUi
- Follow a page's redirects only within its own origin, and show only a plain path of the redirect target in issues. - Read page bodies in chunks under the size cap. - Normalize pages in linear time, with output identical to before, so the existing pins stay valid. - Accept only plain release tags and well-shaped peer pins. - Run the check in a job with a read-only token; only the reporting job can write issues and the status branch. - Link an issue on the page only when it is exactly an issue of this repo. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VeACDNmxsBifFG4eSqRsUi
The lockstep comparison now also flags a source the peer watches that this repo does not. The schema rejects a tag pattern that is not a valid regular expression, and a test runs the drift script's own manifest check on spec-pins.json, so neither can first fail in the weekly run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VeACDNmxsBifFG4eSqRsUi
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changed
Every standard now records where its spec lives and the exact state that was read (
spec_sources, with apinper source), and a weekly workflow opens one issue per standard whose spec changed since then, closing it once the pins move. The standard's page then says "The spec changed after this check." with a link to that issue, so readers learn of a change before anyone rechecks the page.How it fits together
content/standards/*.md: a new requiredspec_sourcesfield (validated bylib/schema.ts). Source kinds: a file or folder in a Git repo, a repo head, the newest dated revision folder, the newest release tag, an IETF draft revision, or a hash of a page's text. The template documents each.spec-pins.json: generated from those fields bynpm run pins(lib/spec-pins.ts); a test fails until it matches, the same pattern asnpm run readme. Ora's watcher reads this file to compare its pins with ours.scripts/spec-drift.mjs: the check, Node built-ins only. It is shared byte for byte with Ora's watcher (eralabs-ai/ora), which compares the two copies weekly..github/workflows/spec-drift-watch.yml: Mondays 05:17 UTC. A read-onlycheckjob reads the upstream specs; a separatereportjob writes the issues and pushesspec-drift.jsonto aspec-drift-statusbranch. Upstream text never reaches a shell or an issue: only hashes, revision names, digests and plain redirect paths do.app/standards/[id]/page.tsx+lib/spec-drift.ts: the page reads that status file and shows the note in the "Last checked" footer, reusing the existing "May be out of date" style. A missing or broken status shows nothing. Standard pages now regenerate hourly (revalidate = 3600) instead of only at deploy, which also keeps the 90-day "May be out of date" mark current.vercel.json: turns off Vercel deployments for thespec-drift-statusbranch, so the bot's status commits don't start preview builds.CONTRIBUTING.md: a "Spec sources" section on handling a drift issue.What the first run will do: open one issue, for Poppy. All three Draft 0.2 pages (spec, operations extension, guides) changed after the October 19 recheck. Every other source matches its pin.
Sources
Each pin is the state at the October 19 recheck (#8):
v2026-08-25.Checklist
status, the evidence meets the rules incontent/contribute.md. (No status changed.)last_verifiedon pages where I rechecked every claim. (Nolast_verifiedchanged.)Verification
npm run typecheck,npm run lintandnpm test(17 tests) pass.next build: all 12 standard pages prerender with a 3600 s revalidate, and the content files are bundled for regeneration.node scripts/spec-drift.mjs check spec-pins.jsonagainst the real specs.ghand a throwaway Git repo. The workflow itself has not run on GitHub Actions yet.Merge order: please merge this before the Ora PR. Ora's watcher reads
spec-pins.jsonfrommainhere.Generated by Claude Code