Executing Plans
Progress lives on disk, not in context
Maintain .claude/work/<task-id>.progress.md from templates/progress-ledger.md, updated
after every task, before starting the next.
This is not bookkeeping. Conversation memory does not survive compaction, and re-dispatching already-completed tasks is the most expensive failure in long runs. The ledger is the source of truth for what is done; the context window is a cache.
Per task
- Write the failing test.
- Run it. Confirm it fails for an assertion reason — not an import error. An import error proves the file does not parse, not that the test exercises anything.
- Write the minimal code to pass.
- Run it. Confirm it passes.
./bin/verify fast.- Commit. Update the ledger.
Rulings, not stalls
When the plan is ambiguous but a reasonable path exists: make the call, log it in the ledger under Rulings, and continue. Stopping on every ambiguity makes autonomy useless.
Only four things force a stop:
- Irreversible or destructive operations
- Security-sensitive actions
- Side effects outside the worktree
- The plan is broken enough that every path forward is a guess
Fix-loop escalation
Per failing task, not globally:
| Round | Action |
|---|---|
| 1–3 | Resume the same implementer |
| 4–5 | Fresh implementer, one model tier up |
| 6 | Stop. Blocked report. Human decision. |
Repeating the same fix shape is thrash, not persistence. If the diff looks the same twice and the gate did not flip, stop at once — do not spend the remaining budget.