Commit Graph
1 Commits
Author SHA1 Message Date
ZacharyZhang-NY 4cfb926971 refactor(schema): split 852-LOC migration ledger into era files
schema.ts had grown to 852 LOC — migration history is append-only, so
the file gets bigger every release. Organize by era without fragmenting
the history.

| File                              | LOC | Contents                              |
|-----------------------------------|-----|---------------------------------------|
| schema.ts                         | 195 | helpers, runMigrations,               |
|                                   |     | ensureOptionalColumns, seed, init     |
| migrations/types.ts               |  47 | Migration/Deps types, column/table    |
|                                   |     | helpers                               |
| migrations/v1-v15.ts              |  50 | createMigrationsV1V15 — v1..v15       |
| migrations/v16-v25.ts             | 157 | createMigrationsV16V25 — v16..v25     |
| migrations/v26-v34.ts             | 158 | createMigrationsV26V34 — v26..v34     |
| migrations/v35-v37.ts             | 326 | createMigrationsV35V37 — three heavy  |
|                                   |     | table-rebuilds (runs/tasks/skills)    |

Each era exports a factory `createMigrationsVxxVyy(deps)` that takes
`{ db, readAll }` — migrations' `fn` bodies captured those names via
closure in the original; factory pattern preserves the closure shape
byte-for-byte while making the dependency flow explicit.

Master `schema.ts` imports all four and concatenates them into the
final ascending list. Order preserved including the quirky v31 -> v33
-> v32 -> v34 sequence that predated my changes.

All 37 migrations' `version`, `name`, and `sql`/`fn` bodies are
byte-for-byte identical. No behavior change; 578 tests green.

`database-base.ts` (449 LOC) kept as-is. It's a thin linear pass-
through facade — every method is 1–3 lines. Splitting a facade of
this kind by forcing mixins or abstract classes costs more than it
saves. Not a god component in the Linus sense (one responsibility:
delegate); flagged here so future readers know it's deliberate.
2026-04-17 16:45:03 -04:00