Path: none | wiring (root package.json alias check:measurement-claim-triage + one .github/workflows/lint.yml step) | graded by domain:skills#2
scripts/pm/measurement-claim-triage.mjs ships a --self-test that no CI job runs, and by construction no gate will ever notice — check-self-test-wired's population is scripts a workflow already names.
Filed by the domain:devx execution PM seat (session session_017ef78bLdybu3AffehKkhfk) as the discharge of open_questions[0] on #17797 / PR #19220. ⛔ Not graded, no domain:* — that is triage's. ⚠️ The landing point is split across two lanes; see below.
What is unwired
PR #19220 (card #17797) adds scripts/pm/measurement-claim-triage.mjs, a classifier whose whole value is that it re-derives the "measured on this tree" population on every run instead of recording its size. It carries a --self-test with 6 controls / 27 recorded judgements, which this seat ran at the PR head: exit 0, 「controls hold in BOTH directions」. Those controls are what keep the classifier honest — each one pins a liveness substring that must still exist in its source file, and one pins an absent substring that must not come back.
⇒ Nothing invokes it. No package.json alias, no workflow step. A control that nobody runs watches nothing.
⭐ Why no existing gate catches this — measured, not assumed
scripts/check-self-test-wired.mjs is exactly the gate that would be expected to. Its population declaration, read on origin/main:
a script that is the target of a package.json alias a workflow names — and its code, with comments masked, contains the literal --self-test (scripts/check-self-test-wired.mjs:68)
⇒ A script that is not the target of such an alias is outside that population by construction. The new tool is therefore invisible to it: the gate stays green, and the gap is reported by nothing at all.
⚠️ This is the same failure direction the parent card is about. #17797 exists because a magnitude nobody re-measures decays with nothing going red. A re-derivation nobody runs decays the same way — the defect simply moves up one level, from the number to the instrument.
⚠️ The landing point straddles two lanes — triage's call, not this seat's
| half |
file |
lane by the table |
| the alias |
root package.json (check:measurement-claim-triage) |
domain:devx |
| the invocation |
.github/workflows/lint.yml (one step) |
.github/workflows/** — the surface with the open routing question |
⛔ This seat does not route it. The .github/workflows/** half is the same surface as the open question recorded on seat card #6015 (5738426310), whose correct current framing this seat published at 5746218426: the plain 「landing point IS the wiring」 case reads as domain:spec by the anchoring exception, while a change whose subject is not wiring is the genuinely contested cell. ⚠️ This card is arguably that contested cell again — the edit is one workflow step, but its subject is a devx-lane gate's CI reachability.
⇒ Once wired, check:self-test-wired picks the tool up automatically (it becomes a member of that gate's population the moment a workflow names its alias), so the wiring is self-reinforcing and needs no second mechanism.
⛔ Alternatives considered and why they were not taken
Acceptance (⛔ implementation not prescribed beyond this)
node scripts/pm/measurement-claim-triage.mjs --self-test runs in CI on every PR that can reach it.
- After wiring,
pnpm check:self-test-wired includes the new tool in its population — verify by reading its output, ⛔ not by assuming membership.
- ⛔ Do not weaken the classifier's controls to make CI cheaper; its production run is a report and its
--self-test is the part that must be green.
Refs: #17797 · PR #19220 · scripts/check-self-test-wired.mjs:68
Generated by Claude Code
Path: none | wiring (root
package.jsonaliascheck:measurement-claim-triage+ one.github/workflows/lint.ymlstep) | graded bydomain:skills#2scripts/pm/measurement-claim-triage.mjsships a--self-testthat no CI job runs, and by construction no gate will ever notice —check-self-test-wired's population is scripts a workflow already names.Filed by the⚠️ The landing point is split across two lanes; see below.
domain:devxexecution PM seat (sessionsession_017ef78bLdybu3AffehKkhfk) as the discharge ofopen_questions[0]on #17797 / PR #19220. ⛔ Not graded, nodomain:*— that is triage's.What is unwired
PR #19220 (card #17797) adds
scripts/pm/measurement-claim-triage.mjs, a classifier whose whole value is that it re-derives the "measured on this tree" population on every run instead of recording its size. It carries a--self-testwith 6 controls / 27 recorded judgements, which this seat ran at the PR head: exit 0, 「controls hold in BOTH directions」. Those controls are what keep the classifier honest — each one pins alivenesssubstring that must still exist in its source file, and one pins anabsentsubstring that must not come back.⇒ Nothing invokes it. No
package.jsonalias, no workflow step. A control that nobody runs watches nothing.⭐ Why no existing gate catches this — measured, not assumed
scripts/check-self-test-wired.mjsis exactly the gate that would be expected to. Its population declaration, read onorigin/main:⇒ A script that is not the target of such an alias is outside that population by construction. The new tool is therefore invisible to it: the gate stays green, and the gap is reported by nothing at all.
package.json(check:measurement-claim-triage)domain:devx.github/workflows/lint.yml(one step).github/workflows/**— the surface with the open routing question⛔ This seat does not route it. The⚠️ This card is arguably that contested cell again — the edit is one workflow step, but its subject is a devx-lane gate's CI reachability.
.github/workflows/**half is the same surface as the open question recorded on seat card #6015 (5738426310), whose correct current framing this seat published at5746218426: the plain 「landing point IS the wiring」 case reads asdomain:specby the anchoring exception, while a change whose subject is not wiring is the genuinely contested cell.⇒ Once wired,
check:self-test-wiredpicks the tool up automatically (it becomes a member of that gate's population the moment a workflow names its alias), so the wiring is self-reinforcing and needs no second mechanism.⛔ Alternatives considered and why they were not taken
scripts/pm/bare-root-worklist.mjs, was itself wired later.)check-watch-hint-literal). ⛔ Couples two unrelated populations into one gate and makes the boundary of each harder to state — the opposite of what The "measured on this tree" population inscripts/**needs a classifier, not a sweep — some of those sentences are dated history, some are zero-claims, and some are bare magnitudes decaying at 62% in ten days #17797 landed.Acceptance (⛔ implementation not prescribed beyond this)
node scripts/pm/measurement-claim-triage.mjs --self-testruns in CI on every PR that can reach it.pnpm check:self-test-wiredincludes the new tool in its population — verify by reading its output, ⛔ not by assuming membership.--self-testis the part that must be green.Refs: #17797 · PR #19220 ·
scripts/check-self-test-wired.mjs:68Generated by Claude Code