Contributing
Working style, branch hygiene, and the expectations that keep changes safe and readable.
Working style
This repo favors:
- reading before coding
- small, targeted diffs
- explicit ownership boundaries
- minimal abstraction
- visible failures
Contribution rules that matter most
- Do not rewrite working systems casually.
- Prefer additive hardening over speculative rearchitecture.
- Preserve local-first and paper-first assumptions unless the project direction changes explicitly.
- Keep frontend shells thin around the Python runtime.
Recommended contribution flow
- read the smallest owning module
- read the matching docs and
.ainotes - make the minimal useful change
- run focused tests first
- run broader validation if behavior changed
- update docs and
.ainotes when assumptions changed
Commit style
Conventional commit style is preferred because it keeps release automation and history readable. Examples:
feat: add locale-aware docs routingdocs: expand runtime and onboarding guidancefix: clarify docs feedback forwarding state
Release automation reads conventional commits on main.
Feature commits create minor releases, fix/perf/docs/build/ci/chore commits create patch releases, and ! or BREAKING CHANGE: marks a major release.
Only main mutates pyproject.toml, workspace package versions, and CHANGELOG.md automatically. Other branches run a version preview and may publish prerelease tags/releases for test binaries:
main: stable SemVer tags such asv0.9.5V1,V2, and similar integration branches:nextprereleases such asv0.9.6-next.9870+gabc1234- feature branches:
betaprereleases such asv0.9.6-beta.9870+gabc1234
Do not use a fourth SemVer core segment like v0.9.5.9870; CI build identity belongs in prerelease or build metadata.
CI and release checks
Pull requests and protected branches should keep these checks green:
- Python core: uv sync, Ruff, Pyright, Pytest, and a PyInstaller smoke build
- Web GUI: pnpm workspace install, lint, typecheck, and production build
- Docs: pnpm workspace install, lint, typecheck, and static export
- TUI: pnpm workspace install and Ink entrypoint syntax check
- Version Check: semantic-release preview plus SemVer-compatible branch artifact identity
- Binaries: PyInstaller macOS and Windows artifacts for branch testing, attached to stable releases on
v*tags and to prerelease GitHub Releases on branch pushes
When docs updates are part of the task
Docs should be updated in the same branch when:
- a command or workflow changed
- the frontend or runtime boundary changed
- a new guardrail or design rule was introduced
- onboarding expectations moved
What makes a good PR in this repo
- the diff stays focused
- operator-visible behavior is verified
- docs match the implementation
- future contributors do not have to rediscover the same rule from scratch