todo: four foreign keys churn on every push, deferred not fixed

Found while pushing chat_notification_prefs. Harmless — eight extra
statements, no prompt, no data touched — but the database CLAUDE.md told
the next person to expect only the two pk_music_now_playing lines and to
treat anything else as their own change, which is no longer true. Both
corrected; the fix itself is deliberately not done.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-19 22:11:19 +00:00
co-authored by Claude Opus 5
parent 989c15e437
commit c982d82dde
+19
View File
@@ -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