| 1 | # Releases |
| 2 | |
| 3 | What each release shipped, so **"the previous release's schema"** is a fact rather than |
| 4 | a guess. Every migration must be one the previous release's binary can run against — |
| 5 | the rule, and why, is in [`architecture.md`](architecture.md#migrations). |
| 6 | |
| 7 | Add a row when a release is cut, in the same commit that bumps `Cargo.toml`. |
| 8 | |
| 9 | |
| 10 | |
| 11 | | 0.1.0 | 2026-07-31 | `1111df1` | *(none — no `migrations/` directory yet)* | |
| 12 | | 0.2.0 | 2026-09-04 | `7fb0b5e` | `…093030_create_orgs` · `…093031_create_users` · `…093032_create_memberships` · `…093033_create_sessions` · `…093034_add_org_bio` · `…093035_create_repositories` · `20260828120000_create_tokens` · `20260829090000_add_repository_recency` | |
| 13 | | 0.3.0 | 2026-09-06 | `768d679` | *(none new — same set as 0.2.0)* | |
| 14 | | 0.4.0 | 2026-09-06 | `219c396` | `20260906120100_add_repository_import` · `…120200_create_issues` · `…120201_create_issue_comments` · `…120300_create_push_events` · `…120301_create_webhooks` · `…120302_create_webhook_deliveries` · `…120400_add_repository_archived` · `…140100_add_token_lifecycle` · `…140200_create_labels` · `…140201_create_issue_labels` · `…180100_create_pull_requests` · `…180101_create_pull_request_comments` · `…190000_create_pull_request_labels` | |
| 15 | | 0.5.0 | 2026-09-10 | *(this commit)* | `20260906120200_create_issues` · `20260908090500_create_password_resets` | |
| 16 | |
| 17 | The `…` stands for the leading `202609061` / `20260804` of the timestamp; the full file |
| 18 | names are in `migrations/`. |
| 19 | |
| 20 | ## Unreleased |
| 21 | |
| 22 | Nothing: every migration in `migrations/` shipped with 0.5.0. |
| 23 | |
| 24 | ## Where the last release's set actually lives |
| 25 | |
| 26 | The **cumulative** file list of the newest released version is a `const` — |
| 27 | `RELEASED_0_4_0` in `src/infrastructure/database_compat_tests.rs`. That is what the |
| 28 | replay test reads, so it is the authoritative copy; a test asserts it is a prefix of |
| 29 | `migrations/` in timestamp order, which catches a typo and catches a migration |
| 30 | back-dated in front of a released one. |
| 31 | |
| 32 | The table above is the human record and must be updated to match. When 0.5.0 is cut: |
| 33 | add its row, rename the `const` and replace its contents with the full cumulative list |
| 34 | at that tag. |