Skip to main content

VERDICT

Evidence-governed admission of self-evolved skills for small LLM agents.

Self-improving agents keep an edited skill when it scores higher than its parent. With small models, repeated runs of an unchanged skill already differ by several points, so many of those "improvements" are noise: in our measurements keep-if-better admits a large share of skills that did not change at all (noise floors and gate simulations in results/tables/noisegate/). VERDICT is the package that decides, from paired evidence, whether an evolved skill is really better, and records each decision as an admission card.

Status: pre-release. The verdict package (paired evidence, policies, evidence cards, replay, budget guard, freeze manifests; CLI verdict) is working and tested; the distribution name is not final (see "Release status").

Repository layout

src/verdict/      the VERDICT package: core/ (statistics, policies, cards), adapters/, runners/, budget/, cli.py
tests/            offline tests for verdict (synthetic fixtures in tests/fixtures/)
schemas/          evidence_card.schema.json, the JSON Schema every card is validated against
examples/         long-format CSV import format and an offline quickstart
configs/          policies, frozen splits, experiment configs, noise floors (frozen at prereg-v1)
prereg/           pre-registration and freeze manifests (checked by scripts/freeze_check.py)
scripts/          experiment runners (paid, budget-guarded) and offline analyses
harness/          experiment harness that produced the results (own pyproject, see harness/README.md)
  metaskill/      from-scratch replication of MetaSkill-Evolve (arXiv:2607.05297): SealQA, OfficeQA, ALFWorld, ALE, GSM8K
  noisegate/      NoiseGate, the stdlib-only admission gate prototype (noise floor, paired tests, admission card)
  scripts/        run wrappers and analyses (index in harness/scripts/README.md)
  configs/        one YAML per model configuration; gate settings; ALE presets
  data/           frozen splits (SHA256SUMS) and a 10-question OfficeQA sample
  tests/          offline tests for metaskill and the scripts
results/          every result, as small files: run summaries, per-item outcomes, tables, ledger (see results/README.md)
docs/             replication notes, research records (plans, decisions, run log), release checklist (see docs/README.md)

Install

uv sync                  # verdict + its dev group (pytest, ruff, the harness workspace member the tests need)
cp .env.example .env     # only for commands that call a model or a gated dataset; nothing below needs it

From PyPI: pip install verdict-gate (the import name and the CLI stay verdict).

Requires Python 3.12+ (uv recommended; .python-version pins 3.13). Without uv, pip install . (or pip install -e .) in a checkout installs the verdict package alone (numpy, pydantic, pyyaml, jsonschema, typer), without the harness. A wheel carries the card schema and the policy, validity, strata and floor configs it needs (verdict/_data); inside a checkout the package reads schemas/ and configs/ from the checkout.

Quickstart (offline)

uv run python examples/quickstart.py

It imports examples/long_format.csv (the generic import format, examples/README.md), then decides three synthetic candidates against their parent under keep-if-higher and under the moderate policy, and writes one evidence card (card.json, valid against schemas/evidence_card.schema.json, and card.md). The same decision from the CLI:

uv run verdict compare --baseline tests/fixtures/replay/s0.json --candidate tests/fixtures/replay/c_good.json --policy configs/policies/moderate.yaml --fnoise tests/fixtures/replay/fnoise_m.yaml --out card.json
uv run verdict card render card.json

verdict compare exits with a code per decision (0 = PASS_GLOBAL; see src/verdict/cli.py), verdict replay recomputes decisions for many arms, verdict freeze writes a freeze manifest, verdict budget status reads the spend ledger.

Tests

uv run pytest            # all offline tests: no network (blocked by conftest.py), no API keys, no raw runs needed
uv run ruff check .

Reproducing the results

None of the commands below makes a model call or needs a key; they read tracked files only.

What Command Check
Frozen splits, configs and H48 artifacts are the ones pre-registered uv run python scripts/freeze_check.py prints all hashes match
E2 replication summary by provenance tier uv run python scripts/analyze_e2.py git diff --exit-code results/outcomes/p3_e2/
The decision core on synthetic evidence uv run python examples/quickstart.py three decisions printed, cards schema-valid
Paper tables and figure data from committed artifacts uv run python scripts/make_tables.py (make paper-tables) git diff --exit-code reports/paper/

Every number in results/ cites the run it came from; docs/plan/RUNLOG.md (thesis experiments) and docs/research/RUNLOG.md (earlier NoiseGate work) give the exact command of each logged run. The paid runners (scripts/run_*.py) all have a --dry-run that prints the planned runs and the estimated cost; model calls go through OpenRouter and cost money.

Not yet reproducible from tracked data: the E3 decision analysis (scripts/analyze_e3.py), H48 Event 1, the E8 evolution and H48 Event 2 read raw arm files under runs/ (not tracked). Harness commands run from harness/; see harness/README.md.

Data and licenses

Code is licensed under Apache-2.0. Datasets keep their own licenses. What is in this repository:

Benchmark License What is tracked here
SealQA (vtllms/sealqa) Apache-2.0 Question ids in frozen splits, per-question scores, evolved skills; no question text
FRAMES (google/frames-benchmark) Apache-2.0 Question ids in frozen splits; a synthetic test fixture (no real rows)
FinSearchComp (ByteSeedXpert/FinSearchComp) CC-BY-4.0 (attribution required) Task ids in frozen splits and summary scores; raw rows are downloaded at the pinned revision, never committed
τ²-bench / τ³ retail (sierra-research/tau2-bench) MIT Task ids, per-task rewards, self-proposed retail skills; the environment is checked out separately at the pinned commit
GSM8K MIT Ids and scores
OfficeQA CC-BY-SA-4.0 A 10-question sample, see harness/data/officeqa_sample/LICENSE.md
Agents' Last Exam (task data contains hidden reference answers) Never included: task ids and scores only

All of the above can be redistributed in this form; the CC-BY-4.0 and CC-BY-SA-4.0 rows need the attribution kept.

Release status

The distribution name is still open (RUNLOG D10: verdict is taken on PyPI); it lives only in pyproject.toml and src/verdict/, so the rename is one change. The implementation spec's revision-eval CLI is the verdict command here.

Citation

A CITATION.cff will be added with the thesis title. Until then, cite MetaSkill-Evolve (arXiv:2607.05297) for the method the harness replicates.

Metadata

Release files for verdict-gate 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for verdict-gate 0.1.0
File Size Uploaded Provenance Actions
verdict_gate-0.1.0.tar.gz 134.7 kB Without provenance Details for verdict_gate-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for verdict-gate 0.1.0
File Interpreter ABI Platform Actions
verdict_gate-0.1.0-py3-none-any.whl Python 3 none any Details for verdict_gate-0.1.0-py3-none-any.whl

Total release size: 277.4 kB

Release files / verdict_gate-0.1.0.tar.gz

Download URL verdict_gate-0.1.0.tar.gz
Size 134.7 kB
Tags Source
SHA-256 checksum
How to use checksums
995b4f307b15e849ccc01dabc6af903412e87541cf6d73144d8c3629ad3c8a73
BLAKE2b-256 checksum
How to use checksums
0fe129aa259b49d58a93ab86bbb1e1b958d5344bce6821bbfdbaa71132f10cf1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / verdict_gate-0.1.0-py3-none-any.whl

Download URL verdict_gate-0.1.0-py3-none-any.whl
Size 142.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
36dd521c4b9c4ded7b1c56eb1ab8620a7d07d884814cf286c911dfa780f86cc0
BLAKE2b-256 checksum
How to use checksums
83c8e26d005f792abbf4011b6285c53926e61ef0b7abb5676e95f51579cf4c95
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Security for verdict-gate 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page