Repository navigation
feat(agents): model-regression harness, spike-X cases and the first baseline - #12116
Merged
Merged
Conversation
agents/evals/matrix.py runs eval cases through the real /v1 flow in process (httpx ASGITransport against agents.main:app, the same plugins, run queue, judge, pipeline and gates) with the models the flags name and the render backend --renderer names (remote, local, fake). Per run it records status, attempts, gate failures by gate, validator rejections, edit-apply failures, the reviewer verdict, LLM calls, tokens by kind, model_version, list-price cost and latencies; writes a JSON report, a Markdown summary and a blind review gallery (30 sampled renders, accept/reject pairs, JSON export); diffs against the pinned model's baseline and exits 1 on a pass-rate regression, 3 when --budget-usd stops it. agents/evals/make_fixtures.py writes 120 seeded synthetic cases: 10 specs of 10 plot families (each clean or coupled in matplotlib and seaborn) times six datasets (renamed, x10, n12, n5000, date, decimal-comma). The two hand-written cases stay and join the 12-case smoke set. The pipeline, the Budget plugin and the judges now write content-free attribution fields (gate ids, validator rule ids, adapter outcomes, the reviewer's defect ids, token counts by kind, judge input and output tokens) that the harness reads per request id. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GdMSqLR5ww4ji74EUSmk9M
- Preflight render of each library's catalogue file before the first case (exit 2 when the renderer cannot render); a pipeline that ended in RendererUnavailable, or three errors in a row, stop the run as an outage (exit 4). pipeline_result now carries the exception class of an error. - --gcloud-token mints the renderer ID token with the gcloud CLI and renews it before its one-hour expiry; remote and local renders run as ENVIRONMENT=development outside Cloud Run. - The baseline diff compares the cases both reports hold; harness errors count as failures and exit 1; --save-baseline refuses runs with errors. - The budget stops before a case that could pass it. - The gallery samples passed renders only; `report blind` merges two runs into one blind gallery and `report score` gives acceptance per run. - agents/evals/eligibility.py: the model-free catalogue eligibility sweep. - .dockerignore excludes agents/evals; docs, README and fragment updated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GdMSqLR5ww4ji74EUSmk9M
122 cases on 2026-10-10 through the throwaway renderer: 102 passed the gates (83.6 %), 14 ok, 98 needs_attention, 10 failed (validation), $0.52 at list price, end to end p50 18.5 s. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GdMSqLR5ww4ji74EUSmk9M
… fragment Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GdMSqLR5ww4ji74EUSmk9M
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GdMSqLR5ww4ji74EUSmk9M
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
Service failures and missing render artifacts can evade outage detection and contaminate regression baselines.
7 open findings
Dataset judge server errors are misclassified as refusals · New Missing plot artifacts remain marked as successful · New Error statuses are misclassified as successful completions · New Agent guide incorrectly marks Claude baseline as unbuilt · New README incorrectly describes Claude baseline as uncommitted · New Status paragraph incorrectly lists Claude baseline as unbuilt · New Module docstring still describes the baseline as absent · New
What changed in this PR
Adds a production-path model-regression harness for evaluating agent models, prompts, rendering quality, reliability, latency, and cost.
Changes:
- Adds matrix execution, reporting, galleries, pricing, eligibility scanning, and a committed Claude baseline.
- Adds 120 reproducible spike-X fixture cases and comprehensive tests.
- Adds content-free runtime attribution and excludes evaluation data from service images.
| File | Description |
|---|---|
.dockerignore |
Excludes evaluation assets from images. |
.gitignore |
Ignores local evaluation outputs. |
agents/README.md |
Documents harness operation and spike X. |
agents/anyplot/models.py |
Reports judge token splits. |
agents/anyplot/pipeline.py |
Emits pipeline attribution. |
agents/anyplot/plugins/budget.py |
Emits token-kind attribution. |
agents/anyplot/plugins/ledger.py |
Defines attribution token fields. |
agents/anyplot/plugins/scope_guard.py |
Reports judge token splits. |
agents/anyplot/render/gates.py |
Records failed gate identifiers. |
agents/evals/baselines/README.md |
Documents baseline management. |
agents/evals/baselines/claude-haiku-5-5.json |
Adds the initial Claude baseline. |
agents/evals/cases.py |
Loads and selects evaluation cases. |
agents/evals/eligibility.py |
Adds catalogue eligibility scanning. |
agents/evals/fixtures/README.md |
Documents fixture format and provenance. |
agents/evals/fixtures/cases/area-basic-matplotlib-date/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/area-basic-matplotlib-date/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/area-basic-matplotlib-decimal-comma/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/area-basic-matplotlib-decimal-comma/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/area-basic-matplotlib-n12/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/area-basic-matplotlib-n12/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/area-basic-matplotlib-n5000/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/area-basic-matplotlib-n5000/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/area-basic-matplotlib-renamed/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/area-basic-matplotlib-renamed/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/area-basic-matplotlib-x10/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/area-basic-matplotlib-x10/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/area-basic-seaborn-date/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/area-basic-seaborn-date/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/area-basic-seaborn-decimal-comma/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/area-basic-seaborn-decimal-comma/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/area-basic-seaborn-n12/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/area-basic-seaborn-n12/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/area-basic-seaborn-n5000/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/area-basic-seaborn-n5000/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/area-basic-seaborn-renamed/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/area-basic-seaborn-renamed/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/area-basic-seaborn-x10/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/area-basic-seaborn-x10/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/bar-grouped-matplotlib-date/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/bar-grouped-matplotlib-date/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/bar-grouped-matplotlib-decimal-comma/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/bar-grouped-matplotlib-decimal-comma/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/bar-grouped-matplotlib-n12/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/bar-grouped-matplotlib-n12/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/bar-grouped-matplotlib-n5000/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/bar-grouped-matplotlib-n5000/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/bar-grouped-matplotlib-renamed/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/bar-grouped-matplotlib-renamed/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/bar-grouped-matplotlib-x10/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/bar-grouped-matplotlib-x10/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/bar-grouped-seaborn-date/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/bar-grouped-seaborn-date/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/bar-grouped-seaborn-decimal-comma/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/bar-grouped-seaborn-decimal-comma/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/bar-grouped-seaborn-n12/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/bar-grouped-seaborn-n12/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/bar-grouped-seaborn-n5000/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/bar-grouped-seaborn-n5000/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/bar-grouped-seaborn-renamed/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/bar-grouped-seaborn-renamed/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/bar-grouped-seaborn-x10/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/bar-grouped-seaborn-x10/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/bar-grouped-seaborn/case.json |
Updates the handwritten smoke case. |
agents/evals/fixtures/cases/box-basic-matplotlib-date/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/box-basic-matplotlib-date/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/box-basic-matplotlib-decimal-comma/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/box-basic-matplotlib-decimal-comma/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/box-basic-matplotlib-n12/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/box-basic-matplotlib-n12/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/box-basic-matplotlib-n5000/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/box-basic-matplotlib-n5000/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/box-basic-matplotlib-renamed/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/box-basic-matplotlib-renamed/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/box-basic-matplotlib-x10/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/box-basic-matplotlib-x10/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/box-basic-seaborn-date/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/box-basic-seaborn-date/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/box-basic-seaborn-decimal-comma/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/box-basic-seaborn-decimal-comma/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/box-basic-seaborn-n12/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/box-basic-seaborn-n12/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/box-basic-seaborn-n5000/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/box-basic-seaborn-n5000/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/box-basic-seaborn-renamed/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/box-basic-seaborn-renamed/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/box-basic-seaborn-x10/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/box-basic-seaborn-x10/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/heatmap-basic-matplotlib-date/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/heatmap-basic-matplotlib-date/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/heatmap-basic-matplotlib-decimal-comma/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/heatmap-basic-matplotlib-decimal-comma/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/heatmap-basic-matplotlib-n12/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/heatmap-basic-matplotlib-n12/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/heatmap-basic-matplotlib-n5000/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/heatmap-basic-matplotlib-n5000/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/heatmap-basic-matplotlib-renamed/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/heatmap-basic-matplotlib-renamed/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/heatmap-basic-matplotlib-x10/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/heatmap-basic-matplotlib-x10/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/heatmap-basic-seaborn-date/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/heatmap-basic-seaborn-date/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/heatmap-basic-seaborn-decimal-comma/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/heatmap-basic-seaborn-decimal-comma/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/heatmap-basic-seaborn-n12/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/heatmap-basic-seaborn-n12/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/heatmap-basic-seaborn-n5000/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/heatmap-basic-seaborn-n5000/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/heatmap-basic-seaborn-renamed/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/heatmap-basic-seaborn-renamed/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/heatmap-basic-seaborn-x10/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/heatmap-basic-seaborn-x10/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/histogram-basic-matplotlib-date/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/histogram-basic-matplotlib-date/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/histogram-basic-matplotlib-decimal-comma/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/histogram-basic-matplotlib-decimal-comma/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/histogram-basic-matplotlib-n12/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/histogram-basic-matplotlib-n12/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/histogram-basic-matplotlib-n5000/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/histogram-basic-matplotlib-n5000/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/histogram-basic-matplotlib-renamed/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/histogram-basic-matplotlib-renamed/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/histogram-basic-matplotlib-x10/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/histogram-basic-matplotlib-x10/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/histogram-basic-seaborn-date/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/histogram-basic-seaborn-date/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/histogram-basic-seaborn-decimal-comma/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/histogram-basic-seaborn-decimal-comma/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/histogram-basic-seaborn-n12/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/histogram-basic-seaborn-n12/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/histogram-basic-seaborn-n5000/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/histogram-basic-seaborn-n5000/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/histogram-basic-seaborn-renamed/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/histogram-basic-seaborn-renamed/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/histogram-basic-seaborn-x10/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/histogram-basic-seaborn-x10/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/line-basic-matplotlib-date/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/line-basic-matplotlib-date/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/line-basic-matplotlib-decimal-comma/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/line-basic-matplotlib-decimal-comma/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/line-basic-matplotlib-n12/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/line-basic-matplotlib-n12/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/line-basic-matplotlib-n5000/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/line-basic-matplotlib-n5000/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/line-basic-matplotlib-renamed/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/line-basic-matplotlib-renamed/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/line-basic-matplotlib-x10/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/line-basic-matplotlib-x10/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/line-basic-seaborn-date/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/line-basic-seaborn-date/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/line-basic-seaborn-decimal-comma/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/line-basic-seaborn-decimal-comma/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/line-basic-seaborn-n12/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/line-basic-seaborn-n12/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/line-basic-seaborn-n5000/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/line-basic-seaborn-n5000/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/line-basic-seaborn-renamed/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/line-basic-seaborn-renamed/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/line-basic-seaborn-x10/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/line-basic-seaborn-x10/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/line-timeseries-matplotlib-date/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/line-timeseries-matplotlib-date/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/line-timeseries-matplotlib-decimal-comma/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/line-timeseries-matplotlib-decimal-comma/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/line-timeseries-matplotlib-n12/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/line-timeseries-matplotlib-n12/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/line-timeseries-matplotlib-n5000/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/line-timeseries-matplotlib-n5000/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/line-timeseries-matplotlib-renamed/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/line-timeseries-matplotlib-renamed/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/line-timeseries-matplotlib-x10/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/line-timeseries-matplotlib-x10/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/line-timeseries-seaborn-date/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/line-timeseries-seaborn-date/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/line-timeseries-seaborn-decimal-comma/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/line-timeseries-seaborn-decimal-comma/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/line-timeseries-seaborn-n12/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/line-timeseries-seaborn-n12/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/line-timeseries-seaborn-n5000/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/line-timeseries-seaborn-n5000/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/line-timeseries-seaborn-renamed/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/line-timeseries-seaborn-renamed/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/line-timeseries-seaborn-x10/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/line-timeseries-seaborn-x10/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/pie-basic-matplotlib-date/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/pie-basic-matplotlib-date/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/pie-basic-matplotlib-decimal-comma/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/pie-basic-matplotlib-decimal-comma/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/pie-basic-matplotlib-n12/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/pie-basic-matplotlib-n12/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/pie-basic-matplotlib-n5000/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/pie-basic-matplotlib-n5000/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/pie-basic-matplotlib-renamed/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/pie-basic-matplotlib-renamed/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/pie-basic-matplotlib-x10/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/pie-basic-matplotlib-x10/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/pie-basic-seaborn-date/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/pie-basic-seaborn-date/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/pie-basic-seaborn-decimal-comma/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/pie-basic-seaborn-decimal-comma/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/pie-basic-seaborn-n12/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/pie-basic-seaborn-n12/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/pie-basic-seaborn-n5000/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/pie-basic-seaborn-n5000/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/pie-basic-seaborn-renamed/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/pie-basic-seaborn-renamed/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/pie-basic-seaborn-x10/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/pie-basic-seaborn-x10/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/scatter-basic-matplotlib-date/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/scatter-basic-matplotlib-date/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/scatter-basic-matplotlib-decimal-comma/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/scatter-basic-matplotlib-decimal-comma/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/scatter-basic-matplotlib-n12/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/scatter-basic-matplotlib-n12/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/scatter-basic-matplotlib-n5000/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/scatter-basic-matplotlib-n5000/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/scatter-basic-matplotlib-renamed/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/scatter-basic-matplotlib-renamed/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/scatter-basic-matplotlib-x10/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/scatter-basic-matplotlib-x10/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/scatter-basic-matplotlib/case.json |
Updates the handwritten smoke case. |
agents/evals/fixtures/cases/scatter-basic-seaborn-date/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/scatter-basic-seaborn-date/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/scatter-basic-seaborn-decimal-comma/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/scatter-basic-seaborn-decimal-comma/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/scatter-basic-seaborn-n12/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/scatter-basic-seaborn-n12/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/scatter-basic-seaborn-n5000/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/scatter-basic-seaborn-n5000/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/scatter-basic-seaborn-renamed/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/scatter-basic-seaborn-renamed/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/scatter-basic-seaborn-x10/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/scatter-basic-seaborn-x10/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/violin-basic-matplotlib-date/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/violin-basic-matplotlib-date/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/violin-basic-matplotlib-decimal-comma/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/violin-basic-matplotlib-decimal-comma/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/violin-basic-matplotlib-n12/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/violin-basic-matplotlib-n12/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/violin-basic-matplotlib-n5000/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/violin-basic-matplotlib-n5000/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/violin-basic-matplotlib-renamed/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/violin-basic-matplotlib-renamed/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/violin-basic-matplotlib-x10/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/violin-basic-matplotlib-x10/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/violin-basic-seaborn-date/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/violin-basic-seaborn-date/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/violin-basic-seaborn-decimal-comma/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/violin-basic-seaborn-decimal-comma/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/violin-basic-seaborn-n12/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/violin-basic-seaborn-n12/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/violin-basic-seaborn-n5000/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/violin-basic-seaborn-n5000/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/violin-basic-seaborn-renamed/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/violin-basic-seaborn-renamed/data.csv |
Synthetic fixture data. |
agents/evals/fixtures/cases/violin-basic-seaborn-x10/case.json |
Eval case metadata. |
agents/evals/fixtures/cases/violin-basic-seaborn-x10/data.csv |
Synthetic fixture data. |
agents/evals/make_fixtures.py |
Generates deterministic spike-X cases. |
agents/evals/matrix.py |
Implements matrix execution and baselines. |
agents/evals/pricing.py |
Calculates model costs. |
agents/evals/report.py |
Builds summaries, diffs, and galleries. |
agents/main.py |
Adds dataset-judge attribution. |
changelog.d/agents-evals.md |
Records the feature changes. |
docs/concepts/agent-network.md |
Updates the agent design status. |
docs/reference/repository.md |
Documents the evaluation directory. |
tests/unit/agents/evals/__init__.py |
Adds the eval test package. |
tests/unit/agents/evals/conftest.py |
Shares runtime fixtures and HTML checks. |
tests/unit/agents/evals/test_baselines.py |
Tests committed baseline integrity. |
tests/unit/agents/evals/test_cases.py |
Tests case loading and selection. |
tests/unit/agents/evals/test_eligibility.py |
Tests eligibility reporting. |
tests/unit/agents/evals/test_make_fixtures.py |
Tests deterministic fixture generation. |
tests/unit/agents/evals/test_matrix.py |
Tests harness execution and safeguards. |
tests/unit/agents/evals/test_report.py |
Tests reports, diffs, and galleries. |
tests/unit/agents/runtime/test_models.py |
Tests judge token splits. |
tests/unit/agents/runtime/test_render.py |
Tests failed-gate attribution. |
🧠 Review effort: Balanced
💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
… as the case's outcome Copilot's findings on #12116: - A dataset or bindings answer other than a refusal on the merits (403, 409, 413, 422) is the service's error: the judge's 503 guard_unavailable now ends the run with status error, so an outage trips the three-errors stop and keeps the run out of a baseline. - A shipped plot without its PNG, or one whose artifact cannot be fetched, is an error (reason no_png) rather than a pass the galleries cannot show. - is_error also counts status error (a session that could not open, a turn refused with capacity, no result), an error event that came with a plot, and a recorded pipeline error. - The README, the baselines README, the design doc's status line and the baseline test describe the committed Claude Haiku 5.5 baseline; the test no longer skips. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GdMSqLR5ww4ji74EUSmk9M
# Conflicts: # agents/README.md # docs/concepts/agent-network.md # docs/reference/repository.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


Summary
agents/evals/matrix.py): every selected eval case runs through the real/v1flow in process (same plugins, run queue, judge, pipeline and gates as a user's request) with the models the flags name and the render backend of--renderer(remote,local,fake); per case it records status, attempts, gate failures, validator rejections, edit-apply failures, the reviewer's verdict, LLM calls, tokens by kind,model_version, cost at list price and latencies, writes a JSON report and a Markdown summary, diffs against the pinned model's baseline over the shared cases, and exits non-zero on a regression. A preflight render, an outage stop,--gcloud-tokenrenewal,--budget-usdand a 30-render review page with Accept/Reject export make one command answer spike X and every later model or prompt comparison;report blindmerges two arms into one unnamed gallery andreport scorereads the judgements back.DD.MM.YYYYand ISO dates, semicolon text with decimal commas) from the seededmake_fixtures.py, which a test keeps in sync with the committed files; plusagents/evals/eligibility.py, a model-free sweep that classifies every matplotlib and seaborn file of the catalogue; plus the first committed baseline,agents/evals/baselines/claude-haiku-5-5.json, from the spike-X run below..dockerignorekeepsagents/evals/out of every image.Spike X, Claude Haiku 5.5 arm (2026-10-10)
Run from a scratch merge of this branch with #12115 against the throwaway renderer of #12115,
--provider anthropic-vertex --location eu --cases full --renderer remote --gcloud-token --budget-usd 4 --no-baseline --save-baseline. The baseline in this PR is this run.ok14 (11.5 %),needs_attention98,failed10 (allvalidation)By spec:
line-basicandline-timeseries100 %,scatter-basic92 %,area-basicandhistogram-basic92 %,box-basic50 % (5 of 6 matplotlib runs end invalidation: the adapter replaces thedf = load_user_data()placeholder, ruleplaceholder-count),pie-basic58 %. By perturbation: 12 rows weakest at 70 %, values times 10 best at 95 %. matplotlib 78.7 %, seaborn 88.5 %.What keeps a passed run at
needs_attentioninstead ofok, in order: the probe gate G3 (text beyond the canvas) fails in 60 runs and reports in 56 more, and the reviewer's AR-09 lines agree in most of them; the reviewer's answer could not be read in 18 runs; the adapter's answer missed its schema in 23 of 141 calls, each costing the repair round; the IMPRINT palette rule (VQ-07) stands in 11 residual lines. These are the first items for the prompt and validator work on the Claude arm, not for this PR. The exit criterion of phase 0 asks for at least 80 % passing after at most one repair (met) and the owner's acceptance of at least 75 % on the 30-render sample (open: the gallery is with the owner).Eligibility sweep (no model call, about 9 s): matplotlib 285 of 325 files eligible, seaborn 287 of 325; blocked by SECURITY findings 29 / 29, the map specs 13 / 13, a missing
THEMEblock 16 / 11, a savefig target other thanf"plot-{THEME}.png"16 / 11.Plan
Design:
docs/concepts/agent-network.md("Model-version regression harness", spike X in "Phase 0"). The 120-case matrix needs theremotebackend of #12115 to render on Cloud Run; the harness itself merges independently (its tests use scripted models and the fake renderer).Test plan
uv run ruff check . && ruff format --check .,mypy api core agents,pytest tests/unit tests/integration(7888 passed before the baseline; with it the baseline test runs:tests/unit/agents/evals81 passed), changelog check,uv lock --checkgallery.htmlof the run, 30 renders that passed the gates), judge each one, export the judgements; the acceptance rate is the phase-0 criterion (75 %)--provider gemini --budget-usd 18) and the blind two-arm gallery wait for the owner's go: about $10 to $15 at list price