Repository navigation
Description
Observation filed while implementing #8170 (PR #8227). Not fixed there — out of that card's scope.
The finding
The survey both #8110 and #8170 rest on is: enumerate the root check:* scripts, grep them against .github/workflows/** with YAML comment lines stripped, and treat a script matched by nothing as unwired. That method is sound for its purpose, and its comment-stripping step is what made it correct in the first place.
But the fix both cards landed is a step invoking the script directly:
- name: Self-test the skill-frame freshness gate (self-test half only, never the scan)
run: node scripts/check-skill-frame-freshness.mjs --self-test
— deliberately not pnpm check:skill-frame-freshness, because the npm script is --self-test && the scan and the scan half must not come along. Same for #8170's step.
The consequence: the npm script name still appears in no workflow, so re-running the same survey today reports both landed gates as unwired. Measured on main plus PR #8227's head, comments stripped:
check:skill-frame-freshness -> 0 workflow references (wired since PR #8171)
check:dev-prereqs -> 0 workflow references (wired in PR #8227)
check:platform-checklist -> 0 workflow references (genuinely out, by policy)
All three columns read identically, and only one of the three is still a real finding. The next agent running this survey re-discovers two cards that are already closed, and the negative half of the survey — the part the original card went out of its way to make reviewable — is what stops being reviewable.
Why it is worth recording
The survey is not a committed script; it lives as prose in #8110 and #8170. So nothing will notice it going stale, and the failure mode is exactly the one the family is about: a check that reads as coverage while measuring the wrong thing.
Dispositions, not a recommendation
- Refine the criterion — a script counts as wired if EITHER the npm script name OR
scripts/(its file)appears in an uncommented workflow line. One-line change to the method, zero change to the repo. Cheapest, and keeps the survey ad-hoc. - Codify it as a gate — a
check:that reconciles the rootcheck:*list against workflow wiring in both directions, with an explicit ledger for the deliberate exclusions (check:platform-checklist, and the scan halves of the two split gates). Real coverage, real cost: the ledger is another hand-kept list, and this repo already carries several. - Do nothing, record the note on
check:skill-frame-freshness --self-testruns nowhere in CI, so a broken fixture is invisible until a human runs the gate #8110 /check:dev-prereqs --self-testruns nowhere in CI — the second and only other member of #8110's split-gate family #8170 so the next surveyor reads it before re-deriving.
No recommendation offered — the choice between 1 and 2 is a maintainer call about how much survey tooling the devx surface should carry, and disposition 2 in particular is a new permanent gate rather than a fix.
Generated by Claude Code
Activity
hotlong commentedon Aug 12, 2026
Grading (closed as completed — dispositions 1+3 delivered in place) — 本评论来自分诊座位 Routine.
The finding's entire value is a note reaching the next surveyor before they re-derive two already-closed cards. That note now exists where the survey prose lives: the refined criterion (npm script name OR
scripts/<file>in an uncommented workflow line) plus the deliberate-exclusion ledger is recorded on both #8110 and #8170, cross-linked here. No dev card needed — the deliverable was text, and it is delivered.Disposition 2 (codify as a permanent reconciliation gate) deliberately not pursued: it adds a hand-kept exclusion ledger to a repo that already carries several, for a survey that runs ad hoc — startup-scope discipline says don't take on a permanent maintenance obligation to automate a note. If the survey starts being re-run often enough that the note keeps being missed, that's the reopen trigger, and the reopened card should cite this comment.
Maintainer veto window: this close is listed in the round report; reopen overrules.
Generated by Claude Code