None of this stops a bad change — that is the list above. This is what makes a bad run legible afterwards, which is a different job and worth not confusing with the first.
Per-run attribution
one session per run
Every gateway call carries the run id, the agent and the role, so a council run is one tracing session rather than anonymous traffic indistinguishable from the chat UI's.
Run scoring
five judgements
Panel completeness, unsupported claims, deadlock, the operator's decision, and whether the moderator followed its format first time. All were already computed and then discarded; now they can be compared across runs.
Failure tracing
errors, not just successes
The gateway used to report only calls that worked. On a router with fallback chains the failures are the interesting part — a rate limit that triggered a fallback, a key missing a model from its scope.
Regression dataset
verified ground truth
Real review requests whose correct answer was confirmed afterwards by running the command, not by agreeing with a model. Each carries the trap the panel actually fell into.
Review interface
history, side by side
A local web dashboard behind single sign-on showing every run, and each agent's round 1 next to its round 2. The panel's value is the correction between them, which a scrolling transcript hides. It reads persisted state, records an approval, and can spend one — it holds no credential and never invokes an agent itself; a separate unreachable worker does that.
Operational overview
across runs, not one run
Where runs stop, how each agent replied, plan usage per run, and average time per stage. Colour on that page means severity and nothing else — it is read like a log console, so red has to be worth looking at.
Activity feed
merged from three sources
The event log carries only stage transitions. Agent replies and approvals live in their own tables, so a feed built from the event log alone would have shown a quiet lab on a busy day. All three are merged into one severity-coloured stream.
Approvals ledger
everything that touched the lab
Every approval with its scope, actions, plan hash and who recorded it, and every declared execution intent with whether it settled. An intent that never settled means a change may be half-applied, and that is visible without opening the run.
Homepage export
counts only
Separately from the dashboard, run counts go to a file served on an internal listener for the lab's front page. Ids, statuses and totals — never request text, replies or plans.