Skip to main content

agentic-test-forge

PyPI version

Python quality enforcement for AI-generated and legacy codebases. Implements Uncle Bob Martin's workflow: CRAP analysis, mutation testing, and Gherkin scenario mutation, optimized for agentic development and CI gates.

Status

Latest PyPI: 1.1.0 — mutmut 3.5 runner, CLI config paths, CRAP relative coverage keys (#135). v1.1 product work (#58) shipped earlier; this tag is the pin consumers should use.

Command Status
forge crap Available
forge mutate Available (Linux/WSL; mutmut does not run natively on Windows)
forge mutate-gherkin Available
forge check Available (includes optional advisory DRY scan)

Install

pip install agentic-test-forge

Pin a version:

pip install agentic-test-forge==1.1.0

For local development of this repo:

pip install -e ".[dev]"

Alternative (VCS install):

pip install "agentic-test-forge @ git+https://github.com/cheezd/agentic-test-forge.git"

Usage

forge --help
forge crap --threshold 30
forge mutate --base main --threshold 80
forge mutate-gherkin --base main --threshold 80
forge check

Omitted --path / --features-path uses [tool.forge].paths and gherkin_paths. Repeat --path to override with multiple roots (forge check --path dashboards --path ghdash).

Run tests with coverage, then the full quality gate:

pytest --cov=src
forge check --json report.json

Differential mutation uses git diff against --base (default main) and skips unchanged files tracked in .forge/mutation-manifest.json. Use --full to ignore the manifest.

Gherkin mutation mutates Examples table cells in changed .feature scenarios, runs the configured acceptance test command, and tracks results in .forge/gherkin-manifest.json.

Thresholds are gate cutoffs, not comparable scales: crap_threshold is a maximum CRAP score per function; mutation_threshold and gherkin_threshold are minimum mutation kill rates (0–100%). See score interpretation for what the numbers mean.

Configure per-project thresholds in pyproject.toml:

[tool.forge]
paths = ["src"]
crap_threshold = 30
crap_formula = "standard"  # standard | simplified
manifest_dir = ".forge"
mutation_threshold = 80
mutation_base_ref = "main"
mutation_test_cmd = "pytest"
gherkin_threshold = 80
gherkin_base_ref = "main"
gherkin_test_cmd = "python -m behave"  # not bare `behave` — often missing from PATH
gherkin_runner = "behave"  # behave | pytest
gherkin_paths = ["features"]

[tool.forge.gates]
crap = true
mutation = false
gherkin = false
dry = true         # advisory — does not fail forge check

Optional local override: you do not need forge.toml for normal use — [tool.forge] in pyproject.toml is enough (including consumer repos). If present, a forge.toml in the current working directory is merged on top of pyproject.toml (useful for uncommitted experiments, e.g. stricter thresholds on your machine). Unlike pyproject.toml, forge does not search parent directories for forge.toml; run from the directory that contains it, or rely on pyproject.toml only.

Staged rollout for legacy repos: enable crap first, then advisory dry, then mutation on Linux CI or WSL (keep it off in Windows pre-commit), then gherkin once python -m behave (or pytest-bdd) is already green. See consumer-ci staged rollout.

Consumer CI integration: see docs/consumer-ci.md (GitHub Actions, version pinning, Django / monorepo, Gherkin, Windows / WSL mutation, Windows console notes).

Pre-commit (optional)

Run forge check locally before commit (respects [tool.forge.gates]):

# .pre-commit-config.yaml
repos:
  - repo: https://github.com/cheezd/agentic-test-forge
    rev: v1.1.0
    hooks:
      - id: forge-check
pip install pre-commit agentic-test-forge==1.1.0
pre-commit install
pytest --cov=src   # CRAP gate needs .coverage
pre-commit run forge-check --all-files

See consumer-ci — pre-commit for coverage prerequisites, Windows/mutation notes, and troubleshooting.

Development

pip install -e ".[dev]"
pytest
ruff check .
mypy src

Domain language

See docs/domain/CONTEXT.md.

Architecture decisions

Index and when to write ADRs: docs/adr/README.md. Package layout, dependency direction, and refactor conventions: docs/adr/0001-package-boundaries-and-refactor-conventions.md.

License

Licensed under the GNU Lesser General Public License v3.0 or later (LGPL-3.0-or-later).

What this means in practice:

  • Modifications to forge must be shared under LGPL when you distribute them.
  • Using forge to check your code — via CLI in CI, locally, or on build servers — does not require your application or SaaS product to become open source.
  • Importing forge as a library in a proprietary product is generally permitted under LGPL (unlike GPL), subject to LGPL’s requirements (e.g. allowing replacement of the library).

We deliberately use LGPL, not AGPL, so network/SaaS deployment of your product does not trigger additional copyleft beyond the library itself. This is not legal advice; consult counsel for your specific deployment.

Roadmap

v1.0 (shipped)

  1. Foundation & CLI shell — done
  2. CRAP analyzer (radon + coverage.py) — done
  3. Differential code mutation (mutmut) — done
  4. Gherkin mutation — done
  5. Quality gate orchestrator (forge check) — done
  6. DRY flagging (advisory) — done

v1.1 (shipped — #58)

  • PyPI publish & GitHub Release — done (#64)
  • Dogfood CI (forge check + report artifact) — done (#70)
  • External consumer pilot (compliance-llm) — done (#71)
  • Pre-commit hook — done (#74)
  • Docs polish & ADR bootstrap — done (#78#81, #128)

Beyond v1.1

  • Semantic DRY (#122) — deferred to v1.2+

Release files for agentic-test-forge 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for agentic-test-forge 1.1.0
File Size Uploaded
agentic_test_forge-1.1.0.tar.gz 71.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for agentic-test-forge 1.1.0
File Interpreter ABI Platform
agentic_test_forge-1.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 122.7 kB

Release files / agentic_test_forge-1.1.0.tar.gz

Download URL agentic_test_forge-1.1.0.tar.gz
Size 71.3 kB
Tags Source
SHA-256 checksum
How to use checksums
b919b93b04cb405528da7647c1adc6bf2bf3047669d25cb1c9f06b31c45674f2
BLAKE2b-256 checksum
How to use checksums
60c3811042b1dfa5b00425f5cb626fc489732fd3f8b52ebe1a3635a9a68103ce
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 29, 2026.

Transparency log

Release files / agentic_test_forge-1.1.0-py3-none-any.whl

Download URL agentic_test_forge-1.1.0-py3-none-any.whl
Size 51.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2ead4ae9b243d0f6fd091796793e0613172cb08cea49f17718579aff831b0bdf
BLAKE2b-256 checksum
How to use checksums
99023093287fcdd2c5f69a5cf0db8c2e7186551372788d74c4d8334a007f608c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 29, 2026.

Transparency log

Release history Release notifications | RSS feed

1.2.0

2 release files

This release

1.1.0 This release

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page