Repository navigation
v467 — The report names the file each pass wrote
What changed
Each pass is reported against the file it actually wrote. A live Advanced run finished 8/8 clean and its report listed pass 2 against …-p2.txt — a file nothing wrote. The tally was right: pass 2 had really run, but it rebuilt its todo list from pass 1's (path and all), so it wrote …-p1.txt a second time. The write step matches any pass file on purpose — a history spanning several passes would otherwise re-judge pass 1 against pass 2's name — so the pass was graded on its records, and only the name in the report was wrong: it came from the pass counter, which had already moved on. drillPassFile() now reads the last write_file path out of the run's records, so every pass is filed under the file an operator can open. Drills with no write step (Frontier, Browser, Custom) keep the expected-path fallback.
The report lists every pass it counts. The verdict signal that ends a run at its clean-pass target also builds the final report, and it fired before the finishing pass had been logged — so the modal counted two passes and listed one line. That signal is now announced last in the publish, after the pass is logged and the counter has moved.
Checks
Verified against a live Advanced run on a real model (nemotron-3-ultra via OpenRouter), not just the suites: the completion report now reads 2 passes · 2 failed attempts · 1 clean with two pass lines, both naming …-p1.txt — the file each pass wrote — and pass 2's failed step 7 quotes the real error.
JS 42 files / 1,400 assertions, PHP 35 files / 35 passed (3 skipped on this host), docs 14/14.
VERSION 466 → 467, APP_VERSION 463 → 467, every ?v= under ui/**, and both index.html files.