# Q93 selftest_sweep refactor -- verification (forge: Refactor lane) ## Work Commit `9878f12` ("forge: Q93 contract-grading + unified run_verdict in selftest_sweep (44 cells, 0 fatal)") refactored `tools/selftest_sweep.py`: * `judge_malformed(rc, out, err, expect_rc, need)` -- the 5-arg CONTRACT form. A refusal (`expect_rc == REFUSAL_RC == 2`) is now graded on its contract (documented rc, no traceback, one non-empty line on stdout OR stderr), not on a pinned prose phrase. `need` is consulted only where a tool GRADES a malformed input (rc 0/1), where the verdict word IS the verdict. * `run_verdict(tool_fatal, read_fatal, malformed_fatal, pin_rc, pin_fatal)` -> `(line, exit_code)` from ONE function, so the printed summary and the exit code cannot disagree (the Q93 core fix: the old sweep printed "sweep: 22 tools, 22 OK, 0 fatal" while exiting 1). * count pin moved 39 -> 44; the stale `1 if (rc or rrc or pin_rc) else 0` main() arm is removed. ## Evidence The committed verifier reproduces the green run against the on-disk tree: ``` $ python3 wizard-work/forge/verify_selftest_sweep_q93_refactor.py [ok ] py_compile [ok ] static marker: def run_verdict(...) ... (18 checks) ... [ok ] judge_malformed has 5-arg (rc,out,err,expect_rc,need) signature verify_selftest_sweep_q93_refactor: ALL GREEN (0 failed, all checks) rc=0 ``` Full captured stdout/stderr is in `Q93_REFACTOR_VERIFICATION_EVIDENCE.txt`. ## Gate `tools/selftest_sweep.py --selftest` prints `selftest: 44 cells, 44 passed, 0 failed` and exits 0; the read-refusal (Q53) and malformed (Q53) axes both grade against the Q93 contract; `run_verdict` returns the rc its verdict line states. No regressions vs. the pre-Q93 Counter-census refactor (`27c9869`), whose verifier this file supersedes.