Give EvalRun.summary a typed RunSummary value (unified RunError, lenient legacy parsing) so readers stop reaching into a schemaless dict, and route every cross-run rollup — dashboard, scenario ranking, trend, campaign report — through one aggregate_runs seam. Fixes the divergence where stats averaged pass_rate over completed-only runs while the campaign report counted faults as 0.0. Cross-run rule (ADR-0004): genuine faults count 0.0, user-cancelled runs are excluded from both denominators. |
||
|---|---|---|
| .. | ||
| __init__.py | ||
| test_auth_api.py | ||
| test_campaign_runner.py | ||
| test_campaign_scheduler_loop.py | ||
| test_campaigns_api.py | ||
| test_files_api.py | ||
| test_model_config_migration.py | ||
| test_model_configs_api.py | ||
| test_reports_api.py | ||
| test_runs_api.py | ||
| test_scenario_version_migration.py | ||
| test_scenarios_api.py | ||
| test_stats_api.py | ||