Decisions
These pages are the register of v2 decisions. They moved here from the Google doc [Register] v2 decisions and working rules on 2026-10-07 (D28), with their numbers unchanged. The register's working rules moved to How we work.
Together with the working rules, the accepted decisions outrank every other v2 doc (order of authority). At the start of every working session, read the working rules and every decision newer than the last one you worked to.
- Oldest first. Each page says what was decided, why, and what it changes. D2 to D9 record decisions made before the register existed.
- Accepted decisions are in force. Since D28, a decision is accepted when zuki merges the pull request that adds its page (how a decision is made).
- An accepted page is never rewritten. To change it, a new decision supersedes it, and only the old page's status line changes, to "Superseded by Dn". Typos and broken links can be fixed in place.
All decisions
Section titled “All decisions”| Decision | Status | |
|---|---|---|
| D1 | Decisions live in this register | Accepted 2026-10-02 · Partly superseded by D27 (the register moves at the M0 exit check) |
| D2 | v2 is a rebuild, with a one-shot migration rehearsed nightly | Accepted 2026-09-30 · Partly superseded by D17, D19, D20, D21 and D25 |
| D3 | Business rules live in Postgres | Accepted 2026-09-30 |
| D4 | No ORM; the Supabase CLI owns the schema | Accepted 2026-10-01 |
| D5 | Monorepo, hosting and environments | Accepted 2026-10-01 |
| D6 | Biome, Lefthook and Conventional Commits | Accepted 2026-10-01 |
| D7 | Indonesian first, English optional | Accepted 2026-10-02 |
| D8 | The design system stays inside apps/web | Accepted 2026-10-01 |
| D9 | Schema V13 business rules and loophole fixes | Accepted 2026-09-30 |
| D10 | Errors from Postgres use stable keys | Accepted 2026-10-02 |
| D11 | Migration files stay editable until cutover | Accepted 2026-10-02 |
| D12 | Database tests run on the real Supabase stack | Accepted 2026-10-02 · Partly superseded by D25 (the stub clause) |
| D13 | New Supabase keys and session checks | Accepted 2026-10-02 |
| D14 | Storage paths follow the owning row | Accepted 2026-10-02 |
| D15 | Personal data: retention and anonymizing | Accepted 2026-10-02 |
| D16 | Backups and MFA | Accepted 2026-10-02 |
| D17 | Migration steps before module pages | Accepted 2026-10-02 · Partly supersedes D2's module order; Partly superseded by D25 |
| D18 | Accepted differences in reconcile | Accepted 2026-10-02 |
| D19 | Tests sit where the rules are | Accepted 2026-10-02 · Partly supersedes the testing guide |
| D20 | Cutover when the gate is met, not on a date | Accepted 2026-10-02 · Partly supersedes D2's calendar |
| D21 | Rollback by re-entry, decided on Saturday | Accepted 2026-10-02 · Closes OQ15 |
| D22 | packages/db-types holds types only | Accepted 2026-10-02 |
| D23 | Engineering docs move after cutover; product docs stay in Drive | Accepted 2026-10-02 · Superseded by D27, except that product and process docs stay in Drive |
| D24 | Sentry: one project per app | Accepted 2026-10-02 |
| D25 | M0 is rebuilt from an empty folder, on one timeline | Accepted 2026-10-05 · Partly supersedes D2 (M0 as delivered), D12 (the stub clause) and D17 (its starting point); Partly superseded by D27 (how docs files enter the repository) |
| D26 | main is guarded locally until the organization moves to GitHub Team | Accepted 2026-10-05 · Superseded by D28 |
| D27 | apps/docs is the source of truth, written before tests and code | Accepted 2026-10-06 · Supersedes D23, except that product and process docs stay in Drive; Partly supersedes D1 (when the register moves) and D25 (how docs files enter the repository); Partly superseded by D28 (the agent fork, and when the register moves) |
| D28 | We work in GitHub: Team plan, agents in the repository, docs in apps/docs | Accepted 2026-10-07 · Supersedes D26 and the agent fork in D27; Closes OQ23 |
| D29 | Indonesian-first text is built in apps/web (option A1) | Accepted 2026-10-07 · Closes OQ17 |
| D30 | Error keys are a Postgres enum | Accepted 2026-10-08 · Closes OQ24 |
Open questions and change requests
Section titled “Open questions and change requests”They are issues now (D28): open questions, change requests and decision proposals. Those raised before the move keep their register IDs, OQ1 to OQ24 and CR1, in their issue titles.
Closed before the move: OQ3 by D5, OQ15 by D21, OQ17 by D29 and OQ23 by D28; OQ12 in part by D16. The monorepo spec's question about Cloudflare Access for team leads is closed by D23: apps/docs will hold engineering docs only.
The register's history until the move is in its changelog.