Contributing
July 13, 2026 ยท View on GitHub
Copyright 1996-2026 Miroslav Sotek. All rights reserved. Contact: protoscience@anulum.li
This repository accepts focused changes with tests, clear claim boundaries, and no live hardware side effects in automated checks.
Setup
Use Python 3.11 or newer.
python -m pip install -e ".[dev]"
pre-commit install
For Rust engine work:
cd scpn_quantum_engine
maturin develop --release
cd ..
Before Opening A PR
Run the relevant focused tests, then the local preflight when the change is not trivial:
python -m pytest tests/<focused_test_file>.py -q
python tools/preflight.py --no-coverage
For full local verification:
python tools/preflight.py
Code Rules
- Format Python with Ruff and type public APIs.
- Format Rust with
cargo fmt. - Keep new dependencies justified and optional unless they are required by the core package.
- Preserve scientific claim boundaries. Simulator output, generated fixtures, and planning metadata are not hardware evidence.
- Do not contact live quantum providers from tests or CI unless a maintainer has explicitly approved the run.
- Keep secrets, raw credentials, local logs, and private planning artefacts out of tracked files.
Tests
- Add tests with the behaviour change.
- Prefer module-specific tests over broad bucket tests.
- Cover the happy path, at least one edge case, and the relevant failure path.
- For numerical code, assert invariants such as Hermiticity, finite values, shape contracts, probability normalisation, or documented error bounds.
- For hardware-facing code, use simulator or mocked provider boundaries by default.
The whole test tree has measured legacy typing debt. CI and local preflight therefore enforce an additive strict-mypy cohort instead of pretending all test files are already strict:
python tools/audit_test_typing_policy.py
The ordered cohort schedule and exact enforced paths live in
tools/test_typing_policy.json. Add a test file only in a source-owned slice
that also passes focused pytest, Ruff check/format, and strict mypy. Keep
intentional invalid-input calls and use a narrow error-code suppression only
where the type system cannot express the negative case.
Commit Messages
Use conventional subjects:
feat(scope): short description
fix(scope): short description
docs(scope): short description
Every commit must include the repository authorship line enforced by
tools/check_commit_trailers.py:
Authored by Anulum Fortis & Arcane Sapience (protoscience@anulum.li)
Pull Requests
- Keep the PR scoped to one logical change.
- State what changed, how it was tested, and any remaining limitations.
- Add or update docs when behaviour, public APIs, workflows, or claim boundaries change.
- Do not include generated build output unless the repository already tracks that exact artefact class.
Security
Report vulnerabilities through the process in SECURITY.md. Do not open a
public issue for secrets, credentials, or exploitable security defects.
Licence
Contributions are licensed under the GNU Affero General Public License v3.0 or later. Commercial licensing is available via protoscience@anulum.li.