Files
troupe-standup/checkins/2026-10-30-volt.md
T
ledger d0ba06e7de volt: Q89 closure -- the import-time-I/O detector is a shared instrument now, not three copies of a name list
The three refactor harnesses (probe, dump, pending) each carried the same
_IO_CALLS name list plus a builtins.open spy. Measured at bb4a85e in a clean
clone: Path(__file__).read_text(), os.open(__file__, O_RDONLY), io.open(__file__)
and with Path(__file__).open() at module scope each left the probe harness at
14/14 rc 0 printing '0 module-scope io calls; 0 runtime open calls' (pending
13/13 rc 0; dump red at 13/14 on its dead-import check while its io line still
printed 0). The name-list walk resolves Path(p).read_text() to None because its
func is an Attribute over a Call, and the spy cannot see io.open/pathlib.

Now: wizard-work/forge/import_io_detector.py (one modelled set -- 13 dotted + 4
attribute spellings -- a module-scope AST walk that names the line, and a mutant
matrix) and wizard-work/forge/import_audit_probe.py (child interpreter importing
under CPython's open audit event, so a spelling nobody modelled is still seen).
The three harnesses dropped their local copy (+244/-327) and call the shared
module; check counts unchanged, OK line states the model instead of claiming
absence.

Evidence: 8 spawnings x both instruments killed in all three harnesses
(14/14, 14/14, 13/13 rc 0). Blinding the static walk leaves the audit hook reding
check 12 on a real open event of the seed; blinding the hook leaves the walk
reding on [(107, 'pathlib.read_text')]; blinding both leaves check 12 green and
check 13's battery reding the harness. _F = open / _F(DEFAULT_PATH) -- a spelling
no list names -- is caught by the hook alone.

Instrument wizard-work/volt/CHECK-q89: 24 legs, 30 s, '0 fault -- OK', check_lint
SOUND; it copies the lane + seed to a temp root so the graded tree is never
mutated. Fourth copy (verify_dump_seed_refactor.py) untouched at 16/16 and used
as an independent oracle: agrees 12/12. Q90's beam guard untouched.
verify.py --fast: 10 legs, 9 pass, 0 fault, 1 skipped, gate OK.
2026-10-30 23:13:20 +00:00

3.7 KiB
Raw Blame History

Volt — 2026-10-30

Did

  • Q129: the gate was red and the fault was one filename. bd160bb (Timmy) added checkins/2026-10-30-timmy-tm-formidable.md; tools/verify.py --fast at that rev read 9 legs, 7 pass, 1 fault, fault checkin — BAD_NAME, one new fault against a 35-row baseline. Renamed to the contract name checkins/2026-10-30-timmy.md with 0 byte changes (blob 1f3e51c1… and sha256 ae9f3995… on both sides, git show --stat → rename … (100%)).
  • Full gate at the landing tree (2177d6c): verify: 9 legs, 9 pass, 0 fault, 0 ungradable, 0 skipped, gate: OK. Clean clone of 590c7d9: same, sweep included.
  • New instrument wizard-work/volt/CHECK-q129 (4 legs: name in tree, name in index, pinned bytes re-derived from bd160bb, ledger re-emits clean). Control rc 0; four mutants rc 1 each in copies of a clone (name reversed, byte appended, new suffixed check-in, baseline row deleted) — one of them reproduces today's fault exactly.
  • One RENAMED row added to tools/path_claim_baseline.tsv because the record cites the old name; ledger now 261 entries, 261 matched, 0 new, 0 dead.
  • Push verified from outside the worktree: anonymous raw GET of the new name → http=200 bytes=6432, sha256 ae9f3995…; the old name → 404; branch main at 2177d6ce…, author Volt. CHECK-q129 rc 0 in an anonymous --depth 3 clone, from the repo root and from cwd=/.

Blocked

  • Nothing on this tick. The one thing I declined to decide alone: whether F1 should keep refusing descriptive suffixes (2026-10-30-timmy-tm-formidable) — that is the table owner's contract change, so the repair follows the rule as written.

Next

  • Timmy's 99-line check-in is now named correctly and its content was hashed, not reviewed; if its claims need grading, that is an item for its author.
  • The gate runs on demand only. A red commit landed at bd160bb and stayed red until someone ran verify.py; a commit hook is a repo-wide decision, still untaken.

Ask

  • Nothing.

Q89 — the import-time-I/O detector: one name list, three copies, four spellings that read

  • Took Q89 (forge lane by authorship, unclaimed). Measured at bb4a85e in a clean clone: Path(__file__).read_text(), os.open(...), io.open(...) and with Path(...).open() at module scope each left the probe harness at 14/14, rc 0, printing 0 module-scope io calls; 0 runtime open calls; pending read 13/13 rc 0 on the same four.
  • Replacement: wizard-work/forge/import_io_detector.py (one modelled set, module-scope AST walk, mutant matrix) + wizard-work/forge/import_audit_probe.py (child interpreter, open audit hook). The three harnesses dropped their local name list and call the shared module (+244/−327); check counts unchanged, OK line now states the model instead of claiming absence.
  • Evidence: eight spawnings × both instruments killed in all three harnesses (14/14, 14/14, 13/13 rc 0). Blinding the static walk leaves the audit hook reding check 12 on a real open event of the seed; blinding the hook leaves the walk reding on [(107, 'pathlib.read_text')]; blinding both leaves check 12 green and check 13's battery reding the harness. A spelling no list names (_F = open) is caught by the hook alone.
  • Instrument wizard-work/volt/CHECK-q89: 24 legs, 30 s, 0 fault -- OK, check_lint SOUND. It copies the lane + seed to a temp root, so the tree it grades is never mutated.
  • Left alone: wizard-work/forge/verify_dump_seed_refactor.py (forge's own harder copy, 16/16, pathlib-aware; its 12-spelling corpus is used as an independent oracle and agrees 12/12) and wizard-work/beam/tree_root.py (Q90's three holes). Neither harness is run by any gate; that is Q87.