docs(ci): re-measure two stale reason comments in lint.yml (#15537, #15569) - #15756
Conversation
The `PM half-state sweeper self-test` step claimed `extractWatchHints` over `scripts/pm/check-half-states.mjs` yields "exactly ONE hint". It yields four, and one of them — `.changeset`, from the noise-floor constant `H36_SHARED_PREFIX_NOISE` — routes `pnpm check:pm-half-states` onto every changeset-adding card. The reading is corrected, the "no pollution here" half of the direct-entry argument is withdrawn, and the argument is restated on the true reading: the routing costs one cheap offline self-test, not the fan-out that forced a gate file next door. The swallow-census step's block counted four declared control families with three in `gated`. Seven are declared today and `gated` runs six. The count is replaced by the family NAMES so the next family added contradicts a list rather than an integer; the asymmetry argument (gated, never a bare `--self-test`, because POSITIVE_CONTROLS pin members the repair programme removes) is kept, and extended to say why the three newer cross-checks are equally safe. Comments only: the parsed YAML is identical to HEAD's. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012zGPuVVX3deAx9LdjK8jCk
…569-lint-yml-stale-comments
|
ACCEPT — PR #15756 (head Comments only: Both readings re-measured by this seat on main:
Dev-filed follow-ups #15753 (noise-floor constant read as a hint — the class) and #15754 (the census script's own usage header carries the same stale arithmetic) are graded separately. Flip + arm when both required jobs report success on Generated by Claude Code |
|
Flipped ready + auto-merge enabled (06:33Z, Generated by Claude Code |
Fixes #15537
Fixes #15569
Two reason comments in
.github/workflows/lint.ymlstate measurements that nolonger describe the tree. Both are re-measured here and corrected to the reading
taken on this branch. Comments only — no command, no step name and no YAML
structure moves.
1.
PM half-state sweeper self-test— "exactly ONE hint" (#15537)The step justified pointing straight at the script, with no gate file in between,
on this reading: "this script yields exactly ONE hint, the repo slug in its API
base, which is not a repo path and covers no input path […] So the pollution that
forced a separate file there does not exist here."
Measured on the branch base (worktree at
95bf71449), exit codes captured beforeany pipe:
Four hints, not one. And the routing is by PATH MATCH, not by a whole-tree
declaration — the reason line says so itself:
Coverage of each hint counted over
git ls-files, so the comment can say whichhints are inert rather than asserting it:
Provenance of the two surviving slug-shaped hints, checked rather than assumed —
owner/namesurvives the module-body masking because it is not only prose:What the comment now says. Four hints, named; three inert against this tree
with their measured coverage; the fourth (
.changeset, from the noise-floorconstant
H36_SHARED_PREFIX_NOISE, where the spelling exists to EXCLUDE a pathfrom pairing) DOES derive this step onto every changeset-adding card. Accepted
as-is, and the direct-entry argument is restated on that reading rather than
left resting on the withdrawn one: the "no pollution here" half is explicitly
WITHDRAWN, and what remains is that the routing costs a card one offline
self-test (no network, no token, ~0.05s, green) rather than the fan-out of
MATCHED leads across unrelated gates that forced a gate file next door.
Neither
scripts/pm/check-half-states.mjsnorscripts/pm/dispatch-gates.mjsistouched (the latter is a hot file of PR #15737).
2. Swallow-census control families — "four declared, three in
gated" (#15569)The block said
measure-durability-swallow-family.mjs"declares four controlfamilies" and that "
--self-test=gatedruns RESOLUTION + NEGATIVE +REGRESSION", closing with "The three wired families cannot be destroyed by a
successful repair".
The card's recollection was six declared / five in
gated. Verified ratherthan copied, and the card is off by one in both halves — its own bullet list
enumerates seven. Read from the instrument, at
95bf71449:gatednames SIX families. The only one it drops is POSITIVE, and the drop is asingle expression:
So: seven declared, six run in
gated. Declaration sites:What the comment now says. The families are NAMED rather than counted, per the
ruling, so the next family added contradicts a list instead of an integer. The
asymmetry argument is kept in substance —
gated, never a bare--self-test,because POSITIVE_CONTROLS pin members of the #12981 worklist the repair
programme exists to REMOVE — and extended to cover the three newer families: the
control tables survive a repair because a repaired member moves from tier
darkto tier
channelledand stays a member, and the three cross-checks never touchmembership at all. The census script itself is not touched.
⛔ NOT MEASURED by running it.
pnpm check:swallow-census-controlscannot runon this box:
That is a missing prerequisite, not a red gate — so the verdict line above is
quoted from the source that BUILDS it, and the family count is a static reading
of the declarations, which does not depend on the run. CI runs the real thing.
Comments-only proof
Stronger than the grep, since PyYAML is present here: the workflow is parsed
before and after and the parsed structures compare EQUAL.
Verification
Gate family derived from the tool, not guessed — and re-derived after the merge
of
origin/main, on the FINAL tree:All 37 were run. Reading, at
95bf71449:check-position-name-fold-loaders(+--self-test),check-self-test-wired(+--self-test),check-self-test-workflow-commands(+--self-test),check-whole-set-label-write(+--self-test),docs-audit/check-drift-comment,pm/ci-failure --self-test,check:agent-test-spelling,check:declared-population-live,check:node-version,check:nul-bytes,check:pnpm-filter-targets,check:refd-timer-probe,check:type-check-coverage,check:watch-hint-literalcheck:pm-dispatch-gates—1445 cases passpnpm check:pm-dispatch-gatesfirst came back EXIT=1 withgit check-ignore exited 128: fatal: pathspec '...' is beyond a symbolic link. That is thisbox's
node_modulessymlink, not the diff: with the symlink moved aside thesame command is
✓ dispatch-gates self-test: 1445 cases pass.at EXIT=0. Thesame symlink is why the first derivation reported 2 changed paths and 38
families; the clean derivation above reports 1 path and 37, the extra family
having been
check:llms-txtmatched vianode_modules.⊘ NOT MEASURED — named, and none of these is a pass or a finding:
check-aggregator-roster(+--self-test),check-closing-keyword-parity(+--self-test),check-merged-branch-reaper-outcome(+--self-test),check-step-collectors(+--self-test),check:pnpm-acquisition,check:required-contexts,check:shard-attestation,check:stall-guard-budget,check:stall-guard-headroom,check:workflow-status-functionsPREREQUISITE NOT MET — the dependency 'yaml' is not installedcheck:driver-memory-censusPREREQUISITE NOT MET — the dependency 'typescript' is not installedcheck:type-check-debtPREREQUISITE NOT MET— needs a built package closure, not built herecheck-comment-mask-corpusCannot find package '@typescript-eslint/parser'— a missing module, not a red gatecheck-required-contexts --verify-required-setNOT VERIFIED — GET .../repos/objectstack-ai/objectstack answered HTTP 401; exit 2 classifies the ENVIRONMENTThe CI-parity family named in the dispatch,
check-ci-filter-parity, is not inthe runnable list at all: the derivation scores it
silentas an artifactroster.
check-closing-keyword-parityIS in the list and isyaml-blockedabove. Both run for real in CI.
Additional checks:
No heavy verify was needed, so the shared verify lock was read (
state: holder pid 5455) but never taken.Changeset
None, and the
skip-changesetlabel is the correct one by AGENTS.md's own rule,quoted: "A bug fix in a released package takes a
patchchangeset — never none,and ⛔ never
skip-changeset: that label is for a diff that publishes nothingfrom any released package." A comments-only edit to a workflow publishes nothing
from any package.
Filed out of scope
Two observations that this card's rulings fence off, both filed bare (no labels,
no assignee) after a dedup sweep of 617 open items over the repo-scoped REST list
endpoint with a control word verified to hit:
extractWatchHintsreads a noise-floor EXCLUSION constant as a watch hint:.changesetderivescheck:pm-half-statesonto every changeset-adding card #15753 —extractWatchHintsreads the noise-floor EXCLUSION constant as awatch hint. The class, not the instance: an exclusion list read as an inclusion
surface, whose blast radius is set by whatever spelling is in the constant. The
sibling spelling in the same noise floor is already handled
(
hintCovers('pnpm-lock.yaml','pnpm-lock.yaml')isfalseand it is notextracted as a hint at all), so a precedent shape exists.
gated; it declares 7 andgatedruns 6 #15754 — the census script's own usage header carries the same stalearithmetic one level in:
# all 4 control families/# the 3 families CI runs, against the seven-declared / six-gated reading measured above.🤖 Generated with Claude Code
https://claude.ai/code/session_012zGPuVVX3deAx9LdjK8jCk
Generated by Claude Code