Split out of #14878 by the domain:devx seat (session session_012zGPuVVX3deAx9LdjK8jCk) at 2026-09-03T22:0xZ, as the measured residual of that card's ruling D.
What ruling D asked for, and what landed
The ruling (#14878 comment 5528359266, maintainer 「同意」) says the absence pin widens «from one file to the tree». PR #15085 landed it at packages/ only. This card is the rest.
Why it stopped at packages/ — measured, not chosen
Declaring an examples/-wide .ts glob in scripts/cross-package-test-inputs.mjs makes that glob an inherited watch hint on every importer of that table, check:cross-package-test-inputs included. dispatch-gates.mjs's self-test pins that no hint of that gate reaches a test file outside packages/** — precisely because it is listed as a change-KIND rather than a path derivation, since the hint route cannot reach the population it judges.
Measured on that tree: all 41 tracked test files outside packages/ are under examples/. So one examples-wide glob does not shrink the residue class that case guards — it empties it, and the case's own remedy ("re-point at another member of its class") is impossible because no other member exists.
⇒ The implementing dev correctly refused to edit that self-test case: doing so would weaken a gate to fit a declaration, in a scripts/pm/ file its card did not own. It narrowed its own pin instead and wrote the cost into the pin's docblock.
Why this is not urgent
On origin/main at filing time, every surviving actionObjectKey reference is under packages/** — zero examples/ hits, #14669's showcase site having already been fixed. The delivered pin therefore has complete coverage of live sites; what is missing is prospective coverage of a new stale mention written under examples/.
What this card actually needs — ⛔ not a two-line change
- Redo the residue measurement behind
dispatch-gates.mjs's "no hint outside packages/**" self-test case. That is a scripts/pm/ decision and may belong to another lane — route accordingly rather than assuming it is this one's.
- Only then widen, and widen in two places, never one:
SCANNED_ROOTS in both pin files (packages/objectql/src/action-owner-key-single-source.test.ts, packages/runtime/src/action-owner-key-single-source.test.ts) and the package globs in scripts/cross-package-test-inputs.mjs. A new top-level root needs a matching glob or the pin scans a radius nothing re-runs it for — the failure mode the declaration exists to prevent.
- ⛔ Editing that self-test case is not the repair. The pin's own docblock says so at
:126–:148; read it before starting.
⚠️ The same reasoning applies to any other widening — docs/, content/, skills/, apps/ — not just examples/.
Acceptance criterion
SCANNED_ROOTS covers the ruling's full radius in both pins, check:pm-dispatch-gates is green without its self-test case having been edited, and an ablation shows the pin redding on a planted stale mention under the newly covered root — not merely passing.
Provenance: #14878 ruling D (5528359266); implementation PR #15085; ACCEPT and scope-shortfall note on #14878. domain:* and grading left for triage.
Generated by Claude Code
Split out of #14878 by the
domain:devxseat (sessionsession_012zGPuVVX3deAx9LdjK8jCk) at 2026-09-03T22:0xZ, as the measured residual of that card's ruling D.What ruling D asked for, and what landed
The ruling (#14878 comment
5528359266, maintainer 「同意」) says the absence pin widens «from one file to the tree». PR #15085 landed it atpackages/only. This card is the rest.Why it stopped at
packages/— measured, not chosenDeclaring an
examples/-wide.tsglob inscripts/cross-package-test-inputs.mjsmakes that glob an inherited watch hint on every importer of that table,check:cross-package-test-inputsincluded.dispatch-gates.mjs's self-test pins that no hint of that gate reaches a test file outsidepackages/**— precisely because it is listed as a change-KIND rather than a path derivation, since the hint route cannot reach the population it judges.Measured on that tree: all 41 tracked test files outside
packages/are underexamples/. So one examples-wide glob does not shrink the residue class that case guards — it empties it, and the case's own remedy ("re-point at another member of its class") is impossible because no other member exists.⇒ The implementing dev correctly refused to edit that self-test case: doing so would weaken a gate to fit a declaration, in a
scripts/pm/file its card did not own. It narrowed its own pin instead and wrote the cost into the pin's docblock.Why this is not urgent
On
origin/mainat filing time, every survivingactionObjectKeyreference is underpackages/**— zeroexamples/hits, #14669's showcase site having already been fixed. The delivered pin therefore has complete coverage of live sites; what is missing is prospective coverage of a new stale mention written underexamples/.What this card actually needs — ⛔ not a two-line change
dispatch-gates.mjs's "no hint outsidepackages/**" self-test case. That is ascripts/pm/decision and may belong to another lane — route accordingly rather than assuming it is this one's.SCANNED_ROOTSin both pin files (packages/objectql/src/action-owner-key-single-source.test.ts,packages/runtime/src/action-owner-key-single-source.test.ts) and the package globs inscripts/cross-package-test-inputs.mjs. A new top-level root needs a matching glob or the pin scans a radius nothing re-runs it for — the failure mode the declaration exists to prevent.:126–:148; read it before starting.docs/,content/,skills/,apps/— not justexamples/.Acceptance criterion
SCANNED_ROOTScovers the ruling's full radius in both pins,check:pm-dispatch-gatesis green without its self-test case having been edited, and an ablation shows the pin redding on a planted stale mention under the newly covered root — not merely passing.Provenance: #14878 ruling D (
5528359266); implementation PR #15085; ACCEPT and scope-shortfall note on #14878.domain:*and grading left for triage.Generated by Claude Code