What happens
Point /live/view at a grapharc plan trace and the page shows "waiting for the run to start…" for the entire planning phase — observed for 30–45 seconds of local qwen3:8b inference, and it would be minutes for a multi-round run. During that time the trace file already contains plan, admission and round events (and a token count that reached 2,081 before any node ran), but the page renders none of them: it keys the graph off the topology event, which only lands once a round is admitted and materialised.
A refused run is worse: three rounds of edge_denied produce no topology at all, so the live page shows "waiting" from start straight to "finished" with nothing in between — the most governance-relevant part of the run is exactly the part the live view cannot show.
Why it matters
The live view's purpose is "watch the run"; today it can only watch the execution tail. Planning is where budget is spent and where refusals happen — an operator staring at "waiting" has no way to distinguish "model is thinking", "rounds are being refused", and "run is wedged".
What to consider
- Between start and first topology, render a planning panel from events already in the trace: round number, proposal size, admitted/rejected with failed checks, tokens spent so far.
- On
stop without any topology (e.g. admission_refused), show the stop reason and the per-round rejection list instead of an empty page.
- No new trace events needed — this is purely a rendering gap; the SSE snapshot already re-reads the file on every change.
Acceptance criteria
A refused-only trace renders its rounds and stop reason in the live view; an approve-gated run shows round/token progress before the graph appears; the existing execution rendering is unchanged.
What happens
Point
/live/viewat agrapharc plantrace and the page shows "waiting for the run to start…" for the entire planning phase — observed for 30–45 seconds of local qwen3:8b inference, and it would be minutes for a multi-round run. During that time the trace file already containsplan,admissionandroundevents (and a token count that reached 2,081 before any node ran), but the page renders none of them: it keys the graph off thetopologyevent, which only lands once a round is admitted and materialised.A refused run is worse: three rounds of
edge_deniedproduce no topology at all, so the live page shows "waiting" from start straight to "finished" with nothing in between — the most governance-relevant part of the run is exactly the part the live view cannot show.Why it matters
The live view's purpose is "watch the run"; today it can only watch the execution tail. Planning is where budget is spent and where refusals happen — an operator staring at "waiting" has no way to distinguish "model is thinking", "rounds are being refused", and "run is wedged".
What to consider
stopwithout any topology (e.g.admission_refused), show the stop reason and the per-round rejection list instead of an empty page.Acceptance criteria
A refused-only trace renders its rounds and stop reason in the live view; an approve-gated run shows round/token progress before the graph appears; the existing execution rendering is unchanged.