SIGN IN SIGN UP

fix(daemon): replace PendingRoot placeholders with the trace-ingress fence

The family sequencer parked a PendingRoot placeholder at the start slot
of every still-running mutating command and refused to drain past it.
That duplicated what the trace-ingress fence already enforces (later
entries wait for older open mutating roots of their family) and gave the
daemon two sources of truth about a running command; it is also the
wall a later change will need to bound.

Remove the placeholder machinery, the Canceled variant, and the per-frame
JSON injections that only fed it. The fence takes over fully:

- the reader marks a mutating root finishing when it consumes its atexit
  and keeps the root's family, start time and mutating classification
  until the worker clears it, so the fence stays scoped to the right
  family while the final frame is queued; only the root's own frames
  classify it (a hook's child git cannot retarget or downgrade it);
- socket EOF no longer clears a finishing root (the queued atexit does),
  and the close-marker predicate now matches the fence, so any root that
  was fencing work is cleared by the worker, which re-drains what it
  fenced; a root that closes without an atexit still gets its marker;
- the worker clears a root when its final frame arrives, even when that
  frame fails to normalize, errors, or panics;
- until a root's worktree is known it fences every family, so resolving
  it re-drains the others.

Sequencer ordering itself is unchanged: entries stay keyed by command
start time, which among finished commands is the best predictor of the
order they changed refs (a command finishes only after its ref write,
including through post-write hooks).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
S
Sasha Varlamov committed
88f6f2f6ffc19eafba11e1eca5334f13de5e236c
Parent: 44cc85b