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> |
||
|---|---|---|
| .. | ||
| 2026-06-02-db-drift-reconcile.sql | ||
| README.md | ||
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 |
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. |