Both refused to say "I don't know". One deleted live state on a timer; the other blocked a safe command as an attack.
A session open five hours that had not recently touched its team directory scored as abandoned. The next session to start deleted it, and CC then failed every named-agent spawn.
before session-fresh session-old5h session-old9h after cleanup session-fresh DELETED DELETED
The fix gates on a liveness probe against the registry pid, and the gate is deliberately one-directional: it can only ADD keeps. The team-name to session mapping is CC's convention, not ours, so a wrong guess must never be able to justify an irreversible delete.
| Situation | Old | New |
|---|---|---|
| owner alive, idle 99h | deleted | kept (session-live) |
| registry unreadable | deleted | kept (liveness-unknown) |
| owner dead, idle 48h | deleted | deleted (past-window) |
| window | 4h, inside a working day | 24h, backstop only |
Bash settles it. Whitespace after { is required for a group and forbidden for expansion, so it is an exact discriminator the check ignored.
| Check | Result |
|---|---|
| new tests, with the fix | 11 passed |
| same tests, origin/main source | 4 failed / 7 passed |
| restores | byte-identical |
| typecheck / biome / security | 0 / 0 errors / 19 of 19 |
| build twice | idempotent |
| context-gate.test.ts | 6 failed — identical on clean main, not ours |
Find guards that treat "I could not observe X" as "X is false". For every predicate that triggers an irreversible action (delete, revoke, block, kill), answer three questions: 1. What does it measure, and what does it CLAIM that measurement proves? 2. What does it do when the measurement is unavailable - fail open or closed? 3. Is there a case where the thing is fine but unobservable? What happens then? Report as: guard | measured | claimed | behaviour when unknown | risk Flag any guard whose "unknown" path takes the destructive branch.