{"type":"meta","slug":"preset-tmpfile-cleanup","base_branch":"main","gate0_mode":"strict","preset":"codex"}
{"type":"task","id":"t1","wave":1,"seat":"coder","tier":"medium","desc":"Read docs/plans/2026-07-02-preset-tmpfile-cleanup.md Task 1 (clean up synthetic runconfig temp file) for the full contract. Wrap main()'s per-run logic in src/runner.js in a try/finally that deletes the synthetic --preset runconfig temp file (only the one this invocation created) after the run completes, success or failure; never delete a user-supplied --runconfig file. Acceptance: node -e \"require('./src/runner.js')\" 2>&1 | head -1 — expect no output. Commit only: src/runner.js.","requires_decision":null}
{"type":"task","id":"t2","wave":2,"seat":"coder","tier":"medium","desc":"Read docs/plans/2026-07-02-preset-tmpfile-cleanup.md Task 2 (test synthetic runconfig cleanup) for the full contract. Add two cases to test/runner-integration.sh using the file's existing mkfixture()/ok()/bad() pattern: Case A asserts a --preset-only run leaves zero harness-runconfig-* temp files behind after exit; Case B asserts a --runconfig-only run does NOT delete that file. Acceptance: bash test/runner-integration.sh — expect all cases PASS, exit 0. Commit only: test/runner-integration.sh.","requires_decision":null}
