Uh oh!
There was an error while loading. Please reload this page.
fix(docs-audit): exclude ADR-0049 migration ledger entries from registrar discovery - #13058
Merged
Merged
Conversation
…trar discovery REGISTRAR_FILE_RE substring-matches `route` in a basename, which admitted two ADR-0049 enforce-or-remove ledger entries -- files that record `contributes.routes` being RETIRED -- as route registrars. Excluded as a directory class instead, and the current bridge figures are recorded with the cause of every move. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CPrUz21stTFhJRUirdc4yw
Contributor
📓 Docs Drift CheckNothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 0 changed package(s)), so this run has no opinion about the docs. What this run could not see
Coarse fallback — 0 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
This was referenced Aug 29, 2026
os-elon
marked this pull request as ready for review
August 29, 2026 04:19
os-elon
enabled auto-merge
August 29, 2026 04:19
Uh oh!
There was an error while loading. Please reload this page.
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 freeto 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.
Fixes#12966
REGISTRAR_FILE_REsubstring-matchesroutein a basename, which admitted two ADR-0049enforce-or-remove ledger entries as route registrars — files whose entire job is to record
that
manifest.contributes.routeswas retired. A "route registrar" probe was countingthe files that record routes being deleted.
Verified at
d60a9810be.The broken control, reproduced first
#11857's recipe requires reproducing
12registrar files /43tails before any deltameans anything. It does reproduce — at the ref it was written for:
--bridge-coveragea6eca92238f10a79f7aToday's tool run against the
a6eca9223tree returns12 / 43 / 45 / 222— identical tothat tree's own tool, so there is zero tool-version drift and every move below is a tree
effect.
The two files moved the registrar count and nothing else
Per-file ablation of all 14 matched files (each removed, tool re-run, tree restored and
proved byte-identical to
HEADbygit hash-object):rest-server.tsexternal-datasource-routes.tsThe first two rows are the dual: the instrument returns non-zero on both columns, so the
two zeros are readings and not a dead probe. Neither entry declares a
path:line at all —the one
pathbyte in the pair sits in the prose phrase "every spec-validating path".⭐ So the card's open question resolves as "neither". The +1 tail and +2 reachable do
not split between the two files; they have a different cause entirely:
rest-server.tsunrolledfor (const publishedPath of [...])into aliteral
path: `${metaPath}/:type/:name/published`. A variable path yields no tail, aliteral one does, so exactly one new tail was minted.
meta.getPublishedonrest-route-ledger.tsandmeta.getPublishedonruntime/route-ledger.ts.:type/:section/:namerows were deleted fromrest-route-ledger.ts. All three were already unreachable, soreachablemoves by zero.Arithmetic closes: unreachable 177 − 3 deleted − 2 newly reachable = 172.
⇒ 45 → 47 is the bridge reaching more of its population, not drifting. The figure stays
at 47 and this PR deliberately does not restore 45.
Both anchorings were implemented against this tree and measured, then reverted:
routeorroutesroutealoneThe premise is wrong about these two files:
routesalready is a wholedot/dash-delimited token in both, split identically to every genuine registrar —
[18] [kernel__Manifest__contributes] [routes]against[hmr] [routes].packages/spec/src/api/router.zod.ts— the Zod-contract admission question [finding] An evidence-based registrar route reaches 14 more client-bound rows and closes the storage ledger — but it redefines "registrar" to include Zod contract declarations, and admits 3 non-registrars #11857 half Ais still open on. It fixes nothing and pre-empts a pending ruling.
external-datasource-routes.ts— and landsreachableback on 45.trap: 45 is the previously published figure, so the control appears to recover at the
exact moment the recognizer stops working.
The remedy shipped is therefore the directory class only. It is also the durable half:
the entry population grows every time a
route-named key is retired.Result
registrarFiles14 → 12.tails,reachable,unreachable,clientRows, the 79-tailceiling and the 14/56/102 cause split are all unmoved, and
router.zod.tsis preserved.Contamination re-derived at
d60a9810be: 2 of 275.tsfiles underpackages/spec/src/migrations/entries/(the positive control is the 275; triage read 273yesterday, the tree grew by two). There is no third contaminant, and it is the only
directory in the tree with this shape.
Also in this diff
The
45quotes in this file and inscripts/docs-audit/README.mdare ref-pinned to9ff11921aand remain true of it, so they are not rewritten. What was missing is a currentfigure with a cause, and that is added beside them. One live claim did expire and is
corrected: a note asserting nothing bridges to
/:type/:name/published"today", which thepublishedPathliteralisation has since made false — the hermetic fixture it sits beside iskept verbatim.
skip-changeset: this PR edits a CI-internal script and releases nothing, which is the caselint.ymlnames verbatim as the textbook one for the label.Verification
--self-test474 → 487 cases, all green.7 cases red — the two walk equalities plus five per-fixture rows — while the six
predicate pins and the over-reach control (
migrations/runner-route.tsmust stay aregistrar) stay green, which is the prediction made before running. Live coverage returns
to 14/44/47 while ablated. Tool restored byte-identical to
HEADafterwards.scripts/pm/dispatch-gates.mjs --repo, exitcodes captured before any pipe. 19 families, all
exit=0, includingdocs-audit/check-affected-docsanddocs-audit/check-drift-comment, and the twoconvention-triggered ones this diff incurs by editing a gate script
(
pm/bare-root-worklist.mjs --self-test,check:pm-dispatch-gates).Records quoting the stale figure
#10534 and #9572 both quote
45. Neither is edited here; both are flagged in a comment on#12966 with the cause of the move. #11857 remains open and untouched — remedy 3 (require a
runtime registration signal) belongs to its half A and is not implemented here.
Generated by Claude Code
Generated by Claude Code