Add the analysis role's execution path: a two-phase orchestration
(per-scenario diagnosis gathered in parallel, then a synthesis pass)
that reads the existing campaign report aggregation plus capped failure
samples, validates the LLM's JSON against the report schema, and strips
fabricated run/scenario references before persisting. Results upsert one
row per campaign (generating/completed/failed) with the model config
snapshot; GET/POST /api/campaigns/{id}/analysis expose the state machine,
guarding non-terminal campaigns and missing analysis models with 400s.
|
||
|---|---|---|
| .. | ||
| rules | ||
| __init__.py | ||
| analysis.py | ||
| campaign_runner.py | ||
| campaign_scheduler.py | ||
| case_verdict.py | ||
| engine.py | ||
| implicit_rules.py | ||
| judgement.py | ||
| metrics.py | ||
| report_render.py | ||
| report.py | ||
| run_summary.py | ||