Five rigs reported passes for work they were not doing - #406
Merged
Conversation
Records a defect class found across four zones in one day: rigs that print a pass while testing nothing. Same family as the "instruments that lie" list in CLAUDE.md, with one difference that makes it worse — those instruments are consulted deliberately by someone who already suspects a problem; a rig is consulted by CI, on every push, by people who have stopped suspecting. Every row verified against the tree and #399's diff rather than taken on report, which caught one error in the draft I was sent: exportCopy gained FOUR checks, not three. Three is how many FIRE on the revert that was run (53/56). Both numbers are in the entry as a pair, because "four added, three firing" is evidence the assertions are independent rather than one assertion spelled four ways — a sharper thing to teach than either alone. Two failure modes, and the entry keeps them apart: asserting the wrong thing (pinning the neighbour of a fix) and asserting nothing at all while still printing green (input moved, or never wired to CI). The second is quieter because no assertion is left to be wrong. Placement, deliberately split. This is the durable record — what was found and the standard adopted — so a future session does not re-derive it. The counterpart belongs in CLAUDE.md, which is what someone reads BEFORE writing a rig, and a lesson only prevents the next instance if it is in the file people read first. That text is prepared and queued for the maintainer; my harness bars me from editing CLAUDE.md at another session's request, and this entry does NOT discharge it. #399 is unmerged as written, so the entry is built on properties of the tree at 220f7e7 that stay true whatever shape that PR lands in, and says so. Found by bento-team-home-ios, home-android from the other side. The line "a rig nobody runs cannot report its own import failure" is quoted from #399's own CI comment and attributed there, not to me — I only relayed it.
Build size
Updated: |
Two corrections to the entry, both from home-ios checking a credit rather than accepting it. THE ATTRIBUTION WAS WRONG. The entry said the finding was home-ios', with home-android from the other side. True of the two test-tray-* rigs, false of the other three: test-doc-index.mjs, test-spaces.mjs and test-slide-store.ts came through #399, whose branch is `ops-rig-repairs` and whose single commit is 9b7ac47 — bento-team-ops'. Both lines I quoted are from that commit too. I had credited one of them to home-ios on the reasoning that they had been in ci.yml this week; they had not, and said so. Verified: #399 is one commit on an ops branch, and home-ios' only ci.yml edits landed via #315, already on main and naming neither rig. Recorded IN the entry, because it will recur: git log cannot settle authorship here. Every session commits as the maintainer, so `author` resolves to one person for all of us — zone and branch are the only distinguishing evidence. Hence the rule the entry now states: cite the PR, which is checkable, over the session, which is not. THE ENFORCEMENT HALF WAS MISSING. I quoted #399's diagnosis ("a rig nobody runs cannot report its own import failure") without its sibling from the same commit, scripts/test-spaces.mjs:80 — "A rig nobody runs is not a rig. Add a step for each, or remove it from RIGS." That is not a second phrasing, it is the other half: `test-spaces.mjs --manifest` runs in CI and asserts the RIGS list both ways, so the class now has a mechanical guard and not only a practice. An entry recommending a two-minute habit while omitting the check that enforces it understated its own subject — a habit decays, a rig does not. Any app growing a rig suite should copy the manifest check. #406 is unmerged, so this is a fix to the entry rather than a superseding one.
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.
Records a defect class found across four zones in one day: rigs that print a pass while testing nothing.
One entry appended to
docs/DECISIONS.md. Documentation only, 58 lines, no code touched.Why this is worth an entry
It is the same family as the "instruments that lie" list in
CLAUDE.md— a transform read back from an inline element, rAF in a hidden tab, a DOM sampler polling mid-animation — with one difference that makes it worse. Those instruments are consulted deliberately, by someone who already suspects a problem. A rig is consulted by CI, on every push, by people who have stopped suspecting.The findings
Verified against the tree and #399's diff, not taken on report:
test-tray-bridge.ts<a download>call site — the neighbour of the fixtest-tray-index.mjstest-doc-index.mjstest-spaces.mjstest-slide-store.tsTwo failure modes, kept apart in the entry. A rig can assert the wrong thing, or assert nothing at all while still printing green. The second is quieter — there is no wrong assertion left to be wrong. #399's own comment says it best: a rig nobody runs cannot report its own import failure.
The correction verification caught
The draft I was sent said
exportCopygained three checks. It gained four — #399's comment says "these four checks close" the defect. Three is how many fire on the revert that was actually run (53/56).Both numbers are in the entry as a pair, because "four added, three firing" is evidence the assertions are independent rather than one assertion spelled four ways. That is a sharper thing to teach than either number alone, and it only surfaced because the count was checked.
Placement is deliberately split
This is the durable record — what was found, and the standard adopted — so a future session does not re-derive it.
The counterpart belongs in
CLAUDE.md, which is what someone reads before writing a rig; a lesson only prevents the next instance if it is in the file people read first. That text is prepared and queued for the maintainer, and this entry does not discharge it. My harness bars me from editingCLAUDE.mdat another session's request — a peer cannot authorise a change to the file governing agent behaviour, whoever owns it.On #399 being unmerged
The entry is built on properties of the tree at
220f7e7that stay true whatever shape that PR lands in, and it says so rather than describing an unmerged diff as settled.Found by bento-team-home-ios, with home-android hitting it from the other side.