- Open an issue or discussion before making large architectural changes.
- Keep changes scoped. Separate refactors from feature work when possible.
- Prefer additive changes over silent behavioral rewrites.
- Keep design decisions reviewable. Use
docs/adr/for architecture decision records when a change needs a durable rationale. - Place documents by kind (see docs/README.md):
docs/adr/for decisions,docs/designs/for pre-implementation design specs and plans,docs/reports/for point-in-time audits and investigations. Living reference docs stay at thedocs/root without a date prefix; dated documents useYYYY-MM-DD-slug.md. - Follow the Code of Conduct.
- Create a branch from
main. - Implement the change against the linked issue or agreed scope.
- Run the required checks:
pnpm lint pnpm test pnpm typecheck pnpm build - Run the formatting gate:
Use
pnpm format
pnpm format:writeonly when you need Prettier to rewrite files locally. - Add a Changeset for user-visible package changes:
Documentation-only changes usually do not need a Changeset unless they describe released package behavior.
pnpm changeset
- Document operational or self-hosting impact when it changes deployment behavior.
- Open a pull request.
- Explain the user-visible behavior change and any operational impact.
- Link the related issue. Link an ADR when the change adds or updates a design decision.
- Include screenshots or terminal output when changing UX or deployment flows.
- Include a Changeset when the change affects released package behavior.
- Call out follow-up work explicitly instead of leaving hidden gaps.
- TypeScript is
strict; do not weaken compiler settings to land a change. - Add tests for new worker logic, provisioning logic, and API behavior.
- Keep Docker and GitHub integration code auditable. Favor explicit env vars and small helper functions.
- Never commit real GitHub tokens, private keys,
.envfiles, or generated installation tokens. - Treat
docker.sockaccess as privileged. Self-hosting docs assume a trusted operator. - Report suspected vulnerabilities privately through the process in SECURITY.md.