FR-091 · 需求索引 · 本頁由 build 掃資料夾生成

FR-091 18 支 jedi-* 套件套用標準形狀

🟢 28 卡全 Done、21 支已推 Nexus 1.0.0(2026-09-13)。母卡 CM-1690。arc review CM-1738 與六張修正卡歸 FR-089 收口;套件版號自 1.0.0 起算(oscal-v2 2.3.0)已發版,主體進版等令。

狀態:詳見下方 文件 0 份

FR-091 一頁看完

§1

結論

  1. 把 FR-089 用 jedi-asset 定出來的標準形狀套到其餘 18 支有 plugin.py 的套件:plugin/ 五檔、api/ 拆 guards 與 routing、取用執行期組件叫 runtime()、logger 掛 common.jedi_<pkg>、entity 一律 dataclass、註解只留為什麼與陷阱。
  2. identity port 只給 API 有吐 created_user_name 的套件(survey、detection、task-platform、compliance-audit、log),其餘不塞用不到的欄位。
  3. 主專案側改動不在本案,由 FR-090 第 5 棒統一收成 core/plugins/<pkg>.py
  4. oscal-v2 與 common 沒有 plugin.py,只做註解與 logger,待決策者裁。
§2

📊 總進度

套件 卡號 狀態
第一批 ai-bot/notification/integrity/remote-agent/ai-dashboard CM-1691~1695 ✅ Done(2026-09-12 首腦驗收)
第二批 bulletin/file-upload/system-core CM-1697~1699 ✅ Done(2026-09-12 首腦驗收;file-upload 留一支主專案 URL 守衛待收尾卡修)
第二批 evidence-classification/license-runtime(含主專案側收進 core/plugins/) CM-1700~1701 ✅ Done(2026-09-12 深夜首腦驗收)
收尾 asset/bulletin 疆界守衛 PKG_ROOT、主專案 file-upload URL 守衛、第一批三支 harness --smoke CM-1702 ✅ Done(2026-09-12 深夜首腦驗收,三件含突變)
第三批 issue/log/flow-engine/survey CM-1712~1714、1716 ✅ Done(2026-09-13 首腦驗收)
第三批 compliance-audit(identity port+G 組雙接線) CM-1715 ✅ Done(2026-09-13 驗收棒十步全過)
大卡 iam CM-1725 ✅ Done(2026-09-13 首腦驗收,含補三項)
大卡 detection(identity+G 組) CM-1726 ✅ Done(2026-09-13 首腦驗收)
大卡 task-platform CM-1727 ✅ Done(2026-09-13 首腦驗收)
能力點前置 jedi-asset 定形 CAPABILITIES 清單+jedi-common 共用型別 CM-1728 ✅ Done(2026-09-13 首腦驗收,jedi 89db991)
能力點前置 bulletin/system-core/notification 補清單;survey 寫死字串收 config CM-1729 ✅ Done(2026-09-13 首腦驗收,退回一次後)
能力點前置 主專案守衛掃 PLUGINS 對 seed 檔(收口) CM-1730 ✅ Done(2026-09-13 首腦驗收;五條守衛、127 筆零未歸類)
版面殘留 jedi-integrity 頂層 12 支業務檔歸三層 CM-1731 ✅ Done(2026-09-13 首腦驗收,退回一次後)
版面殘留 file-upload/issue/notification 頂層 ports/ 併 domain、issue tests 搬根 CM-1732 ✅ Done(2026-09-13 首腦驗收)
版面殘留 api/ 四件統一:license-runtime/remote-agent/log forwarding CM-1733 ✅ Done(2026-09-13 首腦驗收;schema 缺口三支待裁)
能力點前置 全套件普查:134 筆歸屬表→12 支補清單 CM-1734 ✅ Done(2026-09-13 首腦驗收;21 支 80 筆)
收尾 oscal-v2 ports 併 domain+logger;common 清註解+logger(不建 plugin) CM-1735 ✅ Done(2026-09-13 首腦驗收)
文件 PM 白話說明頁+anatomy 補更新 CM-1736 ✅ Done(決策者 2026-09-13 看過)
待裁 oscal-v2/common
§3

需求討論紀錄

  • 2026-09-13 首腦第 3 棒(能力點改全列):決策者裁 21 支全部要有 CAPABILITIES、形式一致。首腦原判準「只給 route 有守門的套件開卡」漏了能力點的另一半用途(前端選單/頁面守門 route_capabilities),issue/file-upload/remote-agent 等 API 不守但 seed 有它們的能力點。開 CM-1734 兩段式(先 134 筆歸屬表等確認,再補 12 支;seed 有 21 筆舊命名含 report 沒有點,處置一併建議),1730 改「每支必帶、空 tuple 允許」。
  • 2026-09-13 首腦第 3 棒(版面):決策者打開 jedi-integrity 看到頂層 12 支業務檔平鋪。首腦掃 21 支:只有 integrity 平鋪(iam 另一支 security_policy.py);五支開了頂層 ports/(file-upload/issue/notification/oscal-v2/iam,iam 與 domain/ports.py 雙軌);jedi-issue 的 tests 在套件內靠 exclude 擋 wheel。這些是 FR-069 早期就近做的,FR-091 前三批沒列檢查項。SOP §4.3 補三條(頂層不平鋪/port 只放 domain/ports.py/tests 在套件根),開 CM-1731(integrity)、CM-1732(三支 ports+issue tests),1725 append iam 兩處。oscal-v2 無 plugin 待裁。另外 .venvdistCLAUDE-SECURITY-* 是 gitignore 的產物不是版控內容,CLAUDE-SECURITY 目錄全 monorepo 二十幾份,建議 FR-088 收口時一次清。
  • 2026-09-13 首腦第 3 棒:決策者問「能力點(capability)是不是定義在套件內、怎麼檢查」。查明:套件只宣告預設名字(asset 六個常數;survey/detection 直接在 route 寫死字串),判定全在主專案 core/plugins/_host.py 填進去的 common.authz.require_capability(實體 jedi_iam.authz),這是標準 ports and adapters,不動。真正缺口是能力點列表 seed 在主專案 04-seed-core.sql、套件不帶、兩邊靠人對齊沒守衛。決策者裁:能力點跟著套件走,但「migrate 時自動補 row」是大 arc(seed 檔 127 對寫死整數 role_capabilities、Administrator 初始持有、ui_routes)另開 FR;FR-091 先做前置三卡 CM-1728~1730(套件列清單→回補→主專案守衛),1726/1727 各 append 一段把 detection 寫死字串與 task-platform 清單併進去。config 不獨立成檔,留在 contract.py(契約要一處看完)。
  • 2026-09-13 首腦第 2 棒:第三批開卡。改判兩條 STATE §2 裁示:log 不開新 identity port(forwarding 已有 IUserNameResolver);survey 的 repo JOIN 已在 CM-1512 拔掉,剩下是把 IAuditNicknameEnricher/participant 名冊/jedi_iam 直接 import 三條收成 D8 identity。flow-engine 與 compliance-audit 主專案接線共用 api/flow_control/__init__.py,收斂全交 CM-1715 G 組,兩張錯開派。
  • 2026-09-12 首腦第 2 棒:第二批開卡。evidence-classification 與 license-runtime 的主專案接線不在 CM-1689 的 11 支內,卡上加 G 組順手收進 core/plugins/;第一批教訓(wheel 假綠、importlib、git commit -- <路徑>、harness --smoke、AST 掃 import)固定寫進每張卡。
  • 2026-09-12 決策者:全部做法都統一;先做主專案側(FR-090)再做 18 支;identity port 有吐審計欄位才開;DI container 瘦身排在 18 支後面(FR-090 第 6 棒 CM-1696)。
§4

座標

§5

Notion 卡

卡片內容(決策紀錄、驗收條件)以 Notion 為準,本頁只記座標。

關係 卡號 標題 狀態
母案 CM-1690 FR-091 18 支 jedi-* 套件套用 jedi-asset 定的標準形狀——三批各 5 支+3 支大卡
子卡 CM-1691 第一批 jedi-ai-bot Done
子卡 CM-1692 第一批 jedi-notification Done
子卡 CM-1693 第一批 jedi-integrity Done
子卡 CM-1694 第一批 jedi-remote-agent Done
子卡 CM-1695 第一批 jedi-ai-dashboard Done
子卡 CM-1697 第二批 jedi-bulletin Done
子卡 CM-1698 第二批 jedi-file-upload Done
子卡 CM-1699 第二批 jedi-system-core Done
子卡 CM-1700 第二批 jedi-evidence-classification(含主專案側收進 core/plugins/) Done
子卡 CM-1701 第二批 jedi-license-runtime(含主專案側收進 core/plugins/) Done
子卡 CM-1702 收尾小卡:asset/bulletin PKG_ROOT、主專案 file-upload URL 守衛、第一批三支 harness --smoke Done
子卡 CM-1712 第三批 jedi-issue Done
子卡 CM-1713 第三批 jedi-log Done
子卡 CM-1714 第三批 jedi-flow-engine Done
子卡 CM-1715 第三批 jedi-compliance-audit(開 identity port+G 組收 flow-engine/compliance-audit 雙接線) Done
子卡 CM-1716 第三批 jedi-survey(暱稱收成 D8 identity+順收 evidence-classification 死引用) Done
子卡 CM-1725 大卡 jedi-iam Done
子卡 CM-1726 大卡 jedi-detection(開 identity+G 組收 core/plugins/detection.py) Done
子卡 CM-1727 大卡 jedi-task-platform(先定形等令;task 接線收 core/plugins/task.py) Done
子卡 CM-1728 能力點清單定形:jedi-asset contract.py 收 CAPABILITIES+jedi-common 共用型別 Done
子卡 CM-1729 能力點回補:bulletin/system-core/notification 補清單,survey 23 處寫死字串收 config Done
子卡 CM-1730 主專案能力點守衛:掃 PLUGINS 每支 CAPABILITIES 對 seed 檔(收口) Done
子卡 CM-1731 jedi-integrity 版面歸位:頂層 12 支業務檔歸 domain/app/infra,舊路徑 re-export Done
子卡 CM-1732 版面殘留收斂:file-upload/issue/notification 頂層 ports/ 併 domain/ports.py,issue tests 搬套件根 Done
子卡 CM-1733 api/ 內部形狀統一:license-runtime/remote-agent/log forwarding 平鋪 route 與 serializers 收子目錄,forwarding plugin 拆五檔 Done
子卡 CM-1734 能力點全套件普查與回補:134 筆歸屬表→12 支補 CAPABILITIES(沒有的空 tuple) Done
子卡 CM-1735 收尾小卡:oscal-v2 ports 併 domain+logger 統一;common 清註解+logger(兩支無 plugin,不建五檔) Done
子卡 CM-1736 給 PM 的白話說明頁 for-pm.md+anatomy 補 09-13 之後更新 Done