- Spawn calls: runner owns all runtime_adapter.spawn() calls; tiers write
status=pending briefs to blackboard, runner's spawn loop acts on them.
Gate logic lives in the spawn loop — no gate plumbing needed in agents.
- Gate approval UX: Signal reply via Hans + direct CLI both supported.
Both write gate_approved to blackboard; runner doesn't care which path.
Hans uses pending_gates.json for multi-run disambiguation.
- T3 mesh timeout: escalate to T2 (domain boundary problem). If T2 also
exhausts retry budget, normal escalation ladder handles it. No force-commit.
Add pending_gates.json to directory structure and buildspec.
Update runner step in build order with full spawn loop responsibilities.