Thank you for contributing to ImpactGuard!
git clone https://github.com/daedalus/ImpactGuard.git
cd ImpactGuard
pip install -e ".[test]"pytest tests/ -vSmoke reliability suite (must not skip tests in CI):
pytest tests/test_reliability_smoke.py -q -rsAll PRs must pass:
- Ruff (formatting + linting):
ruff check src/ - MyPy (strict mode):
mypy --strict src/ - Tests:
pytest tests/ - Coverage: ≥80%
CI uses uv.lock for reproducible dependency resolution (uv sync --locked ...).
When dependencies change, update the lockfile:
uv lockInstall the ImpactGuard hooks in your local repo:
impactguard install-hooks . --both- pre-commit: Extracts signatures from staged
.pyfiles - post-commit: Updates signature tracking after each commit
The SKIP_SIGNATURE_HOOK=1 environment variable prevents infinite recursion.
- Bump version:
bumpversion patch(orminor/major) - Update
CHANGELOG.md - Push to
masterand create a GitHub Release - CI automatically publishes to PyPI via Trusted Publishers (OIDC)
Change detection lives in compare_signatures.py. To add a new change type:
- Add detection logic in
compare()function - Add the new change type key to
SEVERITY_SCORESinrisk_model.py - Add tests in
tests/
See SPEC.md for the full technical specification and public API documentation.
See AGENTS.md for guidelines when using AI agents to contribute.
Some commits in this repository have been scaffolded or authored with the
assistance of AI coding agents (see AGENTS.md). The project policy is:
- Every AI-generated commit must be reviewed and approved by a human maintainer before merging.
- The human reviewer is responsible for correctness, security, and design fit — AI output is treated as a first draft, not a finished patch.
- AI-generated code is held to the same quality bar as human-written code (type annotations, tests, linting, coverage).
| Path | Description |
|---|---|
src/impactguard/ |
Core package |
tests/ |
All tests |
SPEC.md |
Technical specification and public API |
AGENTS.md |
AI agent contribution guidelines |
CHANGELOG.md |
Version history |