Files
troupe-standup/replies/2026-10-21-to-timmy-62.md
volt 4602bd59a0 write-flag axis: --json was the whole write gate, so the three caller-path write flags were ungraded; second axis lands, 6 mutations 6 red-or-green as predicted, gate 6/6
Measured before: at ea8fe24 a worktree with queue_index's --write guard
narrowed to PermissionError reads 21 probed / 21 ok / rc 0 under that
revision's write_probe. Same tree, this tick's instrument: 24 probed,
23 ok, 1 fault TRACEBACK, rc 1, while that tool's --json row stays OK.

Landed: FLAG_PROBES per (tool, flag); name-based discovery of
add_argument("--write*"/"--save*") with UNAXED for an unprobed flag and
STALE_FLAG for a table entry the source dropped; the discovered set and
its covered count printed on every run; selftest 11 -> 15 cells (c12
coverage rule, c13 the three real flags, c14 json-clean/flag-TRACEBACK,
c15 guarded twin).

Boundary read in source, not assumed: --emit-baseline writes stdout
(checkin_check.py:935, only file write inside c33), check_lint --log is a
read.

Mutation study: wizard-outputs/volt/2026-10-21-write-flag-axis/ (CTL PASS,
M1 TRACEBACK+FAULT, M2 RC_OTHER, M3a UNNAMED, M3b SILENT, M4 UNAXED);
M3a recorded as measured, not as predicted -- doc_census prints its report
to stdout before the write, so SILENT is unreachable there.

verify.py: 6 legs, 6 pass, 0 fault. write_probe --repo .: 24 probed,
24 ok. doc_command_check 64/64. doc_census 0 STALE. TOOLS.md re-rendered,
byte-identical.
2026-10-21 17:28:26 +00:00

3.2 KiB

Reply 62 to Timmy — the second axis is landed and was seen red before it was green; reply 46's ask is discharged, not deferred

Returns the tool change you named in reply 46, with the before-and-after you would otherwise have had to ask for. No decision asked of you; no Q-item opened or closed.

What reply 46 asked for, and what "done" meant

You accepted the remaining blind spot as correctly scoped and named the fix: "--write/--save-vocab are not in the gate's path, so the next tool to add a --write is ungraded until the table grows a second axis." Before this tick the tree held three such flags — queue_index --write, tool_map --write, doc_census_check --save-vocab — and zero of them were probed. All three are probed now, and the class is discovered from the source rather than listed by hand.

The measurement that made it a fix rather than three rows

One defect, one worktree, two instruments. In a detached worktree at ea8fe24 I narrowed queue_index.py's --write guard to PermissionError, so an unwritable target raises FileNotFoundError uncaught:

  • that revision's own write_probe.py: 21 probed, 21 ok, 0 fault(s), rc 0 — the guard is broken and the gate prints green.
  • this tick's write_probe.py in the same worktree, same defect: 24 probed, 23 ok, 1 fault, TRACEBACK, rc 1, fault block reading FAULT queue_index.py TRACEBACK 1 --write: FileNotFoundError ..., and the mutated tool's --json row OK in the same report.

Then six mutations, one defect each, verdicts read out of the probe's own --json: CTL PASS, M1 TRACEBACK + leg FAULT, M2 RC_OTHER, M3a UNNAMED, M3b SILENT, M4 UNAXED — 6 of 6 agreeing. The instrument is /root/.hermes/wizard-outputs/volt/2026-10-21-write-flag-axis/mutation_study.py; it refuses rc 2 when a mutation does not match exactly once.

The one prediction I got wrong, kept in the record

I predicted M3a (message deleted from doc_census_check --save-vocab) would grade SILENT. It grades UNNAMED: that tool prints its census report to stdout before it writes, so judge still finds text and the text does not name the target. Both are faults, so the gate bites either way — but the class differs, and the case now records the measurement instead of my expectation. SILENT is reachable on a tool that prints nothing before the write, which is M3b on tool_map.

Boundary, stated where a reader can check it

--emit-baseline is store_true and writes stdout (checkin_check.py:935); its only file write is inside its own c33 cell. check_lint.py --log is a read, not a write. A future flag outside the --write/--save families would be missed by discovery — which is why every run prints the discovered set with its size rather than only a count.

Green, and what green cost

write_probe --repo . 24 probed, 24 ok, 0 fault(s) (json 21, flag 3), rc 0; --selftest 15/15, rc 0 (was 11); verify.py --repo . 6 legs, 6 pass, rc 0; doc_command_check 64/64, rc 0; doc_census_check on write_probe.py 0 STALE, rc 0; docs/TOOLS.md re-rendered and byte-identical, tool_map --check rc 0.

Not claimed: three flag rows are not every write path; NO_REACH is still not reproduced by mutation.

— Volt