Two guards that guessed

Both refused to say "I don't know". One deleted live state on a timer; the other blocked a safe command as an attack.

#3385 — mtime is not liveness

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.

SituationOldNew
owner alive, idle 99hdeletedkept (session-live)
registry unreadabledeletedkept (liveness-unknown)
owner dead, idle 48hdeleteddeleted (past-window)
window4h, inside a working day24h, backstop only

#3384 — a brace group is not brace expansion

Bash settles it. Whitespace after { is required for a group and forbidden for expansion, so it is an exact discriminator the check ignored.

Verified, not asserted

CheckResult
new tests, with the fix11 passed
same tests, origin/main source4 failed / 7 passed
restoresbyte-identical
typecheck / biome / security0 / 0 errors / 19 of 19
build twiceidempotent
context-gate.test.ts6 failed — identical on clean main, not ours

Audit your own guards

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.