diff --git a/TODO.md b/TODO.md index 0924e46b..3585b647 100644 --- a/TODO.md +++ b/TODO.md @@ -707,6 +707,25 @@ outside the example's new README: ## Backburner +- [ ] **Four foreign keys are over Postgres's 63-character limit and re-create on every `db:push`.** + Found 2026-08-19 while pushing `chat_notification_prefs`. Not a blocker and not causing trouble: + eight extra statements per push, no prompt, no data touched — the same harmless churn already + documented for `pk_music_now_playing`, and recorded here only so the next person reading a push + plan knows it is not their change. + + command_hq_session_tags_session_row_id_command_hq_sessions_id_fk 64 + command_hq_watcher_fires_session_row_id_command_hq_sessions_id_fk 65 + bitcoin_wallet_frozen_utxos_wallet_id_bitcoin_wallet_wallets_id_fk 66 + bitcoin_wallet_chain_cache_wallet_id_bitcoin_wallet_wallets_id_fk 65 + + The fix is the one `src/databases/CLAUDE.md` already prescribes and these four missed — declare + them with `foreignKey({ name: 'fk_…', … })` under 63 characters, exactly as + `fk_user_integrations_server_integration` was. **Renaming a constraint is not a data change**, but + it does mean one push where the old name drops and the new one is added, so do it deliberately + rather than folded into an unrelated change. Note the two bitcoin-wallet ones live in that + plugin's own repository (`plugins/bitcoin-wallet/db/schema.ts`), so this spans two repos and the + plugin half only churns on a host where that plugin is installed. + - [ ] **Music tagging feature** (`/music`, Mp3tag-inspired). v1 was scoped as a two-panel workspace — file browser left, table right, single "Load" context-menu item flattening audio files into the table. Discarded before completion; would need `GET /file-browser/flatten-audio`, a