CI / build (push) Has been cancelled
- Archive 79 completed framework-dev tasks from tasks/ -> tasks/complete/ - status.py: add --cleanup-done and --install-cleanup-schedule commands - Add scripts/automaton-cleanup.sh for periodic task archiving - Dashboard: rename 'Background' tab -> 'Agent', 'Cleanup' agent -> 'Completed Task Archiver', remove redundant group headers and pill badges, dim inactive agent placeholders - .rules.md: add Self-Documenting UI Names rule - New tests: test_cleanup_done.py, expanded test_app.py and test_task.py
2.7 KiB
2.7 KiB
CODE_REVIEW: add-blast-radius-scheduler
Reviewed against SPEC.md R1-R8.
R1-R8 checklist
| Req | Status | Notes |
|---|---|---|
| R1 _ensure_worktree | PASS | Dispatches on blast_radius.use_worktree (default True); creates via git worktree add; records in state |
| R2 graceful degradation | PASS | Not-a-repo, git-missing, and worktree-add-fail all return project root with WARNING |
| R3 cmd_tick integration | PASS | Step 4 replaced with cwd = _ensure_worktree(...) |
| R4 branch already exists | PASS | Retries without -b when stderr contains "already exists" |
| R5 state consistency | PASS | Stale path cleared; state written atomically |
| R6 platform paths | PASS | pathlib.Path throughout; git handles OS normalization |
| R7 doc updates | PASS | technical.md section 7 updated; CHANGELOG updated |
| R8 tests | PASS | 15 tests, 6 classes + regression |
Edge cases checked
use_worktreemissing fromblast_radius-- defaults toTrueviablast.get("use_worktree", True). PASSblast_radiusentirely missing --cfg.get("blast_radius") or {}returns empty dict;use_worktreedefaults True. PASS- Worktree path exists but is not a git worktree --
git worktree addwould fail; runner falls back to project root. PASS - Branch exists but worktree was deleted -- first
git worktree add -bfails with "already exists"; retry without-bsucceeds. PASS git worktree addtimes out --_git_runhastimeout=15;subprocess.TimeoutExpiredis aSubprocessError, caught by_git_run. PASS- State written before step 10 -- intentional: the worktree exists on disk, so recording it is correct even if the tick crashes later. The drift gate will check it on the next tick. PASS
- Concurrent ticks both creating worktree -- TOCTOU: both might pass
worktree_path is null, both callgit worktree add, second one fails because the path exists. The second tick falls back to project root. Not ideal but safe (no state corruption; atomic write). Same TOCTOU class asadd-status-brakesA6. PASS for v1.
Code-quality observations
_git_runis a generic wrapper -- could be reused for other git operations in the runner. Currently only used by_ensure_worktree. Fine for v1.- Branch name
loop/<name>-- matches technical.md. If the loop name contains slashes (e.g.ci/triage), the branch name would beloop/ci/triagewhich git treats as a hierarchical branch. But_is_kebab_casein status.py rejects slashes in loop names. PASS. - No worktree removal on loop deletion -- if the user deletes a loop dir, the worktree branch remains in the repo. Worktree GC is deferred to v1.1 (BACKLOG). Accepted.
Verdict
APPROVE. Ready for bug_find.