Skip to main content

Acquit

Provably skip unaffected pytest tests on every pull request. Static analysis, fail-closed, with evidence for every skip.

Status: alpha. The engine works: on real pull requests acquit makes selective decisions, and every skip ships with a machine-checkable witness that is re-verified by replay before pytest honors it. Every failure mode still converges on "run everything". Not yet on the GitHub Marketplace, so expect rough edges and no version pinning.

What it does

Acquit builds a dependency graph of your repository from import statements alone (it never executes your code), then works out which test files a pull request cannot possibly affect. Those tests are skipped, and every skip comes with a machine-checkable witness: the test's import closure and proof that it does not intersect the changed files.

Anything Acquit cannot reason about (dynamic imports, changed conftest files, dependency bumps, data files, and a documented list of other triggers) makes it fall back to running the full suite. It can only be wrong in the safe direction.

Try it on a PR

permissions:
  contents: read
  pull-requests: write

steps:
  - uses: actions/checkout@v4
    with:
      fetch-depth: 0
  - uses: rajeev-chaurasia/acquit@main
    with:
      mode: report

Report mode never skips a test: the action analyzes the diff, verifies the evidence with a replay, posts a sticky PR comment explaining the decision, and sets outputs. Switch to mode: enforce once you trust what the comments say, and the pytest plugin will skip the provably unaffected files. Version pinning arrives with the first release; until then @main is the way in.

Design principles

  • Never execute user code during analysis
  • Fail closed: every error path converges on "run all tests"
  • Deterministic: same tree and diff produce byte-identical reports
  • Explainable: every decision names the rule or the graph path behind it

License

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

acquit-0.0.1.tar.gz (229.8 kB view details)

Uploaded Source

Built Distribution

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

acquit-0.0.1-py3-none-any.whl (82.5 kB view details)

Uploaded Python 3

File details

Details for the file acquit-0.0.1.tar.gz.

File metadata

  • Download URL: acquit-0.0.1.tar.gz
  • Upload date:
  • Size: 229.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for acquit-0.0.1.tar.gz
Algorithm Hash digest
SHA256 d3bbbedddbb1fcfb664c7ce75ca4f9e2a3114120db188fb6be625413eba0a528
MD5 66d0d50f2dd1b1360d7b11f178076175
BLAKE2b-256 f8fe094a5a8c0a9266d0469bee860f141cd0aa1aef9d6fbbb0b0ff31ca7fffef

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquit-0.0.1.tar.gz:

Publisher: release.yml on rajeev-chaurasia/acquit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file acquit-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: acquit-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 82.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for acquit-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 4b085055d993a9035a9edf661c1cfb3ddd46d831bbcba6b80e5874632936480b
MD5 8dcf0f9558bb6033f79e7f2186fbdaa5
BLAKE2b-256 1c4bae6d0f7aa9b8db6ece0edaa9538f11806c9e5f55a0ac5058564503f2ae4e

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquit-0.0.1-py3-none-any.whl:

Publisher: release.yml on rajeev-chaurasia/acquit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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