Contributing
Thanks for helping build trustworthy GDPR machinery. This is the condensed version; the full guide is CONTRIBUTING.md on GitHub.
git clone https://github.com/jaylann/effaced && cd effaceduv sync # workspace: packages/effaced + packages/effaced-stripeuv run pre-commit install --hook-type pre-commit --hook-type commit-msgjust check # ruff lint + format check + mypy --strict + file-length gatejust test # pytest (unit + property tests)Touching the docs site additionally needs Node and pnpm (just site-dev);
Python-only contributions don’t.
Branch flow
Section titled “Branch flow”feat/your-change ──PR──► stage (default) ──promotion PR──► main ──► release-please ──► PyPI- PRs always target
stage, nevermain.mainis release-only. - Squash-merge: your PR title becomes the commit on
stage, so PR titles must be Conventional Commits too (CI enforces this). - Releases are fully automated — versioning, changelogs, tags, and PyPI publishing happen via release-please. You never touch a version number.
Commits: Conventional + DCO
Section titled “Commits: Conventional + DCO”Every commit message needs two things:
- Conventional Commits:
type(scope)?: lowercase subject— types:feat fix chore docs refactor test perf style ci build revert. - DCO sign-off: commit with
git commit -s. By signing off you certify the Developer Certificate of Origin. CI rejects unsigned commits.
Code standards
Section titled “Code standards”- Strict typing. mypy
--strictwith the pydantic plugin must pass. - Pydantic for data. Frozen
BaseModels withextra="forbid"; invariants in validators, not call sites. - Small, searchable files. One concept per file, named after the class it holds, hard cap 600 lines (CI-gated).
- Google-style docstrings on all public API — they are rendered verbatim as this site’s API reference.
- Tests for behaviour, property-based tests (hypothesis) for format/isolation guarantees.
Wording discipline
Section titled “Wording discipline”Contributions must keep the framing: effaced ships mechanisms, never compliance determinations. Don’t add copy — docs, docstrings, log messages — claiming effaced “makes you compliant”.
Resolvers and issues
Section titled “Resolvers and issues”- New resolvers: open a “Resolver request” issue first — first-party resolvers are added demand-pulled.
- Bug reports: use the issue form; include package versions and a minimal annotated model if manifest-related.