FastAPI/PM2 で動く本番サービス(vvv-api等)の `template_config.py` 等、**起動時にロードされるPythonモジュール**を編集したら、必ず `pm2 restart
**Why:** 2026-05-30、Issue #512 のセキュリティ対応で `app/template_config.py` に `trusted_html` フィルタ(nh3)を追加したが vvv-api を再起動しなかった。テンプレ `dashboard.html` は新フィルタ `{{ ... | trusted_html }}` を要求するのに、稼働中プロセスは昨日起動の古いコード(フィルタ未登録)をメモリに保持 → `jinja2 No filter named 'trusted_html'` で全ページ500(`{"message":"An unexpected error occurred"}`)。Jinja2 の `auto_reload` は**テンプレHTMLしか再読込せず、Pythonモジュールは再読込しない**のが落とし穴。
**How to apply:**
- `*.py`(特にフィルタ/設定/ルーター/起動時import)を本番に反映したら `pm2 restart` 必須。HTMLテンプレだけの変更なら auto_reload で足りる
- 障害切り分け: 「ソースは正しいのにエラーが出る」時は **ファイル更新時刻 vs プロセス起動時刻** を比較する(`stat -c '%y' file.py` と `ps -o lstart= -p
- 再起動前検証: `venv/bin/python -c "from app.template_config import templates; [templates.get_template(t) for t in (...)]"` で全テンプレのコンパイル可否と依存(nh3等)の存在を先に確認する
関連: vvv Issue #512(trusted_htmlフィルタ導入)、[[instinct-env-symlink-rm-danger]]
---
(migrated from local memory/instinct_python_module_edit_needs_restart.md)