Part of #3854.
Context
Each panel run fans out N voter calls; token usage is visible per call (adapter layer) and pricing per model is in the registry. Aggregate: decisionId → per-voter {model, tokens, cost} → decision total; persist alongside the existing vote/outcome records (record + measure; no routing change).
Acceptance criteria
Evidence required
Fixture tests + one live-run sample (BLOCKED note if no live adapter at the time).
Out of scope
weather_report/manifest surfacing (next child).
Part of #3854.
Context
Each panel run fans out N voter calls; token usage is visible per call (adapter layer) and pricing per model is in the registry. Aggregate: decisionId → per-voter {model, tokens, cost} → decision total; persist alongside the existing vote/outcome records (record + measure; no routing change).
Acceptance criteria
Evidence required
Fixture tests + one live-run sample (BLOCKED note if no live adapter at the time).
Out of scope
weather_report/manifest surfacing (next child).