← Về thư mục
📄 / / root / ceo-project / academic-research-skills / shared / benchmark_report_pattern.md

Benchmark Report Pattern (v3.3.5+)

Status: v3.3.5 — hub doc for benchmark disclosure schema
Schema: shared/benchmark_report.schema.json
Validator: scripts/check_benchmark_report.py
Template: examples/benchmark_report_template.json


Why this exists

The Anthropic automated-w2s-researcher (2026) paper headlined a performance comparison: "2 researchers × 7 days (PGR=0.23) vs 9 agents × 5 days (PGR=0.97)."

Dramatic. Also: n=2, author-conducted, no independence, self-scored. Not a scientific comparison — a presentation artifact. The authors knew what the agent would produce before sitting down to do the human baseline; their "7 days" is implicitly benchmarked against their own foreknowledge. Unaware external researchers doing the same task cold would likely score higher. The gap may partly be a sandbagged human baseline.

ARS inherits this risk the moment a user publishes an "ARS beats manual" claim. This pattern defines a mandatory schema for anyone publishing an ARS benchmark comparison. Reports that don't satisfy the schema aren't "ARS benchmarks" — they're anecdotes.


The schema at a glance

Six required top-level fields in benchmark_report.schema.json:


Field-by-field rationale

human_baseline

This block exists because the human side of a comparison is where benchmark credibility lives or dies. A weak human baseline inflates an agent's apparent advantage.

ars_run

metrics.scoring_independence

Four enum values: authors-scored, third-party-scored, blind-scored, self-scored.

self-scored parses and exits 0, but the validator emits a warning to stderr. Self-scoring is the worst-case alignment failure: the same agents that produced the output are being asked whether the output is good. blind-scored (human raters without knowledge of which output came from ARS versus human baseline) is the minimum credible standard for any claim that will be shared publicly.

caveats

Non-empty array, items non-empty strings, minItems 1. The schema physically prevents an empty caveats field. A benchmark report with no caveats either has no known limitations (implausible for any real-world evaluation) or the author didn't think about limitations (which disqualifies the report more than any specific limitation would).

The caveats field is where sample size warnings, scorer bias, task-selection bias, and tool-access asymmetries should land when they don't rise to schema errors. It is the honest disclosure box.


How to use

  1. Copy examples/benchmark_report_template.json to your benchmark directory.
  2. Fill every FILL IN: field with real values.
  3. Set human_baseline.sample_size to the actual number (schema rejects 0).
  4. Run: python scripts/check_benchmark_report.py your-report.json
  5. Fix all ERROR: lines (schema violations, exit 1).
  6. Read the WARNING: lines (stderr, exit 0). Either address them in your methodology or document them explicitly in the caveats array.
  7. Publish the JSON file in your repository alongside the benchmark write-up. The machine-readable format lets future scripts cross-check version-specific claims.

What this pattern is NOT


Honesty red lines

These are behaviors the schema is specifically designed to make visible. They are not prohibited — the schema accepts all of them — but they will appear in validator output or be apparent to any reader of the JSON.


Future evolution

Per-skill benchmark templates (a deep-research-specific template, an academic-paper-reviewer-specific template) are likely as v3.4 adds domain-specific evaluation protocols. The cost_usd field may split into cost_usd_api and cost_usd_compute once cloud execution costs become a factor. The data_access_level_declared enum may expand to match the v3.4 ground-truth tier vocabulary if that spec evolves. None of these changes will break existing v3.3.5 reports, which remain valid against the version they declared in ars_version.