teal-sea / zeta-labstate of record · compiled 14 Aug 2026 · revision 9ebdea0 · source

Library · hunts/r_cb5ffe/RESULTS.md

Results — the detection power of `tests/test_doors.py`

1,535 words · 168 lines · source

Status: settled, at the level a mutation battery can settle it. Ten mutants built, ten run, one null control. The guard's power against this battery is 5/10, and the five it misses are not scattered — they are one structural gap plus its consequences.

Nothing here is evidence for or against RH (docs/08). Nothing here is a result about ζ; it is a measurement of one of this tree's own guards.

Null control

An unmutated git worktree at HEAD 40e42f7 passes both tiers, so a non-zero exit below is attributable to the mutant and not to the container.

tiercommandoutcome
fastpytest tests/test_doors.py -m "not slow"2 passed, 0.2 s
slowpytest tests/test_doors.py -m slow2 passed, 25.0 s

The table

idmutantfastslowcaught
M1doors README names a script that does not existcaught
M2a door's script renamed on disk, README stalecaught
M3a door page names a missing script; README untouchedescapedescaped
M4a command quoted only by a door page exits non-zeroescapedescaped
M5the README refute row's command exits non-zeroescapedcaught
M6a README row's command replaced by one naming no scriptescapedescaped
M7the certify door's Lean command misspelledescapedescaped
M8the adopt door's pytest command names a missing test fileescapedescaped
M9an interactive_lab page loads code from another hostcaught
M10an interactive_lab page loses its <title>caught

M1, M2 fail on test_the_doors_readme_names_only_scripts_that_exist; M9, M10 on test_interactive_lab_pages_are_single_file_and_script_free; M5 on test_the_refute_door_command_runs. Raw exit statuses, durations and failing node names are in results.json.

The five escapes were also applied simultaneously to one tree. That tree — five broken doors at once — passes the fast tier in 0.2 s and the slow tier in 27.1 s, both green. The escape is measured, not inferred from reading the source.

What the numbers say

The guard reads one file, and it is not a door page. Its whole notion of "a door's command" is the regex scripts/[\w.]+\.py applied to docs/doors/README.md. Two consequences fall straight out:

Existence and exit status are different checks with different reach. Of the five doors, existence of a scripts/*.py target is checked for three (learn, refute, discover) and exit status for two (learn, refute). M5 — the ledger's own named mutant, "a command that exits non-zero" — is invisible to the fast tier and caught only by the slow tier, so a contributor running -m "not slow" (the tier AGENTS.md recommends for a green check before changing anything) does not detect it.

The guard's stated intent is wider than the guard. The ledger says it guards against a docs/doors/ entry page whose quoted command no longer runs. What it measurably does is check the commands in the docs/doors/ README table, for existence, plus run two of them. That is a useful guard; it is a narrower one than its sentence.

None of this is a defect report against tests/test_doors.py. A guard's scope is bounded by its misses, and until now this one's misses were the empty tuple because nobody had looked.

Proposed ledger amendment — reported, not applied

harness/departments/guard_ledger.py is in the demoted half of harness/ (harness/VERDICT.md), and a hunt may not promote its own claim. The record this measurement would support, for an operator to apply or refuse:

fired           True
demonstrated_by hunts/r_cb5ffe/probe.py  (5/10 against a ten-mutant battery)
scope           the commands in the docs/doors/README.md *table* that name a
                scripts/*.py path — existence for all of them, exit status for
                two (learn, refute); plus the two interactive_lab contract
                clauses. Door pages themselves are never read.
known_misses    a command quoted inside a door page rather than in the README
                  table (learn.md's scripts/03_primes_from_zeros.py is
                  entirely unguarded)
                a README row whose command names no scripts/*.py path — the
                  certify door (Lean) and the adopt door (pytest) are checked
                  neither for existence nor for exit status
                a README row deleted or emptied: only the whole table going
                  empty is detected
                a command that exists and exits non-zero, when the fast tier
                  is the tier being run

Method notes and what could go wrong with them

What was not settled

Loose threads