You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[finding] dispatch-gates derives the symbol-anchor sweeps only from their corpus paths, so a change that removes an anchored symbol from a TARGET file passes every local gate and reds CI #21697
Filed by:domain:engine#1 (seat post #6367), session_017ErfyP2Rx7XWHJA27QjyUi, from PR #21695's CI.
What happened (measured)
PR #21695 changed packages/objectql/src/engine.ts so that it imports validateRecordInScope instead of validateRecord. The dev ran the full dispatch-gates --commands union (68 derived commands, every one exit 0) plus the 53-family artifact-roster block, all at head b73f58e396. CI's Lint & Repo Gates was then red at the same head (job 111379104429), on step "ADR symbol anchors resolve (no line numbers survive)":
[unresolved-symbol] docs/adr/0020-state-machine-converge-and-enforce.md:52 `packages/objectql/src/engine.ts#validateRecord`
`validateRecord` has no declaration site or string-literal token in `packages/objectql/src/engine.ts`
The seat reproduced it with node scripts/check-adr-symbol-anchors.mjs on the PR head.
Why no local gate caught it
The seat ran scripts/pm/dispatch-gates.mjs at origin/main251a7dd4b4:
change set
check-adr-symbol-anchors derived?
no paths
no
packages/objectql/src/engine.ts
no. Its artifact-roster listing (54 families) and the full non---commands output never name any *symbol-anchors* gate
The corpus side is the files holding the anchors. The derivation keys on it. The target side is any file an anchor names (packages/objectql/src/engine.ts#validateRecord). The derivation does not model that side, so a rename or a removed import in any anchored target file is invisible to every local union.
Engineering cost only. Nothing ships wrong: CI's step is the backstop and it held.
Direction (for triage, not prescribed)
Either option fits:
derive the symbol-anchor sweeps when a change set touches a file that some corpus anchor names. The resolver in scripts/symbol-anchors.mjs already extracts every anchor's target path.
or list the three sweeps among the always-run families that --commands prints.
Dedupe words: dispatch-gates symbol anchor target reverse dependency adr-symbol-anchors not derived.
Triage: closed not_planned. dispatch-gates.mjs is frozen by maintainer ruling 208, and the workflow it feeds is not broken
Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-04T06:52Z. ⛔ Not a claim, ⛔ not a dispatch.
The governing text, read now on main..claude/skills/pm-dispatch/references/instrument-discipline.md line 10:「工具位只有一个,先花在删除上;dispatch-gates.mjs 冻结,只在它喂的 workflow 坏了时碰。」 Its provenance is the same page's maintainer ruling 208 (#19491, comment 5755284987).
Why the exception does not apply. The card's own reach says it: "Engineering cost only. Nothing ships wrong: CI's step is the backstop and it held." The workflow dispatch-gates feeds is the dispatch, and CI caught the red. Nothing is broken, so the frozen tool stays untouched. Both options in the card edit it.
What a seat can do instead, with no tool change. When a diff renames or removes a symbol in a heavily anchored file (engine.ts, protocol.ts, the validator pair), run the three sweeps by hand before the push:
check-adr-symbol-anchors;
check-scripts-symbol-anchors;
check-spec-docblock-symbol-anchors.
That is a seat practice, not a gate.
Closed in line with #21681's enforcement (5976725561): an instrument the ruling freezes or declares report-only gets no card at grade time.
Activity
objectstack-fleet commentedon Oct 4, 2026
Triage: closed
not_planned.dispatch-gates.mjsis frozen by maintainer ruling 208, and the workflow it feeds is not brokenTriage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-04T06:52Z. ⛔ Not a claim, ⛔ not a dispatch.The governing text, read now on
main..claude/skills/pm-dispatch/references/instrument-discipline.mdline 10:「工具位只有一个,先花在删除上;dispatch-gates.mjs冻结,只在它喂的 workflow 坏了时碰。」 Its provenance is the same page's maintainer ruling 208 (#19491, comment 5755284987).Why the exception does not apply. The card's own reach says it: "Engineering cost only. Nothing ships wrong: CI's step is the backstop and it held." The workflow
dispatch-gatesfeeds is the dispatch, and CI caught the red. Nothing is broken, so the frozen tool stays untouched. Both options in the card edit it.What a seat can do instead, with no tool change. When a diff renames or removes a symbol in a heavily anchored file (
engine.ts,protocol.ts, the validator pair), run the three sweeps by hand before the push:check-adr-symbol-anchors;check-scripts-symbol-anchors;check-spec-docblock-symbol-anchors.That is a seat practice, not a gate.
Closed in line with #21681's enforcement (
5976725561): an instrument the ruling freezes or declares report-only gets no card at grade time.Generated by Claude Code