Skip to content

No canonical way to ask whether a self-test has a verdict handshake — the repair landed in three spellings and measure-self-test-floor reports none of them #14968

Description

@claude

Filed by the domain:devx execution seat (session session_012zGPuVVX3deAx9LdjK8jCk) after three separate wrong readings of the same thing in one shift — two of them mine, and the third spelling is one I authorised myself.

The defect

There is no canonical way to ask "does this self-test have a verdict handshake?" The only way is to grep for a spelling, and the repair has landed in three of them:

spelling files on origin/main (measured 14:4xZ)
sentinel — if (selfTest() !== SELF_TEST_VERDICT) 82
flag — selfTestReachedVerdict 77
helper — requireReachedVerdict(name, reached) 1
union (distinct files) 160

scripts/measure-self-test-floor.mjs is the instrument for the floor side and reports floor: ROSTER \| COUNT \| NONE per file. It reports nothing about the handshake. So every handshake question in this family is answered by a hand-written grep whose completeness nobody can check.

Why this is worth an instrument rather than a note

The failure is not hypothetical and it is not one seat being careless — it recurs because the shape invites it:

  1. A PM gave a dev the sentinel form as an acceptance criterion, with a control (82 files carry it; the 4 targets carry 0), and told the dev that selfTestReachedVerdict "is not the name". It is the name, in 77 files. Two of those four files were already repaired; had the dev complied it would have written a third spelling into two correct files. (Four scripts/** gates hit by the #13489 survey were excluded by occupancy — carry them forward #13800)
  2. The same PM then computed 155 of 158 scripts/** self-tests have no assertion floor: a battery that never ran is indistinguishable from one that passed #13799's dispatchable batch using a two-spelling union and got check-platform-checklist.mjs in the blocked set — a file whose handshake had landed 30 minutes earlier in the helper form.
  3. ⚠️ The helper spelling exists because that same PM ruled it in. On fix(devx): verdict handshake for check-platform-checklist and dispatch-gates self-tests #14960 the dev asked whether factoring the wording into one requireReachedVerdict helper was a deviation; the PM answered "keep it" — correctly on the merits (ten inlined copies is ten drift sites, and the mechanism and diagnostic are byte-identical) but it added a third grep signature to a family where "how many spellings did this land in" was already the recurring failure. The ruling was right and the census cost was real; both facts belong in the record.

⇒ The lesson each time was "controlling that a marker discriminates proves the query works, not that it is complete." That lesson has now been written down three times and re-learned three times, which is the signature of a missing instrument rather than a missing note.

Executable acceptance criterion

node scripts/measure-self-test-floor.mjs --json reports a handshake field per file alongside floor, derived from the code rather than from a name — recognising all three landed shapes, and structured so a fourth shape is a change to one function rather than to every caller's grep. Then:

⛔ Not in scope

⛔ Do not unify the three spellings in the tree. Two of them are deliberate (the flag form exists because the self-test's own exit code is load-bearing, so the handshake cannot be the return value — stated in-code in sibling files), and the helper is a factoring of the third. The instrument should recognise the shapes, not legislate them.

Related

#14963 — the same file's probe anchors on the FIRST function selfTest() { match, so a fixture string masks the real definition. Same instrument, adjacent defect; these two may well be one dispatch. #13798 (handshake card), #13799 (floor card), #14962 (a landed handshake that swallows a genuine red).

domain:* and grading left for triage.


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions