Thank you for your interest in contributing.
- Read
DEVELOPMENT.mdfor environment setup. - Read
docs/design-spec/_standards.md— all code must comply. - Check for an existing issue or open one to discuss your idea first.
We use Conventional Commits:
feat(audio): add gapless handoff scheduling
fix(library): handle symlinks in FSEvents watcher
chore(deps): update GRDB to 6.28.0
Scopes match module names: audio, library, metadata, persistence, ui, playback, cast, scrobble, observability.
- One logical change per PR.
- Link the relevant phase spec file in the PR description.
- All acceptance criteria for the relevant phase must be checked before merge.
make lint && make test-coveragemust be green.- No force pushes to
main.
Run make format before committing. The pre-commit hook (installed by make bootstrap) runs swiftformat --lint and swiftlint automatically.
Use the bug report template.
See SECURITY.md.