FR-090 · 需求索引 · 本頁由 build 掃資料夾生成
✅ 全案 Done,隨 v1.20.0 出版(2026-09-15)。七棒全數落地:接線收成 core/plugins/<pkg>.py 一支一檔、空殼清理、port 實作歸位、iam 宿主側收斂、補審計暱稱統一走 D8、DI 瘦身改從套件取用口拿 service(第 6 棒 CM-1696 拆三子卡:1749 套件開口、1750 主專案 39 處改走、1751 文件對齊)。母卡 CM-1682 已收。
後端模組化(FR-069/FR-080)把功能一支支搬進 jedi-* 套件,但主專案這邊沒統一清場:有的目錄空了還留著、有的「套件需要主專案提供的東西」(port 實作)放在 app/ 而不是 infra/、有的用轉發殼包住套件、有的用 wrapper 在外面補欄位。本案把主專案側收成 jedi-asset 那一種形狀,是 FR-089 的第二段,必須先於 18 支套件套用——18 支每支都要確認主專案有沒有重複給工廠/port,主專案先清乾淨卡才寫得準。
| 棒 | 卡 | 做什麼 | 狀態 |
|---|---|---|---|
| 1 | CM-1683 | 空殼清理:app/、api/ 下 8 個空目錄、2 個零呼叫者 dto、1 個只剩註解的 __init__ 全刪(零風險,純刪) |
✅ Done |
| 2 | CM-1684 | port 實作歸位:app/ 下五處實作 jedi 套件 port 的 adapter 搬到 infra/<pkg>/,比照 jedi-asset;test_module_boundaries.py 加守衛擋回流(零邏輯改動) |
✅ Done |
| 3 | CM-1686 | iam 宿主側收斂:app/auth/ 六檔與 user_auth_provider 薄殼收成 infra/iam/+core/iam_wiring.py;jedi-iam 開 identity port(IdentityAdapters 補 identity 欄位、UserService/RoleService 收 identity 參數)讓補暱稱回套件。含套件異動,走 path dependency 不發版 |
✅ Done |
| 4 | CM-1687 | 補審計暱稱統一走 D8:common/util/audit_nickname.py 改包 IdentityContext,手寫複本與 flow_engine 改呼叫它,主專案零處自己查 UserDomainService 換暱稱;統一規則寫進 SOP。依賴第 3 棒 |
✅ Done |
| 6 | CM-1696 | 主專案 DI 瘦身:不再重複建套件 service,改從套件取用口拿。拆三子卡執行——CM-1749 五支套件開 host_services() + 守衛擋 di_containers/ 自建;CM-1750 主專案 39 處(DI 內 33、route 內 6)改走取用口,加共用 helper core/plugins/_host.py::package_service() 與第二條守衛擋直指套件 container;CM-1751 SOP 與插件解剖兩份教學文件對齊 |
✅ Done |
| 7 | CM-1737 | 三支接線收進 core/plugins/:ai-bot/ai-dashboard/remote-agent 從 api/<mod>/create_module()(REGISTERED_APPS 驅動)改成 core/plugins/<pkg>.py 三段+PLUGINS 加三列;收完守衛拿掉 _CAPABILITY_PACKAGES_OUTSIDE_PLUGINS,主專案側 21 支同形。remote-agent 留主專案的 binary 端點走 mount_api=False 逃生門掛同一 bp。零行為變更 |
✅ Done(首腦驗收:乾淨 worktree 100 passed、18 條實打、拔掉測試路由歸零) |
core/plugins/<pkg>.py(一個檔看完優先於分層純度)。例外是「別的層也在 import 它」的 adapter,留原地並在守衛白名單登記誰在用core/plugins/__init__.py 的 PLUGINS 清單,由 core/app_factory.py 一個迴圈逐支 mount()app/<pkg>/ 整個刪,不留空殼host_services(app) 拿(DI 內走 package_service()、route 內直呼),不自己組也不直指套件的 container母卡開卡時寫「補審計暱稱自己寫的 7 處」。第 4 棒開卡前實查:是三套並存,不是七處各自獨立——common/util/audit_nickname.py 一套、三支手寫複本一套、flow_engine 自己一套;七個呼叫點分屬這三套。修法因此是「保留 audit_nickname.py 一支改包 IdentityContext,其餘改呼叫它」,不是七處逐一改寫。
core/plugins/<pkg>.py(含 _host.py 的 package_service())、common/util/audit_nickname.py、test/test_module_boundaries.py;branch feature/FR-075~/Projects/Jedicogy/module/jedi-python-package/jedi-iam/(第 3 棒);branch feature/FR-075卡片內容(決策紀錄、驗收條件)以 Notion 為準,本頁只記座標。
| 關係 | 卡號 | 標題 | 狀態 |
|---|---|---|---|
| 母案 | CM-1682 | FR-090 主專案側殘留收斂——套件上移後留在 app/ 的空殼、放錯層的 port 實作、轉發殼與 wrapper 統一收成一種形狀(四棒,實作) | — |
| 子卡 | CM-1683 | 第 1 棒 空殼清理——8 個空目錄、2 個零呼叫者 dto、1 個只剩註解的 init | Done |
| 子卡 | CM-1684 | 第 2 棒 port 實作歸位——app/ 下五處 adapter 搬到 infra/ |
Done |
| 子卡 | CM-1686 | 第 3 棒 iam 宿主側收斂——app/auth/ 收成 infra/iam/+core/iam_wiring.py,jedi-iam 開 identity port | Done |
| 子卡 | CM-1687 | 第 4 棒 補審計暱稱統一走 D8——audit_nickname.py 改包 IdentityContext,複本改呼叫它 | Done |
| 子卡 | CM-1696 | 第 6 棒 主專案 DI container 瘦身——不再重複建套件 service,改從套件取用口拿;拆三子卡執行 | Done |
| 子卡 | CM-1749 | 第 6-1 棒 套件開「宿主取用口」——asset 定形 host_services(),upload_file/system_core/survey/notification 照抄 | Done |
| 子卡 | CM-1750 | 第 6-2 棒 主專案 39 處取套件 service 改走 host_services() 取用口,加兩條守衛 | Done |
| 子卡 | CM-1751 | 第 6-3 棒 文件對齊——extraction-sop §5、plugin-anatomy 新手教程 ④ 改寫成從取用口拿 | Done |
| 子卡 | CM-1737 | 第 7 棒 三支接線收進 core/plugins/——ai-bot/ai-dashboard/remote-agent 改成三段形狀,主專案側 21 支同形 | Done |