FR-121 子卡 .4,.1/.2/.3 全部驗收通過後才做。
session/database/db_mw.py:to_local()/to_utc() 刪 naive 分支(naive 一律視為程式錯誤,raise 或 log warning),DATETIME_FIELDS 自動處理保留。CM-2245 若已加「UTC 欄位清單」過渡邏輯,整段拆掉。git grep -n 'datetime.utcnow\|datetime.now()' -- '*.py' 全 monorepo+BE(不含測試),凡寫進 DB 的改 datetime.now(timezone.utc);列清單進回寫。test/):連 DEV 跑 information_schema 斷言 timestamp without time zone 欄位數=0(允許明列的例外清單,預設空)。突變:把任一表改回 → 紅。SELECT table_name,column_name FROM information_schema.columns WHERE data_type='timestamp without time zone' AND table_schema='<本卡 schema>' ORDER BY 1,2;,逐欄判斷寫入端是本地(Asia/Taipei)還是 UTC(grep ORM default/server_default/寫入程式;已知 UTC 寫入:flow-engine 三張、iam 改密碼兩張),列表進回寫。判不了的先回寫問首腦,不猜。ALTER TABLE <t> ALTER COLUMN <c> TYPE timestamptz USING <c> AT TIME ZONE 'Asia/Taipei'(UTC 寫入的欄用 'UTC')。表屬套件放該套件 migrations/(先看既有放法),主線表放 scripts/sql/;照 sql-migration 規範(檔頭 Date、每句註解、schema_migrations、GRANT 不變)。只套 DEV。DateTime(timezone=True);寫入 default 改 datetime.now(timezone.utc) 或 func.now()。git grep 這些欄位名:view、SQL 字串、::date、date_trunc、>= now() 比較——確認型別改後語意不變(view 與 SQL 字串是守衛盲區)。SET TIME ZONE 'UTC' 或改容器 TZ)再讀一次仍正確;受影響套件測試帶 PYTHONPATH 全綠;BE 三支守衛。PYTHONPATH=/Users/chouraymond/Projects/Jedicogy/module/jedi-python-package/.claude/worktrees/jedi-wt-fix-security/jedi-integrity:/Users/chouraymond/Projects/Jedicogy/module/jedi-python-package/.claude/worktrees/jedi-wt-fix-security/jedi-compliance-audit。.env(localhost:5432)。190 只讀。