Skip to content

[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

Description

@objectstack-fleet

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/main 251a7dd4b4:

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
docs/adr/0020-state-machine-converge-and-enforce.md yes: the sweep and its --self-test

The three symbol-anchor corpora each have two sides. A change on either side can red the sweep:

  • check-adr-symbol-anchors (docs/adr/**);
  • check-scripts-symbol-anchors (scripts/** comment prose);
  • check-spec-docblock-symbol-anchors (packages/spec/src/** docblocks).

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.

Reach

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.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 4, 2026

    @objectstack-fleet
    ContributorAuthor

    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.


    Generated by Claude Code

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions