The quick-start. The full contributor guide lives at docs/how-to/contribute.md.
This repo is governed under M87 Studio. External PRs are welcome, but the closed six-class effects taxonomy and the public API surface are non-negotiable — proposals to change either need a written rationale on an issue before code lands.
git clone https://github.com/MacFall7/spine-lite-python
cd spine-lite-python
uv venv
uv sync --all-extras --devBefore every commit:
nox -s lint typecheck testBefore every push, also:
nox -s coverage docsCoverage stays ≥ 95%; docs build with --strict.
If you don't have nox, the underlying tools work directly:
uv run ruff check .
uv run ruff format --check .
uv run mypy src tests
uv run pytest --cov=spine_lite --cov-fail-under=95
uv run mkdocs build --strict- Python 3.11+.
from __future__ import annotationseverywhere. mypy --strictclean. NoAnywithout a justifying comment.- Google-style docstrings on every public symbol.
- Conventional Commits, subject ≤ 72 chars, imperative mood, no trailing period.
- Direct prose. No marketing tone, no LLM boilerplate.
The closed six-class effects taxonomy and the precedence ordering are the spec. The five pure modules (effects.py, manifest.py, classifier.py, posture.py, receipt.py) contain no I/O, no clocks, no randomness. I/O lives in hook.py, cli.py, and tests.
If your change cannot be made within those rules, that's an issue for discussion — not a PR.
- Full contributor guide
- Architecture
- Invariants
- Design Rationale
- Release process
CLAUDE.md— repo governance for Claude Code sessions.