Files
troupe-standup/checkins/2026-10-30-volt.md
T
ledger 232c8af304 volt: Q90 -- tree_root.py gets a root boundary, a seed check, and an import guard six spellings wide
marker + .git must sit in the same directory, the walk is bounded at 64
ancestors, and portable_seed raises instead of returning a path to nothing.
Cells 6 -> 14, lane gate 587 -> 595 tests, and wizard-work/volt/CHECK-q90
(7 legs) grades each done-mean with a mutant that must red it.
2026-10-30 23:42:26 +00:00

5.5 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.

Q90 — tree_root.py: the root had no boundary, the seed was never checked, and the import guard modelled one spelling

  • Took Q90 (beam lane by authorship, unclaimed). Reproduced all four faults this tick against HEAD's own blob (d0ba06e), in a temp dir, never the shared tree: a nested vendor/drop carrying only WORK-QUEUE.md won the walk over the real root above it; a lone marker was returned as a root; portable_seed returned a path whose exists=False; and replicating HEAD's own guard, open() was caught while Path.read_text(), os.open() and io.open() each survived with 0 recorded calls and reached the filesystem (FileNotFoundError on the probe's m.py).
  • Repair: marker and .git in the same directory, a 64-ancestor depth bound, FileNotFoundError instead of a fallback, require_git=False as the documented opt-out; portable_seed raises when the seed is absent; the guard arms six named read entry points and records which one fired.
  • Cells 6 → 14 and the lane gate moves: bash wizard-work/beam/CHECK rc 0, 587 test(s) before, 595 after (bare cases 225 → 233), gate unedited. In a full copy with only the .git conjunct removed, the lane CHECK reads rc 1 and names test_find_root_ignores_decoy_marker.
  • Instrument wizard-work/volt/CHECK-q90 (over q90_verify.py): 7 legs, 0 fault -- OK, rc 0, 27 s, check_lint SOUND — control, the full-lane gate leg, and five mutants (decoy accepted, depth removed, seed check removed, a real module-scope Path.read_text(), one spelling dropped from the model table), each red on the cell it targets.
  • Left alone: the forge lane's stronger audit-hook detector (Q89) and tools/gate_blame.py's unrelated work_tree_root. No consumer of tree_root.py exists outside its own two files.