本卡屬 FR-080(母卡 CM-1612),第 6 棒:持久層(jedi monorepo)。只掃不修。預期產出最低,但跑完才能宣稱這個套件掃過了。
掃問題單怎麼存進資料庫、怎麼查出來(28 檔):repository、資料模型、欄位轉換。
「某某套件掃過了」這句話要問範圍(手冊排計畫兩陷阱之一)。前五棒涵蓋了對外面、第三方、附件、業務邏輯,但租戶隔離的最後一道防線在這一層——model 有沒有掛 tenant scope、查詢有沒有繞過 RLS。FR-079 就是在這種「預期低產出」的地方查出 bulletin_org_units 整張表零 RLS。
jedi_issue/api/__init__.py:11-13 自稱「GitLab/GitHub 整合沒在用,約佔 58%」——首腦已證偽(宿主 feedback_service.py 六處實際呼叫)。工具已知盲點二(會被註解說服)的教科書形狀,FR-075 S2 即此。本套件 docstring 一律當待查證的宣稱。infra/issue/models/(4 檔)、infra/member/models/、infra/label/models/。要逐一確認有沒有 TenantScopedMixinModel,沒掛的要點名。scripts/init/02-schema.sql(出貨 schema)或 DEV 庫:不只看有沒有 policy,要看有沒有 ENABLE ROW LEVEL SECURITY,以及四個動作(select/insert/update/delete)的 policy 是否對稱。FR-079 查出 bulletin_org_units 連 policy 都沒有,同類要查 issues/issue_upload_files/成員/標籤相關表。infra/issue/repository/issue_repository.py(119 行)、issue_labels_repository.py(68 行)、issue_assignee_repository.py(67 行)、infra/label/repository/label_repository.py(113 行)、infra/member/repository/member_repostiory.py(92 行,注意檔名拼字有誤)。FR-079 重點 ④ 的形狀在本專案是通病:__dict__ 迴圈 + hasattr(model, field) 當白名單 + query entity 收 **kwargs。text()/f-string 組 SQL、order_by 或 sort 欄位可被呼叫端指定(SQL 注入面)。__init__ 不可 get_session(),要繼承 BaseRepositoryImpl 或自寫 @property session。注意 I3 棒發現 local_issue_attachment.py:63 有就地 IssueUploadFilesRepoImpl() 的用法,本棒要確認該 repo 的 session 取得方式。infra/label/mapper/label_mapper.py(68 行)、infra/member/mapper/member_mapper.py(33 行)——entity↔model 轉換時有沒有把內部欄位(tenant_id、內部 id、密碼雜湊之類)帶進對外 DTO。common/utils(2 檔)與 common/enum(2 檔)。 有沒有 uid 產生器(要確認是不是密碼學等級隨機,FR-079 的 B1 就查這個)、有沒有寫死的值。第一步:確認主 session 是 Opus 5 (1M context)(不是 Sonnet),並讀過首腦手冊第二節。
第二步:驗 scope 檔數,對上 28 才啟動:
cd ~/Projects/Jedicogy/module/jedi-python-package/jedi-issue && \
git ls-files -- jedi_issue/infra/issue/repository/ jedi_issue/infra/issue/models/ jedi_issue/infra/issue/mapper/ jedi_issue/infra/member/ jedi_issue/infra/label/ jedi_issue/common/ | wc -l
(28 檔中約 12 個是 __init__.py。數字對上 28 即可。)
第三步:把啟動指令交給決策者(你不能自己啟動)。/claude-security 帶 disable-model-invocation: true,模型叫不動;也不可以自己叫 Workflow 或自派研究員/verifier 代替它——面板票數是工具程式碼算的,手工拼的報告會宣稱一次沒跑過的驗證。刻意設計,撞到不要 debug、不要找繞路。