Phase 2B of the Gaia evidence verification pipeline. Verifies benchmark-result rows and benchmark-source candidates against registry/benchmark-sources.json before adversarial audit, link validation, catalog promotion, or ingestion. Use when running /ev-pipeline, checking benchmark-result evidence, reviewing benchmark-source candidates, or preparing benchmark rows for /gaia-ingest-batch.
Install
npx skillscat add gaia-research/gaia-skill-tree/ev-benchmark-verification Install via the SkillsCat registry.
Benchmark-Source Verification (ev-benchmark-verification)
Phase 2B runs after /ev-star-verification and before /ev-adversarial-audit. It is benchmark-only and read-only: it classifies existing benchmark-result registry rows and optional benchmark-source candidate manifests without mutating the registry, the catalog, or the evidence lake.
Policy
registry/benchmark-sources.json is the benchmark allow/blacklist surface. Current lanes collapse to three values:
verified— CI-reproduced or verifier-attested benchmark evidence; Trust Magnitude lane multiplier2.0x.reported— public claim or mirrored leaderboard evidence accepted by the human gate; Trust Magnitude lane multiplier1.0x.rejected— blacklisted, disputed, pending, retired, candidate, unknown, or otherwise not approved; Trust Magnitude multiplier0x.
Legacy aliases are accepted during migration: ci-reproduced and verifier-attested normalize to verified; mirrored normalizes to reported; pending, unknown, retired, and candidate normalize to rejected/no scoring. A catalog entry with status: rejected is the blacklist and always scores zero.
Reported rows do not need runAt, datasetHash, or benchmarkInputHash. Verified rows still need reproducibility fields. appliesToGenericSkillRefs records which generic skill IDs a benchmark applies to; it does not create a named-skill score by itself.
Command
PYTHONPATH=src python evidence/scripts/verify_benchmark_sources.py \
--catalog registry/benchmark-sources.json \
--registry-root . \
--check \
--report /tmp/ev-phase2b-benchmark-report.mdWith candidate sources discovered during Phase 0 or issue review:
PYTHONPATH=src python evidence/scripts/verify_benchmark_sources.py \
--catalog registry/benchmark-sources.json \
--registry-root . \
--candidate-manifest /tmp/benchmark-candidates.jsonl \
--check \
--report /tmp/ev-phase2b-benchmark-report.mdCandidate manifest entries may be JSON or JSONL objects with fields such as:
{
"target": "firecrawl/firecrawl-research-index",
"source": "https://www.firecrawl.dev/blog/research-index-launch",
"benchmarkId": "alphaxiv-arxivqa@v1.0",
"status": "candidate",
"missing": [],
"notes": "Candidate becomes reported only after the human gate approves it."
}Firecrawl Research Index / alphaXiv ArXivQA is the model case: a public reported benchmark can count at 1.0x after the human gate, but a candidate report alone is not permission to ingest.
Human gate
Machines classify. Humans approve or reject.
After Phase 2B benchmark-source verification, Phase 3 adversarial audit, and Phase 4 link validation, stop before benchmark catalog promotion or /gaia-ingest-batch. A human reviewer must approve reported benchmark evidence or mark it rejected/blacklisted. Do not treat a green Phase 2B report as permission to ingest.
Output
The report summarizes:
scoring-eligiblerows that may count toward Trust Magnitude.reported,rejected-row,candidate-only,blocked, andunknown-benchmarkrows that need human review or score zero.- rejected/retired usage and scoring-lane misuse as hard blockers.
- missing verified-lane reproducibility fields and malformed percentiles as findings.
Candidate-only manifest entries are never hard blockers by themselves; they are backlog items for human review.