本卡屬 FR-091(母卡 CM-1690),能力點前置第四張。兩段式:第一段只查不改(歸屬表回寫,等首腦在卡上確認);第二段照確認後的表補 12 支套件。形狀照 CM-1728 已 commit 的 jedi-asset(jedi 89db991)。建議 model:Opus,effort:high——第一段的歸屬判斷會決定 21 支清單長什麼樣,判錯下游全錯。
決策者 2026-09-13 裁:21 支套件全部都要有 CAPABILITIES 清單,形式一致,不管那支套件的 API 有沒有用能力點守門。首腦原本只給「route 有守門的套件」開卡(1728 asset、1729 四支、1726 detection、1727 task-platform),漏了一件事:能力點有兩種用途——BE route 守門(套件 API 自己擋)與前端選單/頁面守門(ui_routes+route_capabilities,決定使用者看不看得到那個頁面)。像 issue、file-upload、remote-agent 的套件 route 沒有 capability_required,但 seed 檔裡有 issue-integrate-config.*、storage-config.*、remote-agent-manage.*,是前端在用。「這支套件的功能需要哪些能力點」要列的是全部,不只 BE 守的那些。
所以這張先把 seed 檔 134 個能力點逐一對到主人(哪支套件,或主專案哪個模組),做成一張表回寫。首腦確認後,再給還沒開卡的 12 支套件補清單。真的一個能力點都沒有的(例如 jedi-integrity 防竄改、jedi-ai-bot)也要有 CAPABILITIES = (),這樣主專案守衛 CM-1730 才能用同一種方式讀完 21 支。
scripts/init/04-seed-core.sql 134 筆能力點。113 筆符合 <resource>.<action> 且資源名用連字號;21 筆是舊命名:report(沒有點,Capability.__post_init__ 會炸)、cloud_integration.*(4)、notify_config.*(2)、flow_template.*(4)、system_config.*(3)用底線。這 21 筆是廢的還是還在用,第一段要查(grep 主專案 api/、FE repo src/、DB route_capabilities 有沒有綁)。require_capability("...") 用到的字串(首腦 grep):module-frame.* 52 處、project.* 7、survey.create 2、remote-agent-manage.create 2、security-policy.read/update、log-forwarding.read、ldap-config.create、feedback.export、report 2 處。主專案 route 在守套件的能力點(survey.create、remote-agent-manage.create、log-forwarding.read、ldap-config.create、security-policy.*)——這表示接線還在主專案的 route 裡,歸屬表要標出來。jedi_common.plugin.Capability 已在(jedi-common/jedi_common/plugin/capability.py),欄位 name/resource/action/description/default_roles,__post_init__ 驗 name == f"{resource}.{action}"。~/Projects/Billows/Audit-Manager/compliance-manager-fe/src 字串+DEV 庫 route_capabilities join ui_routes 有沒有綁到頁面)|判定(活的/疑廢/待裁)。134 列全列,不許省略。psql -h 192.168.50.188 -p 25432 -U cmmgr -d guidant_ai_dev,密碼查 .env DB_PASSWORD;SELECT c.name, r.uid, r.name FROM capabilities c JOIN route_capabilities rc ON rc.capability_id=c.id JOIN ui_routes r ON r.id=rc.route_id ORDER BY 1。沒綁任何頁面且 BE 沒人守的標「疑廢」。report 這種沒有點的例外處理方式一併建議)。plugin/contract.py 加 CAPABILITIES: tuple[Capability, ...],內容照確認後的歸屬表;description 照 seed 檔現有文字;default_roles 預設 Administrator。沒有能力點的寫 CAPABILITIES: tuple[Capability, ...] = (),不省略。plugin/__init__.py __all__ 加 CAPABILITIES;版面守衛 FROZEN_PUBLIC_SYMBOLS 加一項;加凍結集合測試(空 tuple 的套件測 CAPABILITIES == ())。jedi-log 兩個子插件各自的 plugin 都要有。capabilities 表是它的表。它的清單列的是「iam 自己的功能需要哪些能力點」(user/role/tenant/department/security-policy/ldap-config),不是全系統的。