docs(pm): describe check-dispatch-gates' watch hints by shape, not by count - #13286
Draft
os-elon wants to merge 1 commit into
Draft
docs(pm): describe check-dispatch-gates' watch hints by shape, not by count#13286os-elon wants to merge 1 commit into
os-elon wants to merge 1 commit into
Conversation
… count
The gate's header said its watch hints were "the one constant below: this
gate is matched for a card that edits the tool, and for nothing else". It
carries three module-body constants — TOOL, plus SURFACE_MODULE and
FRAME_MODULE, declared with their own docblocks — so the sentence was a
false negative claim about the derivation, in the file whose subject is
derivation correctness.
Four sites in this file said it. Two of them are the ones the finding
names; the other two are the same claim in different spellings — the
backticking measurement ("the same single hint the file ships with") and
the TOOL docblock, which said "two watch hints" and had itself gone stale
a second time when the third constant landed.
All four are now count-free: they name the constants' shape and point at
the declarations, where each constant's reason already lives. A re-count
would re-rot at the fourth declaration, which is exactly how this survived
the second and third.
Measured on the parent commit: extractWatchHints over this file returns
scripts/pm/dispatch-gates.mjs, scripts/i18n-bundle-surface.mjs and
scripts/check-skill-frame-sync.mjs; the gate's step declares no job filter
and lint.yml no trigger paths, so hints plus gate-file identity are the
whole of what reaches this family.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CPrUz21stTFhJRUirdc4yw
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of #13230 — this PR repairs the sites that live in
scripts/pm/check-dispatch-gates.mjs. The sites inscripts/pm/dispatch-gates.mjsare deliberately untouched (that file is in flight as PR #13247, and #13232 / #13251 are held out of this round for it), so #13230 stays open for them.What was false
The gate's header said its watch hints were "the one constant below: this gate is matched for a card that edits the tool, and for nothing else". The file carries three module-body path constants —
TOOL, plusSURFACE_MODULEandFRAME_MODULE, each added by #9116 with its own docblock. A reader deciding whether a card editingscripts/i18n-bundle-surface.mjsneeds this gate was told by the authoritative header that it does not, while the tool's own self-test pins that it does.What I measured (parent commit
74049254d4)Live, through the tool's own extractor — not recalled:
Provenance, so the corrected "and for nothing else" is a measurement rather than a restatement:
So hints plus gate-file identity really are the whole of what reaches this family: there is no trigger-paths or job-filter provenance to inherit.
The backticking reading in the "Why the paths above are unquoted" section was re-derived too, on the parent commit and again on this commit: rewriting every repo path the header names into backticks yields exactly the hints the file ships with (the module-body constants, nothing out of the header). The old sentence's figure — "1 hint ... the same single hint the file ships with" — was stale in both halves; the invariant it was making survives, so the invariant is what the paragraph now states.
The count found four sites in this file, not the two the card named
SURFACE_MODULElanded and went stale again whenFRAME_MODULEdidThat last row is the argument for the shape of this repair: a hand-maintained count in this header has now gone stale twice.
The repair
Per the triage ruling on the card ("⛔ Do not 'fix' it by changing 'one' to 'three'"), all four sites are now count-free. They name the constants' shape and point at the declarations, where each constant's reason already lives — the enumeration has one home, and a fourth declaration would be read there rather than needing four sentences updated in step. The header also gains one sentence saying that the number is deliberately absent, and why, matching the ⛔ note that already governs the paragraph above it.
Local checks — run on
4ba6b55070, this PR's headAll green unless noted; each verdict is the gate's own printed line, exit codes captured before any pipe.
check:pm-dispatch-gates—✓ dispatch-gates self-test: 879 cases pass.(exit 0). This is the gate whose file changed, and its self-test is what pins the hint SET live.check:nul-bytes—check-nul-bytes: OK (scanned 7359 text file(s) ... no raw ASCII control bytes)check:watch-hint-literal—✓ 21 ROOT_DIR_WATCH_HINTS declaration(s), every one an array of quoted literals inside its own statement.check:self-test-wired—✓ every one of the 148 script(s) CI runs that ship a --self-test has that self-test run by CI.check:agent-test-spelling,check:bash32-floor,check:cli-command-ids,check:cross-package-test-inputs,check:entry-guard,check:parse-guard,check:pnpm-filter-targets,check-ci-filter-parity.mjs,check-shard-attestation.mjs— exit 0scripts/pm/bare-root-worklist.mjs --self-test— exit 0 (a convention-triggered obligation for editing a gate script; no new bare-root population is declared here)pnpm lint(eslint . --no-inline-config, whole repo, not narrowed) — exit 0, no outputcheck-test-completeness.mjs— NOT MEASURED, by the gate's own text: run with no argument it has noturbo run testlog to parse and exits 3, which it documents as "not a red, and there is nothing here to fix".The family list was re-derived from the real change set with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstackrather than taken from the dispatch prompt.Scope
Comment-only. No contract accept/reject behaviour changes and no published surface changes — the module body, the spawn, and every exit path are byte-identical; the diff is the header docblock and the
TOOLdocblock. No changeset: this PR releases nothing, henceskip-changeset.Generated by Claude Code
Generated by Claude Code