No unversioned data
Every run pins a content-addressed dataset. A missing or mismatched hash is an error, not a warning.
dataset_hash required
One evaluation contract · any predictor
ASSAY compares version-pinned model runs, measures uncertainty, names every changed sample, and gives CI a verdict it can defend.
Keyless replay · standard-library Python · deterministic fixture
specific regressions retained for review
BLOCKEDAggregate green is not evidence
Model changes are probabilistic, scorer definitions drift, and test datasets quietly mutate. A single score hides all three. Reviewers need the exact before/after specimens, the uncertainty around the change, and proof that both runs used the same measuring instrument.
What a useful harness refuses to do
Every run pins a content-addressed dataset. A missing or mismatched hash is an error, not a warning.
dataset_hash required
A score only means something under a stable contract. Change the scorer and ASSAY refuses the comparison.
scorer hash mismatch
The verdict retains the paired examples that caused it, so a reviewer can investigate before acting.
12 samples attached
Different modalities · same experimental object
searchsearchThe modality changes. The infrastructure—version, run, score, compare, gate—does not.
Bundled regression fixture · reproducible now
The current repository proves its core mechanics on a deterministic 100-sample fixture. The candidate deliberately flips the first twelve tool selections. ASSAY finds exactly those twelve, adds zero false positives, computes the paired interval, and blocks.
95% CI [−0.184, −0.056] · paired normal approximation
This is a software regression test, not evidence of performance on naturally occurring failures.
Same machinery · different predictor
The reference stack separates compounding drift, action grounding, memory through occlusion, and task utility. These are contract tests, not public-checkpoint measurements.
Open reproducible world-model result →One artifact · four decisions
Runs the suite before a pull request, sees whether the candidate regressed, and opens the exact changed samples.
Success → an actionable list, not a score mysteryChecks the confidence interval, tolerance, hashes, and specimen diffs before accepting the automated gate.
Success → evidence survives skeptical reviewVersions the scorer, validates deterministic behavior, and treats a scorer change as a new instrument—not a comparable result.
Success → measurement drift cannot masquerade as model driftExports a compact chain of custody: run IDs, hashes, method, uncertainty, verdict, changed samples, and documented limits.
Success → a repeatable go / no-go recordFrom immutable inputs to a reviewable decision
Hash the dataset and scorer contract. Refuse incomplete provenance.
Run baseline and candidate against the same sample IDs and references.
Apply one versioned scorer to every paired prediction.
Compute the paired delta, interval, and multiple-comparison correction.
Compare the interval to the declared tolerance and retain every changed specimen.
Small enough to inspect
The shipped P0 implementation is standard-library Python with a SQLite-first run store, content-addressed contracts, paired comparison engine, structured JSON, a local HTTP API, and a packaged operator UI. Both CLI and API invoke the same working comparison service.
Read the source on GitHub ↗Replay in public · operate locally
The public bench is a deterministic, zero-keyway to understand the interaction. Install ASSAY to ingest your own already-scored runs, execute the real comparison engine, and retain evidence in SQLite.
Embedded fixture data, browser-only controls, and no persistence. Every replay state is labeled; it never claims to contact a model or the installed service.
Explore the fixture →Verified run ingestion, immutable contracts, durable comparisons, health/readiness probes, a same-origin operator UI, and structured API errors.
assay serve --seed-demo --db .assay/runs.sqlite
Open the operations guide ↗
Trust requires a boundary
The public interface labels synthetic evidence as synthetic. The installed service really ingests, compares, and persists user-supplied scored runs, but it does not execute providers. Measured claims remain limited to checked-in, deterministic artifacts.
About ASSAY
ASSAY exists to make model evaluation behave more like serious engineering: fixed inputs, versioned instruments, uncertainty in the open, and decisions traceable to specimens. It does not invent another benchmark. It gives existing benchmarks one reproducible execution and gating contract.
Run the fixture, change the tolerance, step the protocol, and inspect the twelve samples behind the block.
Enter the evaluation bench →