Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,9 @@ Three layers, each check in one of them: hooks fix and guard staged files, `just
Scorecard, dependency review). Do not add a verification to the hooks; add it to the recipe CI
already runs.

Every new Dockerfile needs a sibling `<name>.dockerignore` and an entry in the `docker-lint` specs
in the root `justfile`.

Keep new settings in the smallest surface that needs them. If a change adds or renames env vars,
update the examples, validation rules, and affected docs in the same PR.

Expand All @@ -136,6 +139,8 @@ ladder, cheapest first:
| `just ci` | the everyday local gate: `pre-commit` hooks, `check`, `test-ci`, `policy-check` |
| `just ci-full` | everything GitHub Actions runs: `ci` plus `audit`, `cloudflare-check`, `docker-smoke`, `test-e2e` |

`just stack`, `backup`, `restore`, and `deploy` change live hosts. Do not run them to test a change.

Pull requests also run `cloudflare-check`, the www E2E suite, and `docker-smoke`, so a green
`just ci` can still leave a red PR check. `just ci-full` covers them; it takes tens of minutes and
needs Docker. Only CodeQL, Trivy, Scorecard, and dependency review stay GitHub-only: they scan built
Expand Down Expand Up @@ -207,6 +212,22 @@ just test-ci

After backend API changes, run `just app/codegen` to regenerate the app's TypeScript types.

### Generated Files

Do not hand-edit generated files. Change the source and regenerate. `just check` fails on a stale
copy.

| Output | Regenerate with |
| ------ | --------------- |
| `app/src/types/openapi.json` | `just backend/openapi` |
| `app/src/types/api.generated.ts` | `just app/codegen` |
| `docs/src/components/datamodel/*.generated.mdx` | `just backend/datamodel` |
| `backend/app/templates/emails/build/` (edit the MJML in `src/`) | `just backend/compile-email` |
| brand outputs: `*.generated.*` under `app/src/theme/`, `www/src/styles/`, `docs/src/styles/`, and `www/src/copy/research.generated.ts` | `just assets-sync` |

`app/src/components/base/ui/` is vendored react-native-reusables output: regenerate it with the RNR
CLI, do not refactor it by hand.

### Schema Changes

Drop or rename a column one release after the code stops reading it, never in the same release.
Expand Down
Loading