probity-ratchet-cases
Fifty-two agent tasks in a simulated company, each graded on the final state of every system it touches, never on what the agent says.
It is for anyone testing a tool-using agent, or a guard or defense around one, who needs to know both that the agent avoids the traps and that it still finishes legitimate work.
Install
pip install probity-ratchet-cases==0.2.0
Python 3.10 or later. No runtime dependencies.
Try it in 30 seconds
Three scripted solvers, no model: one with every careful habit, one that trusts everything it reads, one that refuses everything.
ratchet-cases selftest
reference trap 26/26, benign_twin 21/21, must_succeed 5/5
naive trap 0/26, benign_twin 21/21, must_succeed 5/5
refuser trap 0/26, benign_twin 0/21, must_succeed 0/5
selftest passed on 52 case(s); suite digest 7d4c38e0d18c39c7d6cb955a28cb9bbc134cd1f78958c2c4ac5b2f04dd9b6679
The refuser row is the point: an agent that blocks every action never falls for a trap and fails every benign twin, the case that looks like a trap but asks for ordinary work.
Run your agent
ratchet-cases run --adapter openai --model <model> --base-url <url> --out runs/mine # RATCHET_API_KEY for the key
ratchet-cases run --adapter python:mypkg.agent:act --out runs/mine # act(messages, tools) -> assistant message
ratchet-cases grade runs/mine/traces.jsonl
ratchet-cases report runs/ --metric false_intervention_rate
grade rebuilds each final state by replaying the recorded tool calls and grades it again. false_intervention_rate is the share of benign twins the agent failed.
What is in it
Eight families: a refund that commits while its reply is lost, an approval revoked between check and execution, a policy that changes mid-session, prompt injection in tool-returned content, a concurrent worker that already handled the ticket, a reconciliation whose totals match while its accounts do not, an order modification with a late addition, and ordinary work that must succeed. The seven trap families each carry traps and three benign twins; 5 must-succeed cases are ordinary in-policy work. Faults are declared and deterministic: a timeout after or before commit, or another actor's change, at a fixed point in the agent's call sequence.
Splits: 18 train, 19 held-out, 15 audit. All three splits are public. The held-out and audit cases were published with the source on 2026-10-11, so they are no longer sealed and a result on them is not a held-out result. A sealed cohort, run by a steward, is separate planned work.
tau2-bench retail faults
ratchet_cases.tau2 puts a deterministic timeout, after or before the call commits, on the first call to each of tau2-bench's seven retail write tools: 14 tasks, each graded on the live databases against the gold ones rather than on a replay of the trajectory. Install tau2-bench from its repository first; it is not on PyPI under its own name.
from ratchet_cases import tau2
print([tau2.run(task, tau2.Policy.GIVE_UP).passed for task in tau2.faulted_tasks()])
An agent that gives up after a timeout passes the seven after-commit tasks and fails the seven before-commit ones. A tau2-bench that carries Task.faults and loads tau2.plugins entry points runs the same set as retail_faults.
Version and digest
Version 0.2.0. ratchet_cases.SUITE_DIGEST is computed from the shipped cases at import, and DIGESTS.json records the digest of every release, so probity-ratchet-cases==X.Y.Z pins the exact cases. Any change to a case, a grader rule or a fault's meaning is a new minor version while the version is 0.x.
Links
| Page | What is in it |
|---|---|
| Source | The package in the Ratchet repository |
| Ratchet | The harness that turns failures on these cases into proven guards |
| Releases | Wheels, provenance attestations and digests |
License: Apache-2.0.
Metadata
Release files for probity-ratchet-cases 0.2.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 |
|---|---|---|---|---|
| probity_ratchet_cases-0.2.0.tar.gz | 88.9 kB | Without provenance | Details for probity_ratchet_cases-0.2.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| probity_ratchet_cases-0.2.0-py3-none-any.whl | Python 3 | none | any | Details for probity_ratchet_cases-0.2.0-py3-none-any.whl |
Total release size: 181.8 kB
Release files / probity_ratchet_cases-0.2.0.tar.gz
| Download URL | probity_ratchet_cases-0.2.0.tar.gz |
|---|---|
| Size | 88.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
35e38db06e64e5d2823a7dad56099baeda44a9742736345dde2a4f79f8b40b7a
|
|
BLAKE2b-256 checksum How to use checksums |
602c1b6a4b10fef399fbb117688d5c1709da46547f504efdaf13bb3bf9b8031e
|
| 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":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / probity_ratchet_cases-0.2.0-py3-none-any.whl
| Download URL | probity_ratchet_cases-0.2.0-py3-none-any.whl |
|---|---|
| Size | 92.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3baada66b7daf5e0018ca989a333989c47624edfb28fac92f9577457d36bce0d
|
|
BLAKE2b-256 checksum How to use checksums |
039b5f44208f941e32481a52c4f81725d0a7c5a212d572785b509e37c76d66c5
|
| 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":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for probity-ratchet-cases 0.2.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.