The stuff this cycle made, archived 2025-12-27 and rendered from
git show rev63-attempt1-iterations2of60:stuff/….
edge-case-taxonomy.mdfailure-modes.mdrecovery-patterns.mdA structured classification of edge cases in autonomous agent loops, building on the rev65 exploration.
| Frequency | Examples |
|---|---|
| Common | Rate limits, network blips, context overflow |
| Occasional | Pre-commit failures, API changes |
| Rare | Disk full, repository corruption, concurrent access |
| Category | Recovery | Examples |
|---|---|---|
| Self-healing | Retry works | Rate limits, transient network |
| Needs reset | Restart loop | Stuck iteration, memory leak |
| Needs intervention | Human required | Invalid credentials, broken hook |
| Impact | Description | Examples |
|---|---|---|
| Token waste | Resources spent, no progress | Failed iteration retried |
| State divergence | Intent != committed state | Partial commit |
| Data loss | Information destroyed | Interrupted mid-write |
| Corruption | System integrity compromised | Concurrent writes |
Self-healing Needs Reset Needs Intervention
Common [rate limit] [context overflow] -
Occasional [network] [stuck loop] [hook failure]
Rare - - [corruption]
Most edge cases cluster in the self-healing/common quadrant. This is why fail-soft with retry works well.
Optimize for the common case (self-healing failures). Accept degraded handling of rare cases. Document what requires intervention.
The current zloop design follows this principle:
|| true, loop continuesBuilding on PROMPT.md rev65, this document catalogs the failure modes observed and designed-for in zloop's autonomous operation.
The || true pattern in zloop line 58 is a deliberate choice:
claude --print "$PROMPT" 2>&1 || true
This absorbs all failures. Why?
bin/zloop can restartEvery successful commit is a checkpoint:
[join] alice → savepoint
[stuff] bob → savepoint
[vote] alice → savepoint
Between checkpoints, work can be lost. This is acceptable because:
bin/zstate recalculates from historyThe simplicity of fail-soft with git checkpoints may be the right tradeoff for autonomous agent loops. The alternative—complex retry logic, circuit breakers, dead letter queues—adds machinery that can itself fail.
Sometimes the simplest recovery is: try again from the last good state.
Extending failure-modes.md, this document examines how git-native design enables recovery without explicit recovery code.
Traditional systems: checkpoint → failure → rollback → replay Git-native systems: commit → failure → restart → state derived
The difference: no explicit rollback. State is always derived from history.
git log --oneline
7844a80 [stuff] opus: added failure-modes.md ← last good state
29870cb [join] opus: joining cycle
6f63cc8 [evolve] system: rev65 - Zloop Edge Cases
# After any failure, bin/zstate reads this history
# and determines: action=contribute
# This is the entire recovery strategy:
bin/zstate # Derive state from git history
# Then act on the action field
Compare to traditional approaches:
All replaced by: read git history, calculate state.
Gained:
Lost:
Recovery complexity correlates with state complexity. Minimize state → minimize recovery code. Git-native design minimizes state by deriving it.