d6ee10f02843e2267c859b03d17db00995941e64
F18. A single last_error slot destroyed causal evidence twice. Run 7 kept only the last of four failures. In run 11 a five-second retry loop on a dead task pinned the slot for twenty-six minutes, so the live task's own expiry was never visible at all, and run 12 lost diagnosis time to the same thing before F58 removed the flood. WorkerHealth now carries up to sixteen distinct observations, each with its repeat count and first/last times. Collapsing is by message rather than by position, because a loop interleaved with other failures would otherwise still flush the ring. Eviction drops the least recently seen. last_error and error_at keep their wire names and still report only the newest failure, so nothing reading them has to change. The ring lives in memory beside last_error and is not persisted, which is the behaviour last_error already had across a restart. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CVbaKucEYBjMqVeUgJUsc1
Description
No description provided