Repository navigation
Silently auto-merged regions never enter a conflict resolution's view — two instances in one file, one fatal; plus the cross-reference discipline that would have caught the cosmetic one #10019
Description
Filed by the domain:devx PM seat from PR #10018 (#9977)'s H3, ruled A (file it, but only with a mechanical narrowing named up front, so the card has an affordable remedy rather than "read the whole merged file").
Two findings, related but separately actionable. The second is the cheaper one and does not depend on the first.
Finding 1 — regions git auto-merges with NO conflict marker never enter the resolver's view
A three-stage conflict resolution reviews what git marks. Regions git merges silently are invisible to every conflict-shaped review habit — there are no :1: / :2: / :3: stages to read, and nothing in the merge output names them.
Two instances, in one file, in one resolution — PR #9826:
| region | outcome |
|---|---|
the second unmarked region in check-cross-package-test-inputs.mjs |
fatal — report() bound census twice; the merged file did not parse |
turbo.json |
never conflicted at all, so no stages existed to read |
the @objectstack/spec rationale at L141 |
cosmetic — a stale clause survived while its twin at L393 was corrected in the marked region |
That last row is the diagnostic one: the create-objectstack twin was fixed and the spec copy was not, which is exactly the split you get when a resolver reviews the three-stage view and a silently merged region never enters it.
⇒ a blind spot that produces both a cosmetic defect and a fatal one is not a prose-hygiene problem.
⚠️ How far the evidence reaches
PR #10018's dev was explicit, unprompted: "I did NOT reconstruct the merge geometry of PR #9826 (which hunks carried markers) — I verified the resulting tree, not the three-stage view, so the mechanism is corroborated by its outcome rather than measured directly."
So the mechanism is inferred from the outcome. First job for whoever takes this: reconstruct PR #9826's merge geometry and confirm which hunks actually carried markers. If the spec copy was inside a marked region, this card's premise is wrong and closing it is the right outcome.
The remedy — and it is already demonstrated
⛔ Do not propose "review the whole merged file." That is what makes this class unfixable in practice.
Diff the resolved file against BOTH parents and list every region no conflict marker covered.
PR #9826's resolver did exactly this by hand for turbo.json — a file that never conflicted, so had no stages — and proved 0 inputs and 0 task keys lost against either parent. The remedy is a mechanisation of a step that already works, not a new idea.
Shape to consider: a scripts/pm/ helper taking the merge commit, emitting the unmarked-region list. ⛔ Not a gate — a conflict resolution is a human/agent act with no committed artifact to check at CI time, and there is no population to scan.
node --check (or the language's parse) catches the fatal half for free, and PR #9826's resolver ran it explicitly because of the earlier PR #9712 incident. So the remedy's marginal value is over the cosmetic half — price that honestly before building anything.
Finding 2 — the cross-reference is what rots, not the sentence
Independent of finding 1, and cheaper. From PR #10018's H2 sweep: the "named in a comment rather than read" rationale appears at 4 sites, all inside scripts/check-cross-package-test-inputs.mjs (L141, L238, L327, L393), plus one inverse statement at L386. 3 were still true; 1 was stale — and it had now gone stale twice in eight days (#9651 retired it once; PR #9826 dropped a second copy; PR #10018 fixed the third).
The three durable sites all cite check-nul-bytes.mjs, which is structurally mention-only — a gate script no test has a reason to read. The one site that reached for a different example is the one that rotted. They did not survive by being written better; their example cannot change status.
The discipline it yields
A rationale may cite a sibling path as an example only when that path is structurally unable to change status.
check-nul-bytes.mjs qualifies. A script under active test does not — and sync-template-versions.mjs is precisely that: packages/create-objectstack/src/template-version-stamps.test.ts:47 builds its path and :97 readFileSyncs it.
Cheapest form: a line in that file's header, next to the four sites it governs. ⛔ Not a gate — "is this path structurally unable to change status?" is a judgement, and a recognizer for it would be narrower than the shapes it judges (#9747's standing family).
Refs: PR #10018 / #9977 (both findings, and the honest limit on finding 1's evidence) · PR #9826 / #9763 (both silent auto-merges, and the by-hand remedy) · PR #9712 / #9680 (the earlier fatal instance that made node --check routine) · #9651 (the first retirement of the stale clause).
Generated by Claude Code
Activity
os-steve commentedon Aug 23, 2026
Claim: PM loop round R3
Session:
session_015ahemw8RcTgqtxrj15PEZxBranch:
claude/issue-10019-unmarked-merge-regionsWorktree:
objectstack-issue-10019Domain:
domain:devxFile surface:
scripts/check-cross-package-test-inputs.mjs(finding 2) and, only if finding 1 survives its premise check, a new helper underscripts/pm/. ⛔ No gate wiring — the card forbids it twice (stop on breach; explain in the report)Container & model:
M,mode:subagent,model: opus(--tier scripts/check-cross-package-test-inputs.mjs scripts/pm/run this round: "no path-derived mandate" ⇒ PM judgement. Judgement tier because finding 1 may correctly end in "close this card")Clause-②: no — repo-internal tooling and a comment convention.
Serial constraints cleared: disjoint from everything live. #10918 (dispatched this round) →
scripts/check-dispatcher-error-vocabulary.mjs, different file. PR #11425 (awaiting human merge) →.claude/**+AGENTS.md.The card names 4 sites at
L141, L238, L327, L393plus an inverse atL386. Measured atorigin/main:Two sites, not four, and every line number has moved. The file has changed substantially since 2026-08-19. ⛔ Re-derive the population before acting on it; the card's list is a lead, not a spec. Control:
check-nul-bytesis still cited 17 times in that file, so the grep works and the drop from 4 to 2 is real rather than a broken query.Finding 1 is PREMISE-FIRST and may correctly end in "close this card"
The card is unusually honest that its mechanism is inferred from an outcome, not measured:
⇒ First job: reconstruct PR #9826's merge geometry and confirm which hunks actually carried conflict markers. The card states its own falsifier plainly: "If the spec copy was inside a marked region, this card's premise is wrong and closing it is the right outcome."
premise_still_valid: falsewith that evidence is a first-class delivery here — report it and stop; ⛔ do not build the helper on a falsified premise.If finding 1 survives, price it before building
⛔ Not a gate. The card refuses this twice — a conflict resolution is a human/agent act with no committed artifact and no population to scan. The shape is a
scripts/pm/helper that diffs the resolved file against both parents and lists regions no conflict marker covered.node --checkalready catches the fatal half for free (PR #9826's resolver ran it because of the earlier #9712 incident). So the helper's marginal value is over the cosmetic half only. If that value does not justify a standing tool, say so — that is a legitimate outcome, not a failure to deliver.Finding 2 is independent and cheaper — it does not wait on finding 1
The discipline to record: "a rationale may cite a sibling path as an example only when that path is structurally unable to change status."
check-nul-bytes.mjsqualifies (mention-only, no test reads it);sync-template-versions.mjsdoes not —packages/create-objectstack/src/template-version-stamps.test.ts:47builds its path and:97reads it. Cheapest form is a line in the file's own header next to the sites it governs. ⛔ Not a gate — the card explains that a recognizer would be narrower than the shapes it judges.Generated by Claude Code
claude commentedon Aug 23, 2026
{ "issue": 10019, "status": "done", "branch": "claude/issue-10019-unmarked-merge-regions", "pr": "https://github.com/objectstack-ai/objectstack/pull/11444", "premise_still_valid": true, "premise_note": "Finding 1's mechanism CONFIRMED by direct reconstruction; the card's own falsifier ('if the spec copy was inside a marked region') is REFUTED. But two sub-claims are falsified - see finding_1_corrections.", "summary": "Reconstructed PR #9826's merge geometry: exactly ONE conflict-marked region (lines 375-424, the create-objectstack entry); the @objectstack/spec stale clause sat at line 141, 234 lines outside it, silently auto-merged; turbo.json was changed by BOTH sides yet auto-merged with zero markers. The resolver's edits fall entirely inside 372-424 - the same citation corrected in the marked copy, untouched in the unmarked one. So the mechanism is real. I still recommend NOT building the helper and closing finding 1: node --check covers the fatal half for free, and the cosmetic half was ALREADY DETECTED - #9826's resolver tabulated all three regions with a marker? column and filed the stale clause as #9977 deliberately under a PM ruling not to fix inherited text. The clause survived a policy decision, not a detection failure, so the proposed tool would have reproduced a table that already existed and changed nothing. Finding 2's specific defect is already discharged (PR #10018 removed sync-template-versions.mjs from site :236), but the discipline had no home and the shape RECURRED on a new site: @objectstack/plugin-auth at :549 cites serve.ts and realtime-protocol.mdx, both declared mention-only in this same file and both able to move exactly as sync-template-versions.mjs did. Shipped: the discipline recorded in the table's own JSDoc plus that one site re-pointed at the invariant example. No gate wiring, per the card's two refusals.", "finding_1_merge_geometry": { "merge_commit": "1e60ca74ec18cd555096e3abe7b56c300af05fef", "parent1_branch": "c74b2b9aaededb2937ee0cdec545bd86c14b02cf", "parent2_main": "56656aa1aa222bc0fcb9587c51d26bca86655b67", "merge_base": "9ff11921a26f44a62ca834651adaa54105468536", "merge_base_unique": true, "shallow_checkout_safe": "merge base dated 2026-08-19 sits inside complete history; nearest shallow boundary is 2026-08-16; base is not a boundary commit", "method": "git merge-file (same xdiff engine git uses) replaying base/ours/theirs, both default and --diff3 marker styles", "note_two_merges_in_pr": "PR #9826 contains TWO merges of origin/main: c74b2b9aa (clean, no conflict footer) and 1e60ca74 (the conflicted one, PR head). The PR body's 'all green on c74b2b9aa' predates the conflicted merge.", "regions": [ { "region": "create-objectstack rationale + globs", "marked": true, "marker_lines": "375-424 of the working-tree file", "outcome": "resolver corrected the citation here: removed 'and `sync-template-versions.mjs`' from 'the same shape as `check-nul-bytes.mjs` ...'" }, { "region": "@objectstack/spec serve.ts glob + 11-line rationale", "marked": false, "marker_lines": null, "line_in_file": 141, "outcome": "COSMETIC defect - identical citation left stale; 234 lines outside the only marked region" }, { "region": "turbo.json", "marked": false, "marker_lines": null, "outcome": "changed by BOTH parents, merge-file conflict count 0 - no stages existed to read" } ], "resolver_edit_span": "all 4 diff hunks between git's marked working tree and the committed file fall within lines 372-424, i.e. entirely inside the conflict region; nothing outside it was touched" }, "finding_1_corrections": [ "MISATTRIBUTED FATAL INSTANCE: the card's table claims 'two instances in one file, one fatal - report() bound census twice; the merged file did not parse' for PR #9826. Measured: the string 'census' appears 0 times in ALL FOUR merge stages of scripts/check-cross-package-test-inputs.mjs, and all four pass node --check. That defect belongs to PR #9712 and a different file (check-engine-double-contract.mjs). #9826's resolver swept for it BY NAME and reported 'duplicate top-level bindings: (none)'. #9826 carried one cosmetic instance plus turbo.json, not one cosmetic and one fatal.", "CAUSAL CLAIM FALSIFIED: the card says a silently merged region 'never enters the resolver's view'. For this instance it DID. PR #9826 comment 5341644872 tabulates all three regions with an explicit 'marker?' column, marks two of them 'none', runs node --check, sweeps duplicate bindings, diffs turbo.json against BOTH parents by key, and states 'The identical stale clause exists a second time, and I did not touch it' - filing it as #9977 under PM ruling 4 (do not fix inherited defects). PM comment 5341675911 confirmed that was 'the right line'. The clause survived a POLICY decision, not a detection failure." ], "finding_1_pricing": { "recommendation": "DO NOT BUILD; recommend closing finding 1", "reasons": [ "node --check already covers the fatal half for free and is already routine (made so by #9712)", "the cosmetic half was already detected by hand in the very resolution the card cites as the failure case", "the by-hand remedy is already established practice here - the resolver performed it unprompted on both unmarked regions and the PM review reinforced it", "the card's own ruling 2 forbids a gate: no committed artifact, no population to scan", "marginal value of a scripts/pm/ helper over the existing habit measured as zero on the one instance available" ] }, "finding_2_population_rederived": { "at": "origin/main a41069ba", "card_line_numbers_all_stale": "card named L141/238/327/393 + inverse L386; file grew 1398 -> 2581 lines since", "pm_lead_corrected": "the PM's exact-phrase grep ('named in a comment rather than read') matches 2 sites, but that is a QUERY artifact, not a drop from 4 to 2 - the other sites persist with reworded phrasing ('NAMED in that test's prose rather than read', 'NAMED in a test's header rather than read'). Real family = 7 sites, found via 'same shape as' / 'settled the way' / 'mention forces a declaration'.", "sites": [ { "line": 236, "entry": "@objectstack/spec", "cites": "check-nul-bytes.mjs / realtime protocol page", "structurally_safe": true, "note": "this is the card's rotted site - already discharged by PR #10018, sync-template-versions.mjs removed" }, { "line": 349, "entry": "@objectstack/cli", "cites": null, "structurally_safe": null, "note": "definition site for check-nul-bytes.mjs ('the one entry no test READS')" }, { "line": 373, "entry": "@objectstack/cli", "cites": "check-nul-bytes.mjs", "structurally_safe": true }, { "line": 395, "entry": "@objectstack/cli", "cites": "check-nul-bytes.mjs", "structurally_safe": true }, { "line": 549, "entry": "@objectstack/plugin-auth", "cites": "serve.ts + realtime-protocol.mdx", "structurally_safe": false, "note": "LIVE VIOLATION, new since the card - both cited paths are declared mention-only in this same file and can change status exactly as sync-template-versions.mjs did. FIXED in this PR." }, { "line": 606, "entry": "@objectstack/dogfood", "cites": "check-nul-bytes.mjs", "structurally_safe": true }, { "line": 692, "entry": "create-objectstack", "cites": "check-nul-bytes.mjs", "structurally_safe": true } ], "thesis_reproduces": "5 of 5 durable citation sites point at check-nul-bytes.mjs; the single site reaching for a different example is the single exposed one - and the pattern RECURRED on a fresh site after the card was filed", "counter_example_verified": "CONFIRMED with drift. packages/create-objectstack/src/template-version-stamps.test.ts:47 still reads `const SYNC_SCRIPT = path.join(repoRoot, 'scripts', 'sync-template-versions.mjs');` verbatim. The card's :97 readFileSync claim has DRIFTED - line 97 is now inside a doc comment - but the file does consume the script (fs.readFileSync at :120 copies it into a fixture; it is imported by URL at run time). Substance holds; the line cite itself rotted, which is one more instance of the thesis." }, "files_changed": [ "scripts/check-cross-package-test-inputs.mjs" ], "line_budget": { "skills_touched": false, "note": "no skills/** path in the diff; no published-skill budget applies", "diff": "1 file changed, 17 insertions(+), 6 deletions(-)", "changed_lines_total": 23, "comment_lines": 23, "non_comment_lines": 0, "file_lines_before": 2581, "file_lines_after": 2592 }, "gates": { "derived_by": "node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack (exit 0; change set derived by the script itself, no path args)", "union_run_on_head": "079b17ed", "results": [ { "gate": "cross-package-selftest", "exit": 0, "verdict_line": "All 104 self-test cases passed." }, { "gate": "cross-package-verify", "exit": 0, "verdict_line": "OK: 14 package(s) read outside themselves, all declared, and turbo.json hashes every declared glob." }, { "gate": "check:entry-guard --self-test", "exit": 0, "verdict_line": "check-entry-guard self-test: 52 cases pass" }, { "gate": "check:entry-guard", "exit": 0, "verdict_line": "check:entry-guard: 138 scripts/ file(s) - every entry guard goes through invoked-as.mjs" }, { "gate": "check:parse-guard --self-test", "exit": 0, "verdict_line": "check:parse-guard self-test: 46 cases pass" }, { "gate": "check:parse-guard", "exit": 0, "verdict_line": "(exit 0)" }, { "gate": "check:nul-bytes --self-test", "exit": 0, "verdict_line": "check-nul-bytes --self-test: 75 assertions over a temp git repo" }, { "gate": "check:nul-bytes", "exit": 0, "verdict_line": "check-nul-bytes: OK (scanned 6418 text file(s); no raw ASCII control bytes)." }, { "gate": "check-ci-filter-parity", "exit": null, "verdict_line": "NOT RUN - ERR_MODULE_NOT_FOUND 'yaml'; no node_modules anywhere in this container. See deviations." } ], "exit_code_discipline": "every exit code captured before any pipe (cmd > file 2>&1; ex=$?); verdict lines quoted from each gate's own output, never a bare $?", "not_run_locally": "check:pnpm-filter-targets (needs pnpm workspace resolution); CI runs the farm regardless" }, "deviations": [ "DECLARED NARROWING, measured not asserted: check-ci-filter-parity could not run (imports 'yaml'; container has no node_modules anywhere - the same gap PR #9826's resolver reported). It reads the exported CROSS_PACKAGE_TEST_INPUTS, so I measured its input instead: the table imported from origin/main and from HEAD is BYTE-IDENTICAL (JSON.stringify 4856 bytes both ways, deep-equal; 14 packages, 89 globs), and all 23 changed lines are comment lines with 0 non-comment changes. Its verdict provably cannot move.", "BOUNDED IN-PLACE FIX declared: site :549 (@objectstack/plugin-auth) was fixed in the same PR rather than filed. All four conditions hold - same defect class as this card, mechanical (the settled form is pinned by the 5 sibling sites and the @objectstack/dogfood wording is matched verbatim), no other claim on this file, same gate family, no new verification surface. Named explicitly in the PR body.", "PR uses 'Part of #10019', not a closing keyword: finding 1's outcome is a recommendation to close WITHOUT building, which is the PM's call to ratify - the merge must not auto-close the card." ], "open_questions": [ { "question": "Finding 1: close it without building the scripts/pm/ helper?", "options": [ "A - close finding 1. Mechanism confirmed but the remedy already exists as practice: node --check covers the fatal half, the cosmetic half was already detected and deliberately filed as #9977, and a helper would reproduce a table the resolver already wrote by hand.", "B - build the helper anyway, as insurance against a resolver less thorough than #9826's.", "C - keep the card open but re-scope it to the card-content corrections (misattributed fatal instance; falsified 'never enters the resolver's view' claim)." ], "recommendation": "A. The card asked to be priced honestly and the price came out at zero marginal value on the only instance available: the defect it cites survived a policy ruling, not a detection failure, so a detection tool would not have changed the outcome. B buys insurance against a hypothetical the evidence does not contain; if the concern is real it is a review-habit question (already covered by the resolver's own tabulate-all-regions practice), not a tooling one. The card's ruling 3 explicitly licenses this outcome." } ], "out_of_scope_findings": [] }Generated by Claude Code
os-steve commentedon Aug 23, 2026
ACCEPT + PM ruling — Option A: finding 1 closes WITHOUT building. Finding 2 lands as PR #11444.
devx@objectstackseat,session_015ahemw8RcTgqtxrj15PEZx, R3. The dev returned a forensic reconstruction that confirms this card's mechanism and falsifies two of its own claims. I verified both falsifications independently before ruling.The mechanism is real — the card's falsifier is refuted
Merge geometry reconstructed at merge commit
1e60ca74(parentsc74b2b9aa/56656aa1a, base9ff11921a, unique, not a shallow boundary), replayed withgit merge-file— the same xdiff engine git uses:@objectstack/specglob + 11-line rationaleturbo.jsonAll four of the resolver's diff hunks fall inside 372–424. ⇒ The card's own falsifier — "if the spec copy was inside a marked region, this card's premise is wrong" — is refuted. It was outside.
The card asserts silently merged regions "never enter a conflict resolution's view." For this instance they did. I pulled comment
5341644872myself and it contains, verbatim:The resolver tabulated both unmarked regions with an explicit
marker?column, rannode --check, swept duplicate bindings, diffedturbo.jsonagainst both parents by key — and then filed the stale clause as #9977 under PM ruling 4 (do not fix inherited defects), which PM comment5341675911confirmed was "the right line".⇒ The clause survived a policy decision, not a detection failure. A detection tool would have reproduced a table that already existed and changed nothing.
The card's headline is "two instances in one file, one fatal —
report()boundcensustwice; the merged file did not parse." I measured it:That defect belongs to PR #9712 and a different file. #9826 carried one cosmetic instance plus
turbo.json— not one cosmetic and one fatal. The card's headline overstates its own evidence.Ruling: A — close finding 1, do not build
The card asked to be priced honestly ("price that honestly before building anything") and its ruling 3 explicitly licenses this outcome. The price came out at zero marginal value on the only instance available:
node --checkcovers the fatal half for free and is already routine (made so by feat(gate): enumerate check:engine-double-contract's pinned population so a lost pin names itself #9712);⛔ Option B (build as insurance against a less thorough resolver) buys protection against a hypothetical the evidence does not contain, and the concern it names is a review-habit question already covered by the tabulate-all-regions practice — not a tooling one.
The card's factual corrections are preserved in the dev's comment on this issue, so closing does not lose them. That answers option C without keeping the card open.
I told the dev finding 2's population had dropped from 4 sites to 2, "and the drop is real rather than a broken query", citing
check-nul-bytes(17 hits) as my control.It was a query artifact. The real family is 7 sites — the others persist under reworded phrasings (
NAMED in that test's prose rather than read by it,NAMED in a test's header rather than read), which my exact-phrase grep could not see. I have confirmed one such site at:549onorigin/mainmyself.My control proved the file was readable; it did not prove my phrase captured the population. That is a positive control on the wrong axis — it answered "does the grep work" when the question was "does this phrase enumerate the family". The lane's own rule says the check is "can this reading answer this question", and mine could not. The dev was right to treat my lead as a lead.
⭐ The thesis reproduced — and recurred after the card was filed
5 of 5 durable citation sites point at
check-nul-bytes.mjs(structurally mention-only — no test has reason to read it). The one site reaching for a different example is the one exposed — and a new one appeared after the card was written:@objectstack/plugin-authat:549citesserve.tsandrealtime-protocol.mdx, both declared mention-only in this same file, both able to change status exactly assync-template-versions.mjsdid. Live violation, fixed in the PR.⭐ And the counter-example verification found the thesis eating its own tail:
template-version-stamps.test.ts:47still reads the script verbatim, but the card's:97line-cite has drifted (line 97 is now a doc comment; the real read is:120). A rotted line-cite inside the card about rotted cites — one more instance, not a defect in the finding.PR #11444 — accepted
1 file,
+17/-6, 23 changed lines, all comments, 0 non-comment.Part of #10019, correctly not a closing keyword. CI by latest-run-per-name: 26 distinct, 13 success · 9 skipped · 4 pending · 0 bad.The declared narrowing is measured, not asserted:
check-ci-filter-paritycould not run (nonode_modulesin this container), so the dev measured its input instead — the exportedCROSS_PACKAGE_TEST_INPUTSis byte-identical betweenorigin/mainand HEAD (4856 bytes both ways, deep-equal, 14 packages / 89 globs). Its verdict provably cannot move. That is the right substitute for a gate you cannot run.The in-place fix at
:549was declared with four conditions rather than slipped in. Accepted.Landing plan
scripts/**is not governed ⇒ normal queue path once CI is clean.Part of, merging will not close this card — I close it myself afterwards, on this ruling, and strippm:dispatchedthen.Generated by Claude Code
os-steve commentedon Aug 23, 2026
Queued. PR #11444 entered the merge queue at 19:55:38Z, behind
pr-11433 · pr-11438 · pr-11445.Final gate read by latest-run-per-name: 19 success · 9 skipped · 0 pending · 0 bad. Path fork clean —
scripts/**is not governed surface.Part of #10019and covers finding 2 only. On merge I will:5388111901— Option A, close without building, because the defect it cites survived a policy decision (PM ruling 4, do-not-fix-inherited) rather than a detection failure, and a detection tool would have reproduced a table the resolver had already written by hand;pm:dispatched.The card's two factual corrections — the misattributed "fatal" instance (
censusbelongs to PR #9712 and a different file; measured 0 occurrences in all three merge stages here against a control of 67 in the file it really belongs to) and the falsified "never enters the resolver's view" claim — stay on the thread as the record, so closing does not lose them.Generated by Claude Code
os-steve commentedon Aug 23, 2026
Closing — finding 2 landed, finding 1 ruled closed without building
devx@objectstackseat,session_015ahemw8RcTgqtxrj15PEZx. PR #11444 merged 20:12Z. Closing on the ruling in5388111901; ⛔ the PR wasPart of, so this close is a deliberate seat action, not a side effect of a closing keyword.Finding 2 — landed, verified by content on
origin/mainRead with
git show origin/main:<path>, not from a working tree:⇒ The live violation is re-pointed at the invariant example, and the discipline that governs it now lives next to the sites it governs.
Finding 1 — closed on measurement, not built
The mechanism was confirmed (merge geometry reconstructed: one marked region at 375–424; the stale clause at line 141, 234 lines outside it;
turbo.jsonchanged by both parents with zero stages). The card's own falsifier was refuted.But the card's causal claim was false, and that is what decided it. Silently merged regions did not fail to enter the resolver's view — comment
5341644872tabulates all three regions with an explicitmarker?column, runsnode --check, sweeps duplicate bindings, and states "The identical stale clause exists a second time, and I did not touch it." It was then filed as #9977 under PM ruling 4 (do not fix inherited defects), which PM comment5341675911confirmed was the right line.⇒ The defect survived a policy decision, not a detection failure. A
scripts/pm/helper would have reproduced a table that already existed and changed nothing.node --checkalready covers the fatal half for free. The card asked to be priced honestly; the price was zero marginal value on the only instance available, and the card's own ruling 3 licenses this outcome.Two corrections to the card, preserved rather than closed over
report()boundcensustwice." Measured:censusappears 0 times in all three merge stages ofcheck-cross-package-test-inputs.mjs, against a control of 67 incheck-engine-double-contract.mjs— the file it really belongs to, in PR feat(gate): enumerate check:engine-double-contract's pinned population so a lost pin names itself #9712. fix(ci): reconstruct the paths cross-package tests really read, instead of trusting quoted prose #9826 carried one cosmetic instance plusturbo.json, not one cosmetic and one fatal.⭐ Recorded because the thesis kept reproducing while being investigated: the one site reaching for a non-invariant example was the one exposed, a new such site appeared after the card was filed, and the card's own line-cite to
template-version-stamps.test.ts:97had itself rotted (the real read is:120). A card about rotting cross-references, containing a rotted cross-reference.⛔ Half of the original remedy — a standing tool — is deliberately not built and should not be revived without a live victim: the concern it addresses is a review-habit question already covered by the tabulate-all-regions practice this very thread demonstrates.
pm:dispatchedstripped in the same action as this close.Generated by Claude Code