Skip to content

Contributing

The canonical contribution guide lives in the repository: CONTRIBUTING.md. This page summarises it.

Development setup

git clone https://github.com/Lexsi-Labs/CuratorKIT.git
cd CuratorKIT
pip install -e ".[dev]"
pre-commit install

Both checks must pass before a PR can merge:

ruff check .            # lint
pytest tests/unit -q    # unit tests; run without heavy extras, external deps are mocked

Strict mypy is configured and adopted incrementally; it is encouraged, not gating.

Adding a component

Every pipeline stage implements one of four small ABCs in curatorkit/interfaces.py:

ABC Contract Implementations
BaseReader read() -> (samples, rejected) curatorkit/connectors/
BaseGate run(samples) -> (passed, rejected) curatorkit/gates/, curatorkit/hygiene/
BaseNormalizer run(samples) -> samples curatorkit/normalizers/
BaseExporter export(samples, output_dir) curatorkit/exporters/

Read the architecture reference before starting. A complete change includes the implementation, wiring through CuratorConfig or the YAML config, unit tests, and an update to the matching guide, in particular the configuration reference for any CuratorConfig change.

Conventions

  • PR titles follow Conventional Commits (feat:, fix:, docs:, …).
  • Behaviour changes need tests.
  • Add a changelog entry under the Unreleased heading.
  • Docs pages use British spelling; keep each file internally consistent.

Where to ask

Questions go to GitHub Discussions; bugs to Issues. Security issues are never filed publicly; see SECURITY.md. Participation is governed by the Code of Conduct.