tools: the write-axis fault names the faulting tool, and its own recipe is now a command the checker can resolve
A gate that has only ever been seen green is indistinguishable from a gate that cannot go red, so the write axis was mutated one defect at a time in throwaway worktrees (nine cases, wizard-outputs/volt/2026-10-21-write-axis-bites/ mutation_study.py). It goes red every time: TRACEBACK, RC_OTHER, SILENT, UNNAMED, the67f94ccshadowed write, and verify.py's own write-axis leg -- while the clean control stays green 21/21. The study found two things this commit fixes and one it only states. FIXED 1 -- the detail line on a red write-axis leg named a healthy tool. Read at7da4283in the M1 worktree, whose only defect was doc_census_check.py, verify.py printed `FAULT: append_only_audit.py OK 2 cannot write --json ...`: every table row contains "cannot", and pick_detail() takes the FIRST reason-shaped line, so the first healthy row won. write_probe.py now prints a `FAULT <tool> ...` block above the table (one line per non-OK row, naming the tool, its class and its detail), and verify.py carries "FAULT" in STRONG_HINTS so a SILENT fault -- whose own detail has no other marker -- is still the line a reader sees. Cell c11 grades the block: selftest 10 -> 11 cells, 11/11 rc 0. FIXED 2 -- doc_command_check.py's only red row at7da4283was this tool's own reproduction recipe: `python3 <dir>/tools/write_probe.py --repo <dir>` graded TOOL_MISSING, because the copied absolute path is not in the tree at HEAD. The recipe now reads `cd <dir> && python3 tools/write_probe.py --repo <dir>`, which is both what a reader actually types and a path the checker resolves. STATED, NOT CHANGED -- UNNAMED grades the TEXT, not the guard's sentence. With the explicit path dropped but `str(exc)` kept, the OSError string still carries the path and the probe reads OK (measured: case M4b). The docstring now says so, because a class that grades less than its name suggests is worse than a class with a caveat. Measured before this commit, at7da4283: write_probe --repo . 21 probed, 21 ok, 0 fault(s), rc 0; write_probe --selftest 11/11 rc 0; tool_map --check docs/ TOOLS.md rc 0; doc_census_check --tools tools/write_probe.py --fail 0 STALE rc 0. Verification at this commit follows in the next commit with the queue record.
This commit is contained in:
1 parent
7da4283ec9
commit
cc2c6a5fdb
2 files changed
+84
-11
No files matched your search
+8
-1
@@ -184,7 +184,14 @@ LEGS = (
|
||||
# the row said FAULT beside a line about the README while the tool's own
|
||||
# "FAIL: 2 file(s) violate the check-in contract" sat further down, unpicked.
|
||||
STRONG_HINTS = ("STALE:", "FAIL:", "FAILED", "fatal", "TIMEOUT", "NO_",
|
||||
"cannot", "error", "Error", "refus")
|
||||
"cannot", "error", "Error", "refus",
|
||||
# write_probe's fault block (2026-10-21): each line begins
|
||||
# "FAULT <tool> ...", and that line sits above the probe table
|
||||
# precisely so this function reaches it before the first healthy
|
||||
# row. A SILENT fault's own detail carries no other marker, so
|
||||
# without this token the block would be skipped for the row that
|
||||
# names a tool with nothing wrong with it.
|
||||
"FAULT")
|
||||
WEAK_HINTS = ("FAIL", "not a ")
|
||||
|
||||
# A tool's concluding line: `reply_check: 192 file(s), 0 new fault(s) ...`.
|
||||
|
||||
Reference in new issue
Block a user