建議 model:Opus,effort:high——全案回歸面最大的一張,改的是每個 @transaction 必經的路,壞法是「查不到」不是報錯。本卡由 CM-1559 拆出,決策者 2026-09-14 裁延後至 1.20.0 之後、SaaS 上線前必做。前置:.1a CM-1767、第二刀 CM-<第二刀卡號>。動手前先回寫本卡問首腦要不要現在做——這張沒有可信的 DEV 驗證環境(見下)。

問題是什麼(白話)

session_scope() 在完全沒有使用者身分時(db.py:115-119 的 elif is_pg: 分支)直接給超級管理員。任何在沒身分下跑的 @transaction 都以最高權限執行:漏掛 JWT 檢查的路由、公開端點、沒還原 context 的背景執行緒全部踩到。正解是「繞 RLS 應該是一個動作,不是一個預設」——無身分改成拒絕(fail-closed),真的需要跨租戶的路徑各自明確宣告。

為什麼延後:要關的洞落地版目前打不到(盤點沒找到現存「沒掛 JWT 又查 RLS 表」的路由);而改壞的路徑有十幾條且靜默;Drive 兩張表在 DEV 的擁有者是 cm_app(表擁有者不受 RLS 約束),DEV 對 Drive 路徑一定假綠、要 STG 才驗得出,而 STG 是上版動作。

依賴 fail-open 的路徑(CM-1559 第一步盤點 2026-09-06,動手前重跑一次核對)

在哪裡

~/Projects/Jedicogy/module/jedi-python-package/jedi-common/jedi_common/session/database/db.py:115-119   elif is_pg 無 context 分支(改 fail-closed+WARNING log)
~/Projects/Billows/Audit-Manager/compliance-manager-be/core/scheduler.py                                 其餘 6 支排程接 system_context
~/Projects/Jedicogy/module/jedi-python-package/jedi-iam/jedi_iam/middleware/jwt_mw.py:87               JWT 解析改窄提權
~/Projects/Jedicogy/module/jedi-python-package/jedi-iam/jedi_iam/infra/elevated_session.py:38          窄提權樣板
(A/B/C 其餘檔案見上段行號)

怎麼修(順序不能反)

要寫測試

手測