The `tasks` Postgres on CT 102 was bootstrapped years ago with `drizzle-kit push`, which writes schema but skips the ledger. As of today the ledger contained zero rows and the schema was missing `markdown_backlog_items` + `cursor_sync_mappings` (migration 0002 ran on neither code path). Migration 0007's ALTER on markdown_backlog_items had silently failed because of this; audit_log was added manually. The one-shot at docs/operations/2026-06-02-db-drift-reconcile.sql created the two missing tables at the final post-0007 shape (skipping 0002's now-obsolete FK-to-objects intermediate state, which 0003 would have immediately rewritten anyway) and stamped all 8 migrations with their sha256 + journal `when` so drizzle's `lastDbMigration.created_at < migration.folderMillis` gate treats them as already applied. `pnpm db:migrate` is now a clean no-op against this DB. Future migrations work normally. Co-authored-by: Cursor <cursoragent@cursor.com>
14 lines
749 B
Markdown
14 lines
749 B
Markdown
# Operations runbooks
|
|
|
|
One-shot scripts and notes for operational fixes that aren't part of the
|
|
normal app flow. Each file is dated so the chronology is obvious.
|
|
|
|
Anything in this folder is **historical**. Don't re-run scripts here
|
|
without reading them first — most assume a specific broken state and
|
|
will fail or corrupt a healthy one.
|
|
|
|
## Inventory
|
|
|
|
| Date | File | What it fixed |
|
|
|------|------|---------------|
|
|
| 2026-06-02 | [`2026-06-02-db-drift-reconcile.sql`](./2026-06-02-db-drift-reconcile.sql) | Reconciled CT 102 `tasks` DB after years of `drizzle-kit push` left the migration ledger empty. Created the two tables that had never made it in (`markdown_backlog_items`, `cursor_sync_mappings`) and stamped all 8 migrations as applied. |
|