Skip to main content

Conformance

Verify what your AI agent did — not what it said.

Conformance injects deliberate faults at your agent's effect boundary (a redelivered queue event, a crash mid-write, a withheld approval, a raced turn), records what actually happened, and evaluates nine deterministic invariants over that record. No language model judges anything. Every finding comes with a content-addressed witness a sceptic can re-derive offline, without you.

$ conformance verify --scenario shipbot --seed 17

seed 17 · spec conformance-1.0 · 8 schedule(s) run

✕ 1 custody                  VIOLATED    wit_05b69e04ec177d5209056ab82d
⚠ 2 one-advance              inconclusive (no attachment point for staged_race…)
⚠ 3 no-scarce-hold           inconclusive (no pool acquisitions in record…)
✕ 4 quarantine               VIOLATED    wit_5fde8bf97de2a976d8a57fbd21
✕ 5 exactly-once-effect      VIOLATED    wit_d223f1f2cfec1b7eca4e89552a
⚠ 6 plan-identity            inconclusive (needs its own recording…)
⚠ 7 timeout-equals-cancel    inconclusive (no attachment point for delay_response…)
⚠ 8 structural-authority     inconclusive (no attachment point for withhold_approvals…)
⚠ 9 state-separation         inconclusive (no database schema discoverable…)

Result
  Level Achieved: —
  Target:         L1 (DURABLE)
  Depth:          V2 (DETERMINISTIC)
  Gate:           FAIL

Every invariant returns hold, violated, or inconclusive. inconclusive is never styled as a pass and never counts toward a level: unmeasured is not passed. That is the whole design.

Install

pip install conformance          # or: uv tool install conformance

Python 3.12+. No account, no API key for verification, nothing uploaded.

Start where you are

conformance init                      # detect the stack, find effect sites, run static checks
conformance doctor --explain-depth    # what each invariant needs to be decidable
conformance verify --path .           # V0 verdicts, no instrumentation required

init needs no SDK, no credentials, and no network. It reports what it found and — for anything it cannot decide at this depth — exactly what would decide it.

Going deeper: record once, verify forever

Declare a scenario naming an entrypoint that runs one bounded episode of your agent, then:

conformance record --scenario myagent --seed 1   # your key, your machine, once
conformance verify --scenario myagent --seed 1   # sealed, offline, byte-deterministic

Your credentials are used exactly once. Everything after that runs against the captured cassette: CI needs no model key and no network. A cassette miss is a loud failure (exit 3) — never a live call, never a guess.

Same commit, same seed, same cassette produces identical verdict bytes and identical witness ids: 1,000 out of 1,000 runs on the crash schedules, Wilson 95% CI ≤ 0.38% flake.

Checking a finding

A violation produces a witness. Export it and it becomes a file anybody can check, offline, without trusting this tool:

conformance export <witness-id>
conformance replay <witness-id>       # re-derives the verdict from the evidence

Editing the evidence breaks its content address and replay refuses.

In CI

- run: pip install conformance
- run: conformance ci --scenario myagent --seed 1 --level-target L1

A violation of an invariant your target level requires fails the check. Exit codes: 0 pass, 1 gate fail, 2 cannot execute, 3 fail-closed breach.

Depth, honestly

Depth What it needs What it decides
V0 nothing discovery, configuration, invariant 9
V2 SDK attached + a recorded cassette all nine, under fault

Most systems start and stay useful at V0. Moving to V2 means instrumenting the effect boundary — usually a single keyword argument if your effects are HTTP. conformance doctor --scenario <name> --explain-depth lists the exact step per invariant.

Documentation

Apache-2.0.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

conformance-0.1.0.tar.gz (82.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

conformance-0.1.0-py3-none-any.whl (99.7 kB view details)

Uploaded Python 3

File details

Details for the file conformance-0.1.0.tar.gz.

File metadata

  • Download URL: conformance-0.1.0.tar.gz
  • Upload date:
  • Size: 82.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.25 {"installer":{"name":"uv","version":"0.9.25","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for conformance-0.1.0.tar.gz
Algorithm Hash digest
SHA256 02ea1409cdf0372824c5e4ff818c519e766959c4ee627ba6d100e0658c6187d7
MD5 28df910999baab67d8f9f16e7d5c9837
BLAKE2b-256 87f9c91ac21635c449b356d66f082b181973131ec66b9e26e028b7f1dff7db58

See more details on using hashes here.

File details

Details for the file conformance-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: conformance-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 99.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.25 {"installer":{"name":"uv","version":"0.9.25","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for conformance-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 753a9eeff09982bc5b020d96b28814ffad0b36c549f03e16ee2d27e390f425a1
MD5 a3bb952f2026487cf0bc62a418e0d498
BLAKE2b-256 38e3d5975ef7d3ef1c1da5cd1334332318a9dd45ed0b610913fae1b1f0ade839

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page