Skip to content

Operating

Failure Modes

When a loop misbehaves, the single fastest diagnostic is a name. This catalog gives every operational failure its name, its tell in the instruments,…

When a loop misbehaves, the single fastest diagnostic is a name. This catalog gives every operational failure its name, its tell in the instruments, and its fix — sorted by the organ that broke.

How to use this page

Something feels off? Hunt down the symptom in the tables below. The failure's organ tells you where the fix belongs. (Design-time mistakes have a catalog of their own in anti-patterns.md; the specific ways a loop runs forever get a deep dive in infinite-loops.md; a failure that's already unfolding goes straight to the recovery playbook.)

Heartbeat failures

FailureThe tellThe fix
Doom loopsame item retried beat after beat; log shows effort, spine shows no progressper-item retry cap; no-progress stop; escalate after N attempts
Runaway heartbeatbeats far more frequent than designed (retrying webhook, overlapping crons)idempotent beats keyed on event id; dedupe; one scheduler per loop
Task didn't fireexpected log line missing; "it worked yesterday"session-scoped timer died with the session; promote to a real schedule
Didn't survive restartsilence after a reboot/deployschedules must live outside the machine's memory (cron file, CI, cloud routine)
Dropped events assumed queuedgaps during bursts, zero errorsreconciliation sweep (Step 7)

Spine failures

FailureThe tellThe fix
No spinerestart repeats finished workstate file read first, updated last, every beat
Uncommitted spinestate fine locally, gone when needed mostcommit every beat — this repo's Day 1 scar (Step 12)
Spine driftspine says done, world disagreesverify before ticking; reconcile spine vs. log weekly
Two writers, one fileinterleaved/clobbered stateone owner per file, enforced; second writer gets its own spine

Verification failures

FailureThe tellThe fix
Green ≠ donestatuses perfect, product brokenoutcome checks that drive the flow (verification)
Maker grading itself100% pass rates, zero findings everseparate checker; items_found>0, actions_taken:0 is health
Silent errorsbeats "succeed" fast and do nothingactionable errors; a beat that catches an exception must log it
Checker rubber-stampPASSes everything including planted defectsrubric rows; periodically plant a defect and confirm it's caught

Budget & attention failures

FailureThe tellThe fix
Runaway spendtokens far above estimate; no tripwire firedcaps + 80% line measured against the current cap (this repo's Day 1 gap)
Report fatiguereports unread for a week; then a surpriseshrink reports to 5 lines; alert only on silence and escalations
Zombie loopruns forever, influences nothingeconomics test (decision framework); retire it

Human-judgment failures

FailureThe tellThe fix
Cognitive surrender"the loop probably knows better" ends investigationsthe loop is never the authority on itself; instruments are
Comprehension debtnobody can explain a subsystem the fleet builtsmaller beats; spot-reads; pause expansion until understanding catches up
Intent debtoutput matches spec, misses the point repeatedlyfix the spec, not the output; constitution grows one hard-won line at a time
AI gravitycapabilities grew without a written decisionaudit body vs. loop.md; every expansion is a named human's decision
Same loop, opposite resultspattern worked in repo A, misfires in repo Bcontext differs; re-run the L1 proving period per deployment — trust doesn't transfer
Diagram

The rule underneath the whole page: incidents keep repeating until the organ is fixed. Patch the output and all you've done is reschedule the failure — which is exactly the argument of recovery playbook step 4.

Sources: the failure catalog is drawn from the cobusgreyling/loop-engineering reference repo (S7, MIT) and the essays of Addy Osmani's Loop Engineering (S5) and Sydney Runkle's The Art of Loop Engineering (S6). Full attribution: resources/sources.md.