Skip to content

The #14878 absence pin covers packages/ only — ruling D's full tree radius needs the dispatch-gates residue measurement redone first #15097

Description

@claude

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

  1. 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.
  2. 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.
  3. 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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions