Contributing
CONTRIBUTING.md is the single source for the rules, the gate and the recipes. This page is the path through it, and where each part goes deeper.
The path
Section titled “The path”- Ask first, for anything larger than a fix. Questions and ideas go to Discussions; a bug to an issue; to talk it through, #contributing on Discord. Kept is maintainer-led, so the work should fit its design before you write it.
- Set up a development copy. Local setup: the database, the mail catcher, seed data and the mock AI provider.
- Make the change, following the rules CONTRIBUTING.md lists; each one has a check that fails.
- Run the fast gate and your tests:
bash scripts/ci-local.sh --fast, plus the tests for what you touched (Testing). GitHub Actions runs the whole gate on the pull request. - Open a pull request against
main. Its title is a Conventional Commit subject, such asfix(web): …ordocs: …: pull requests are squash-merged and the title becomes the commit. - Sign the CLA once, on your first pull request: a bot asks you to reply with a comment, and that covers every later one. The CLA
Security problems never go in a public issue: SECURITY.md.
Where each part goes deeper
Section titled “Where each part goes deeper”| For | Read |
|---|---|
| How the pieces fit | Architecture, the monorepo |
| A feature end to end | Build a feature end to end |
| Tables and policies | Data model, row-level security, migrations |
| Routes | API conventions, authentication |
| Screens and strings | UI kit, languages and right-to-left |
| Offline | Offline and sync |
| AI and MCP | AI providers, MCP server |
| The security rules for code | Security for developers |
Everyone taking part follows the Code of Conduct.