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
verdictpackage (paired evidence, policies, evidence cards, replay, budget guard, freeze manifests; CLIverdict) 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)
| 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)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| 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.