`migrate_from_*.py` のような一度きりの移行スクリプト(cron無し・移行完了済み)は、**接続先DB・認証方式の変化に取り残されて死んだDSNを抱える**。実行されないので気づかれないが、平文PWや廃止された認証方式を残す技術的負債になる。
## 典型パターン(anime migrate_from_vvv.py 実例)
- 存在しないDB参照: `postgresql://...@localhost:5432/shadow`(shadow DBもroleも不在・[[instinct-dead-db-connection-silent-data-drought]])
- 平文ハードコードPW: `shadow:shadow_dev_pass_2026@...`
- 廃止された認証: `127.0.0.1 trust`(後に[[instinct-pg-hba-trust-to-scram-safe]]でscram化され壊れる)
→ 3つ揃って「実行しても即エラーで動かない」状態に
## 直し方(最小修正)
- DSNを **Unixソケットpeer認証**に: `postgresql:///
- 環境変数で上書き可能に: `os.environ.get("XXX_DSN", "
- 移行先DBを実在するものに是正(例: anime本番は vvv_prod 共用・.envのDATABASE_URLで確認)
- 「一度きり移行・完了済み・cron無し」の旨をコメント明記
- コメント内にもPW文字列を残さない(「平文ハードコードPW」と伏せる)
## 判断
- cron無し・移行完了済みなら本番稼働に**無影響**(実行されない)→ PR化して負債解消・本番再起動不要
- セキュリティ監査(#248系)の文脈では平文PW排除として価値あり。`grep -rn '
## 関連
- [[instinct-tools-hardcoded-db-use-socket-peer]] — tools/*.pyの同種問題(stale_bot_alert/embed_videos)
- [[instinct-dead-db-connection-silent-data-drought]] — 死んだDB接続がデータ欠損を生む
- [[instinct-pg-hba-trust-to-scram-safe]] — trust廃止でこれら残骸が顕在化する
---
(migrated from local memory/instinct_migration_script_dead_dsn_residue.md)