Uh oh!
There was an error while loading. Please reload this page.
docs(adr): correct ADR-0126 §6.4 — the paper protocol's zero-consumer reading was instrument blindness - #13139
Merged
Conversation
… reading was instrument blindness The #12057 survey instrument grepped the module's schema names, which genuinely read zero outside packages/spec with positive controls. It was blind to the module's exported TYPE names: packages/metadata/src/metadata-manager.ts:45 imports `type MetadataOverlay` from @objectstack/spec/kernel and backs a working overlay limb (map at 315-316, getOverlay/saveOverlay/removeOverlay/getEffective at 2166-2249), unreachable from any served surface — its only callers are that package's own unit tests. Verified present at the ADR's own evidence ref 0b04839, so the reading was already wrong when recorded, not later drift. §6.4's supersession and the enforce-or-remove charter are unaffected; §1.1's restatement of the same count points at the correction. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LpRNHxWZgSUgVnFT9mQQo4
This was referenced Aug 29, 2026
os-zhuang
approved these changes
Aug 29, 2026
os-zhuang
marked this pull request as ready for review
August 29, 2026 10:01
os-zhuang
enabled auto-merge
August 29, 2026 10:01
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#13136
Step 3 of the maintainer-ruled execution chain on #12057 (ruling: comment 5459699497, adopting decision comment 5451376436 — verbatim chain line: 「ADR 更正单独 draft PR 挂人工合并」). Docs-only factual correction to ADR-0126; the model ruling is untouched.
What this corrects
ADR-0126 recorded the paper customization module (
packages/spec/src/kernel/metadata-customization.zod.ts) as "consumed by zero runtime packages". The fork report on #12057 (comment 5451357017) established that this was instrument blindness at measurement time, not later drift, and this PR records that on the ADR.The corrected predicate: one unreachable build-against consumer, zero served-surface consumers.
Evidence — re-verified in this branch, not taken on trust
Every fact in the note was re-measured against the ADR's own evidence ref
0b048393fbefore writing it:packages/spec, positive controls included. It was blind to the module's exported type names —MetadataOverlayis exported atmetadata-customization.zod.ts:311(z.inputofMetadataOverlaySchema, declared at :106).git show 0b048393f:packages/metadata/src/metadata-manager.tscarriesimport type { MetadataOverlay } from '@objectstack/spec/kernel';at line 45, backing a working three-layer overlay limb: the in-memory map at 315-316, andgetOverlay/saveOverlay/removeOverlay/getEffectivein the block at 2166-2249.git grepat that ref for calls to those four methods returns exactly two populations: the module's own internal use insidegetEffective(2221, 2232, 2242), and that package's own unit tests (metadata-service.test.ts,metadata.test.ts). No route serves the paper endpoints.0b048393f— the very ref ADR-0126's Evidence header pins — so the ADR inherited a reading that was false at measurement time. It is still present on this branch's base4d94823a3, at the same line numbers.What is deliberately NOT touched
The model-level ruling is not re-opened. §6.4's supersession ("nothing may build against it") and the enforce-or-remove charter stand — the maintainer's 2026-08-29 ruling adopts retirement on this widened evidence. The correction note says so explicitly, so a reader cannot mistake it for a reversal. Sibling #13135 executes the widened retirement itself and is still in flight; nothing in this PR claims that work has landed or depends on it.
Diff shape — two hunks, one file, and why there are two
The charter names §6.4, and that is where the correction lives, in full. The second hunk is a bounded in-place fix within the same file and the same defect class: §1.1 carries a restatement of the identical predicate ("consumed by zero runtime packages"), and leaving it un-annotated would have left the ADR still teaching the false measurement one section earlier — the exact outcome the card exists to prevent. It is a pointer, not a second copy: it names the corrected count in one clause and sends the reader to §6.4, keeping one home for the correction. No third location carries the predicate.
Convention followed: the corpus's inline
⚠️ **Correction (#issue, date):**form, appended to the exact claim it corrects rather than rewriting it — the ADR-0088 precedent (two instances,#4936and#10724), which is also the closest analogue in shape: a per-claim factual correction that explicitly records the governing decision as unaffected. The original wording is left standing so the record shows what was recorded.Changeset — deliberately none, and the gate's own evidence for it
dispatch-gates.mjsprinted the changeset families under an explicit conditional — "Once a changeset exists, 9 more famil(ies) apply — write one unless this card is docs-only". This card is docs-only: the diff is a single file underdocs/adr/**, which publishes nothing from any package, so there is no consumer-visible change for aCHANGELOG.mdentry to describe. Theskip-changesetlabel is the recorded decision for that class and has been applied to this PR.Verification
Gate family derived mechanically from the real change set —
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack, no hand-fed paths (it read 1 path vs merge base4d94823a3, three-dot semantics). All five ran green after the final commit, atc343bf0b1, each exit code captured before any pipe:check:adr-anchorscheck-adr-anchors: OK (52 anchored file(s), every governing ADR still referenced; 126 decision number(s) …; 30009 citation(s) across 3818 file(s) resolve …)check:doc-authoring✓ doc authoring guard: 392 files clean — no bare metadata literals.check:doc-formula-expressions✓ check:doc-formula-expressions: 22 record-scoped formula example(s) across 425 files / 1453 TS blocks judged clean by @objectstack/formula.check:pm-governed-merges✓ check-governed-merges --self-test: 206 assertions …+live: the real generator declared 9 output(s) and certified this treecheck-adr-links.mjs✅ check-adr-links: 571 relative link destination(s) under docs/adr/ resolveOne note on the third row, so the run is readable:
check:doc-formula-expressionsfirst exited 1 withPREREQUISITE NOT MET — the workspace package @objectstack/formula is not built. That is the gate refusing to measure, not a finding — its own text says "Nothing was measured: this gate exited before running a single check". Building@objectstack/formulaand then@objectstack/lintcleared it, after which the gate ran and passed on its own terms. No red gate was worked around.Governed surface — this PR stays DRAFT
The diff touches
docs/adr/**, a governed surface under Prime Directive #14. It is left draft for the maintainer's hand-merge: ⛔ not marked ready, ⛔ no auto-merge armed, ⛔ not queued. Under Prime Directive #13 the merge of an ADR change is the act of adopting it, so "CI is green" carries no authority here.Generated by Claude Code