Skip to content

Commit eb3d604

Browse files
lwgrayclaude
andauthored
fix(#667): circuit breaker — mark task BLOCKED after N consecutive silent recoveries (#707)
* chore: gitignore personal kaia/council skills; untrack kaia SKILL.md * fix(#667): circuit breaker — BLOCK task after N consecutive silent recoveries Fix 3a from issue #667 (the board-policy half; the spawn-backoff half 3b is intentionally NOT built — the spawn controller is deleted by the session-model migration, epic #706). A "silent" recovery is a lease recovery where the agent never reported progress (renewal_count == 0, the `updates=0` signature of the snake_game runaway: 81 registrations over 3+ hours). After max_silent_recoveries (default 3) consecutive silent recoveries, recover_expired_lease now marks the task BLOCKED instead of returning it to TODO: BLOCKED tasks are never offered by request_next_task, so the reclaim/re-assign loop physically cannot continue — regardless of who supplies agents (Invariant #1: the guard lives in Marcus, not the spawner). - A recovery WITH progress resets the streak (slow-but-alive is not the silent-failure pattern — the #703 lesson at board level) - BLOCKED path performs the same coordination cleanup as normal recovery (lease, persistence, server callback) — no #485-class leaks - Diagnostic kanban comment + task_blocked_circuit_breaker history event; human resets to TODO to retry (streak starts fresh) 8 new tests; full lease module 74/74; mypy + pre-commit clean. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(#667): persist BLOCKED via move_task_to_column for external providers Codex P2 on PR #707: GitHub- and Linear-backed boards don't persist status through update_task (GitHub only opens/closes the issue; Linear ignores status) — their blocked-state mechanics live in move_task_to_column. The breaker now also calls move_task_to_column(task_id, 'blocked') (GitHub 'blocked' label / Linear 'Blocked' state / SQLite direct status match) so a project refresh can't resurrect the task as TODO and resume the loop. +2 tests: move called with 'blocked' on trip; client lacking the method degrades gracefully (update_task path still lands). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 7d5232a commit eb3d604

4 files changed

Lines changed: 434 additions & 237 deletions

File tree

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,7 @@ package-lock.json
5757
# can leak into the repo root; ignore at root to prevent accidental commits.
5858
AGENTS.md
5959
experiment_complete.json
60+
61+
# Personal advisory tooling — keep out of the public Marcus repo
62+
skills/kaia/
63+
skills/council/

skills/kaia/SKILL.md

Lines changed: 0 additions & 237 deletions
This file was deleted.

0 commit comments

Comments
 (0)