Repository navigation
Releases
dv 0.4.0
dv prove now supports exactly Vitest 4.1.12 alongside 3.2.x.
Added
dv provesupports exactly Vitest 4.1.12 alongside 3.2.x through an exact-version allowlist and pinned source fingerprints. Every other 4.x and all 5.x versions remain rejected because their body, snapshot and shutdown boundaries have not been verified. The 4.1.12 matrix covers Vite 6.4.5/7.3.7/8.3.5 on Node 20/22/24 with npm and isolated pnpm.- Source-checked instrumentation in phase-owned dependencies observes the original test handler after fixture resolution. Clean test/file/worker fixtures qualify; setup, teardown, detached async work, assertion-count and lifecycle errors do not. Shutdown requires empty post-close and final Vitest error collections.
- Snapshot attribution follows 4.1.12
matchresults through the exact matcher-created Error, with read-only--update=none. Domain/polling snapshots, unbound custom snapshot helpers,aroundEach/aroundAll,onUnhandledErrorcallbacks and--minWorkersare rejected on 4.1.12. - Effective configuration retains
viteDefinekeys and literal types while normalizing checkout path spans, and captures setup imports across Vite environment graphs.
Fixed
- Deliberately tighten Vitest 3.2.x as well as 4.1.12 by rejecting functions in Vite resolver settings, including both alias
customResolverforms. Previously accepted 3.2.x function resolvers now reject: identical function source cannot prove identical closed-over targets. Declarative aliases remain supported. - Reject direct Vitest 4.1.12 snapshot-cache reads (
_snapshotDataand_initialData) in forks and threads, including caught errors, so switching expected entries cannot bypass per-test snapshot binding.
Known limitations
- Vitest 4.1.12 test bodies that directly return a
resolvesorrejectsmatcher thenable reject in both phases asunsupported test-body thenable. The observer cannot safely track that thenable as a native promise. Useawait expect(p).resolves.toBe(x)inside an async test body instead ofreturn expect(p).resolves.toBe(x); the same workaround applies torejects.
Install
pipx install https://github.com/clean99/delivery-verifier/releases/download/v0.4.0/delivery_verifier-0.4.0-py3-none-any.whlGitHub Action: uses: clean99/delivery-verifier@v0.4.0.
dv 0.3.1
dv prove now runs on a real-world repository: Arize Phoenix #17270 proves end to end. On the parent commit the retained pytest regression fails at its assertion. On the merge commit all six cases pass. Reproduction steps are in the README.
Fixed
- Unchanged tracked test-support symlinks are accepted. A link must resolve to a regular file inside both snapshots, with identical target bytes and modes, and is kept from base. Added, deleted or changed links, escaping targets, chains, loops, and links to changed production files still fail before either phase. Phoenix's repository has such a link in an unrelated JavaScript fixture, which previously blocked every proof there.
- Pytest runs whose summary reports warnings (for example
6 passed, 2 warnings) are complete. Previously such a green phase was treated as incomplete. - Pytest green validation now uses the probe's report objects instead of the printed terminal summary.
- Quiet output and
-p no:terminalqualify; XPASS and runner errors do not. - The probe writes a nonce-bound report outside the checkout and sends its digest through an inherited pipe, so printed, missing or later-rewritten records fail closed.
- Quiet output and
Scope
dv is not a security sandbox. Code in conftest.py files or plugins that rewrites pytest's report objects, or that tampers with the probe, shares the process with it and is outside the guarantee. The green receipt checks apply to dv prove.
Install
pipx install https://github.com/clean99/delivery-verifier/releases/download/v0.3.1/delivery_verifier-0.3.1-py3-none-any.whlGitHub Action: uses: clean99/delivery-verifier@v0.3.1.
delivery-verifier 0.3.0
dv prove now runs in CI as a GitHub Action. Add one step after checkout and dependency installation, and every pull request is checked: the new regression test must fail on the merge base with the fix removed and pass on the branch.
name: Regression proof
on: [pull_request]
permissions:
contents: read
jobs:
prove:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
with:
python-version: '3.12'
- run: python -m pip install pytest==8.4.2
- uses: clean99/delivery-verifier@v0.3.0
with:
test: python -m pytest --tb=long tests/test_words.pyA Vitest example and the full input table are in the README.
Added
- A composite action at the repository root. Inputs:
test,base,version,timeoutandworking-directory. Outputs:ok,verdictandevidence-path. It writes a job summary and uploads the evidence. A failed or incomplete proof fails the job. baseis resolved only as an origin branch: short names never select a same-named tag, and names starting with-are rejected before any fetch.- By default the action installs
dvfrom its own pinned source, so the action and the CLI cannot drift apart. Settingversioninstalls a release wheel instead. - Self-tests on Ubuntu and macOS cover a qualifying pytest regression and a test that passes without the fix.
The CLI behaves as in 0.2.0. Install it without the action:
pipx install https://github.com/clean99/delivery-verifier/releases/download/v0.3.0/delivery_verifier-0.3.0-py3-none-any.whlSHA-256:
1a940aba83d893151c101697e974d94985ee831f0a2d53ac955ef90a2f5063fe delivery_verifier-0.3.0-py3-none-any.whl
36436d121bcca0a8411f1e5f5df0399521485f835780ca0718bfbf4a84142149 delivery_verifier-0.3.0.tar.gz
delivery-verifier 0.2.0
dv prove now works with Vitest.
pipx install https://github.com/clean99/delivery-verifier/releases/download/v0.2.0/delivery_verifier-0.2.0-py3-none-any.whl
dv prove --test "./node_modules/.bin/vitest run"Added
- Vitest 3.2.x support for
dv prove, tested with Vite 6.3.5, 6.4.5 and 7.3.7, for directvitest,npx vitest,pnpm vitestandpnpm exec vitestcommands. - Red counts only when tests fail on test-body assertions. Hook, cleanup-callback, setup, import, suite, unhandled and late shutdown errors fail closed; retries, repeats and
test.failsare rejected. - Inline and external snapshots, read-only in both phases; each test must consume the same snapshot entries in red and green, and snapshot-bearing tests need unique full names.
- The Vitest harness is held constant: the inputs Vite and Vitest report (config files and their dependencies, setup and workspace files, env files) and the effective resolved configuration must be identical in both phases, so a PR that changes them fails closed. Files read by plugins or other code that Vite does not report count as part of the change under test, so a PASS says the test detects that change, not that a product module was fixed.
- Vitest options are an allowlist; others, such as
--diff, are rejected before anything runs.
Changed
- Proof worktrees run in a temporary directory outside the repository; Node runners get per-phase copy-on-write clones of
node_modules; every phase cleans its own temporary root, including after a timeout. pytest and unittest commands run as in 0.1.0.
Full notes: CHANGELOG.
SHA-256:
032268e5c7aafd831089db2c20f144151031c6cf98940ea3261f2215172454a9 delivery_verifier-0.2.0-py3-none-any.whl
f4de375bb8409f002a17c83a2298df4556fb33b1d10235a593087b44b0c8233c delivery_verifier-0.2.0.tar.gz
delivery-verifier 0.1.0
First usable release.
dv prove --test "<command>" checks that your regression test fails on the merge base with the fix removed and passes on your branch head, in separate detached worktrees, without touching your checkout. It rejects hollow assertions, failures for the wrong reason, runs where no test actually executed, and all-skipped green runs. Supported runners: unittest, pytest and Node's built-in test runner (TAP).
Install (Python 3.10–3.13, Git 2.38+, Linux or macOS):
pipx install https://github.com/clean99/delivery-verifier/releases/download/v0.1.0/delivery_verifier-0.1.0-py3-none-any.whl
# or
uv tool install https://github.com/clean99/delivery-verifier/releases/download/v0.1.0/delivery_verifier-0.1.0-py3-none-any.whlThe bundled handbook (docs/handbook/green-tests.md) walks through four reproducible ways a green test run still misses a bug, and what dv does and does not catch in each.
Verified before release: 214 tests on Python 3.12 including install acceptance; install acceptance (wheel, sdist and Git with pip and pipx) on Python 3.10, 3.11, 3.12 and 3.13; clean installs of both assets on Python 3.10 and 3.13.
Assets (SHA-256):
delivery_verifier-0.1.0-py3-none-any.whlaf82f08c0115bb17f8a96697acb84b1defb642454e4b703658548c6fbe50f627delivery_verifier-0.1.0.tar.gz122ec346ac3cd9e4764cf1470764da4da2b06af5daea934d0f01ed2c3f816a02
Full list of changes: CHANGELOG.md.