Audit: schema ↔ runtime drift (benchmark & campaign artifacts)¶
Date: 2026-04-18 (updated 2026-04-18 — expanded drift sweep)
Method: Deterministic validation only — load_artifact_file / parse_artifact for registered kinds against JSON Schema + Pydantic (src/agent_llm_wiki_matrix/artifacts.py).
Scope¶
| Area | JSON Schema | Notes |
|---|---|---|
| Benchmark run index | schemas/v1/manifest.schema.json |
runtime_summary (benchmarkRunTimingSummary), retry_summary (benchmarkRetrySummary), cells[].runtime (benchmarkCellRuntime), comparison_fingerprints (six axes including prompt_registry_state) |
| Campaign index | schemas/v1/benchmark_campaign_manifest.schema.json |
generated_report_paths (includes campaign_semantic_summary_*, comparative report paths), aggregated_runtime |
| Campaign semantic rollup | schemas/v1/campaign_semantic_summary.schema.json |
Written when campaigns complete; deterministic-only runs may show zero semantic cells |
| Campaign result pack | schemas/v1/campaign_result_pack.schema.json |
examples/campaign_result_packs/** |
| Browser evidence | schemas/v1/browser_evidence.schema.json |
Optional dom_excerpts, screenshots, extensions |
| Cell I/O | benchmark_request, benchmark_response, evaluation, evaluation_judge_provenance |
Committed under benchmark/campaign run trees |
| Reports & matrices | report, matrix, matrix_grid_inputs, matrix_pairwise_inputs |
reports/report.json, matrices/*.json under run outputs |
| Rubrics | rubric |
examples/dataset/rubrics/*.json |
Full filename → kind inventory and explicit non-goals: schema-drift-contracts-inventory.md.
Evidence¶
- Repository trees:
tests/test_schema_drift_contracts.pysweepsexamples/andfixtures/for the filenames in the inventory (including emitted campaign outputs underexamples/campaign_runs/andexamples/campaign_result_packs/). - Local build outputs: Ephemeral directories such as
out/(e.g. Composebenchmark-offline) may contain oldermanifest.jsonfiles (e.g. five-axiscomparison_fingerprints). Those are not committed; re-run the benchmark or deleteout/to regenerate. Do not treat uncommitted trees as contract sources. - Focused regression tests: Example campaign member manifest parses
runtime_summary,retry_summary, andcells[].runtime; campaign root manifest parsesgenerated_report_pathsandcampaign-semantic-summary.json.
Conclusion¶
Committed examples/ and fixtures/ stay aligned with current schemas; CI fails on drift. Use just validate-artifacts for a fast, contract-only run.
Verification commands¶
just validate-artifacts
uv run pytest tests/test_schema_drift_contracts.py -v
Full pipeline:
uv run just ci