Skip to content

Releases

dv 0.4.0

Choose a tag to compare

@clean99 clean99 released this 28 Oct 08:42

dv prove now supports exactly Vitest 4.1.12 alongside 3.2.x.

Added

  • dv prove supports 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 match results through the exact matcher-created Error, with read-only --update=none. Domain/polling snapshots, unbound custom snapshot helpers, aroundEach/aroundAll, onUnhandledError callbacks and --minWorkers are rejected on 4.1.12.
  • Effective configuration retains viteDefine keys 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 customResolver forms. 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 (_snapshotData and _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 resolves or rejects matcher thenable reject in both phases as unsupported test-body thenable. The observer cannot safely track that thenable as a native promise. Use await expect(p).resolves.toBe(x) inside an async test body instead of return expect(p).resolves.toBe(x); the same workaround applies to rejects.

Install

pipx install https://github.com/clean99/delivery-verifier/releases/download/v0.4.0/delivery_verifier-0.4.0-py3-none-any.whl

GitHub Action: uses: clean99/delivery-verifier@v0.4.0.

dv 0.3.1

Choose a tag to compare

@clean99 clean99 released this 27 Oct 19:13

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:terminal qualify; 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.

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.whl

GitHub Action: uses: clean99/delivery-verifier@v0.3.1.

delivery-verifier 0.3.0

Choose a tag to compare

@clean99 clean99 released this 27 Oct 03:46

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.py

A Vitest example and the full input table are in the README.

Added

  • A composite action at the repository root. Inputs: test, base, version, timeout and working-directory. Outputs: ok, verdict and evidence-path. It writes a job summary and uploads the evidence. A failed or incomplete proof fails the job.
  • base is 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 dv from its own pinned source, so the action and the CLI cannot drift apart. Setting version installs 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.whl

SHA-256:

1a940aba83d893151c101697e974d94985ee831f0a2d53ac955ef90a2f5063fe  delivery_verifier-0.3.0-py3-none-any.whl
36436d121bcca0a8411f1e5f5df0399521485f835780ca0718bfbf4a84142149  delivery_verifier-0.3.0.tar.gz

delivery-verifier 0.2.0

Choose a tag to compare

@clean99 clean99 released this 26 Oct 23:07

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 direct vitest, npx vitest, pnpm vitest and pnpm exec vitest commands.
  • 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.fails are 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

Choose a tag to compare

@clean99 clean99 released this 26 Oct 06:22

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.whl

The 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.whl af82f08c0115bb17f8a96697acb84b1defb642454e4b703658548c6fbe50f627
  • delivery_verifier-0.1.0.tar.gz 122ec346ac3cd9e4764cf1470764da4da2b06af5daea934d0f01ed2c3f816a02

Full list of changes: CHANGELOG.md.