The decisive symptomUnrelated Session and RPC operations stall during the first grant, then recover together.

One synchronous path.

01workspace-writefirst canonical path
02grant.add(root, true)standing inheritable ACE
03NTFS walks descendantsevent loop cannot serve RPC
04command startsrunner argv finally returns

Route the apparent freeze.

all RPC stallsHost request pathCheck first workspace ACL materialization.
only model is slowProvider pathMeasure first-token latency instead.
stderr has denialRunner already startedDiagnose sandbox policy or target.
Minimal Bash errorPTY platform mismatchUse the focused Minimal preset guide.

First use and reuse are different contracts.

First path useApply inheritable ACEcost ∝ descendant tree
Same path laterExact ACE existsskip native re-apply
Moved workspaceNew canonical identitymay pay first use again

Reduce both cost and authority.

1Probe a small disposable treeProve the signature without a monorepo.
2Use a task-specific checkoutFewer descendants, narrower write surface.
3Measure one bounded attemptDo not launch concurrent retries.
Async is a state-machine change

A helper process keeps the event loop free, but the Agent needs explicit preparing, ready, and failed states. No child may run before the grant is confirmed.

Ten repair invariants.

  1. Event loop responds.
  2. No early child starts.
  3. One in-flight grant per path.
  4. Failures stay closed.
  5. Ready state is explicit.
  6. Moved path gets new SID.
  7. Shutdown observes helper.
  8. Agent gets bounded retry.
  9. Temp grants stay revocable.
  10. Windows test measures latency.