FR-103 交接現況(living,就地更新)

這個檔只描述「此刻」。 每棒只 Edit 變動的節,決策脈絡與教訓寫進 fr103-LOG.md(append-only)。

最後更新:2026-09-16 接手首腦收工(七棒全收;後續 arc FR-104/105/106 見各自 README)


§0 接手讀序(先懂需求再看現況)

  1. 本檔 §1 原始需求 ← 先讀,不懂 WHY 會把「清乾淨」當成目標而忽略風險
  2. 本檔 §2-§5(現況/待辦/紅線)
  3. fr103-LOG.md Block 1 的「推翻了什麼」與「教訓」← 必讀, 首腦在這個 arc 判斷錯三次,形狀相同
  4. 母卡 CM-1829
  5. 要動哪一棒才讀那張子卡

冷接自檢題(答不出來就回頭讀,不要開工):

  • 為什麼 views/workflow/ 不能整包刪?
  • workflow.* 那四個能力點為什麼刻意留著?
  • jedi-iam 1.2.0 發版前為什麼「乾淨環境跑不起來」?(已解,見 LOG Block 3)

§1 原始需求(WHY)

決策者 2026-09-16 問:「為什麼我看還有很多 route 在主專案?我以為像 system_config 等東西應該全部抽出去了」,接著說明動機:

「我要的就是乾淨的 code,因為我後面要去開發新功能了,不要再留一堆無意義的東西。」

所以本 arc 的目標不是「把東西搬進套件」,是讓主專案只剩該留的。判準有三層:

該留的 該清的 該搬的
本產品獨有的業務(oscal、module_frame、cloud_integration) 沒人用的死碼 主專案只剩殼、實體已在套件
只有這個產品才對的規則(多租戶、產品知識) 功能退役後的殘留 接線該在 core/plugins/ 而非 api/

⚠️ 「清乾淨」不等於「刪掉」——本 arc 有三處查證後決定不動:evidence_classification (原型腳本的資料檔)、associations(v1 退場 v2 未接的中間狀態,341 筆真實資料)、 COMMON_PASSWORD_TOO_SHORT(號碼不可讓出,見 LOG D4)。


§2 當前狀態

盤點時間:2026-09-16 16:43|盤點者:subagent|全部唯讀

⚠️ 表 A 已由接手首腦整表更新(2026-09-16,三 repo 皆已 push);其餘各表為盤點當下狀態, 表 F 的 CM-1836/1837/1823 三列另有註記。

表 A:三 repo git 現況

Repo 當前 branch push 狀態 工作區未 commit 檔 最近 3 筆 commit
BE
compliance-manager-be
feature/review 已全部 push(2026-09-16) (乾淨;jedi-iam pin 已升 1.2.0,path dependency 已還原) 7683b45b docs(FR-101.2) J2 驗收落地(CM-1827)
a54eccf0 fix(deliverables) plugin_metrics 接線清單改指 core/plugins/detection.py
22bb4dba docs(FR-101.2) J2 掃描結果(CM-1827)
FE
compliance-manager-fe
feature/review 已全部 push(2026-09-16) (乾淨,無未 commit 檔) ea74482 清掉指向已退役後端端點的前端殘骸(CM-1841 FE 段)
3d35229 標註舊版 BPMN 編輯器不是死碼(CM-1836)
0dc93e1 退役三條零引用路由與孤兒頁面(CM-1835)
套件
jedi-python-package
feature/review 已全部 push(2026-09-16) (乾淨,無未 commit 檔) 3cc966f chore(release) jedi-iam 1.2.0
edc9118 帳號匯入改必填+修密碼產生器少一碼
589d034 吸收第三方登入綁定與 LDAP 連線測試(CM-1832)

表 B:FR-103 相關 commit 清單

BE repo

Commit 卡號/關鍵字 一句話說明
86d62988 CM-1830、FR-103 退役排程報表整條線(report_downloader + schedule-report API)——決策者裁不需要
e5548de8 CM-1833、FR-103、出貨基線 退役 12 個 enable=0 舊選單的 DB 側——選單/綁定/16 個能力點/回饋標籤
0c7e4e38 CM-1832、FR-103 第三方登入綁定與 LDAP 連線測試上移 jedi-iam——主專案只留接線(第 3 棒)
33709786 CM-1834、FR-103 問卷接線收進 core/plugins/survey.py——主專案側 23 支套件全部同形(第 5 棒)
08d1267f CM-1833、FR-103、出貨基線 重產出貨基線——收斂 CM-1833 的 12 個舊選單退役
90be71f6 CM-1830/CM-1832/CM-1834、重產 Postman 重產 Postman collection 與 route 清單——反映 FR-103 四棒的端點異動
11773fde FR-102、FR-103 FR-102 地圖加失效警示——FR-103 四棒落地後四項狀態已變

BE 查無命中:CM-1831(該棒為純 FE 工作,commit 在 FE repo)

套件 repo

Commit 卡號/關鍵字 一句話說明
589d034 CM-1832、FR-103 吸收主專案的第三方登入綁定與 LDAP 連線測試——四條 route+設定來源 port(第 3 棒)

套件 repo 查無命中:CM-1830 / CM-1831 / CM-1833 / CM-1834

BE 追加關鍵字(FR-100 / FR-102 / 出貨基線 / 重產 Postman)

Commit 關鍵字 一句話說明
a2812d90 FR-100 更正 flow_engine 歸屬敘述——226 檔是 flow_control 的數字,兩份舊數字皆失效
326e8b14 FR-100、重產 Postman 重產 Postman collection 與 route 清單——反映 FR-099/FR-100 的端點異動
b1cef859 FR-100 兩棒完成+report 改判為活的——盤點方法補第四層(CM-1820/1821/1822)
0c8fbbbb FR-100 清理 gen_postman_collection.py 殘留的 api.translate 項(CM-1821)
16ff211c FR-100 退役 translate 端點——前端零入口、四方查證皆無呼叫者(CM-1821)
2cd7e624 FR-100 主專案剩餘 route 逐支盤點結論——三支待處理,純記錄不派工(CM-1820)
808af30c FR-102 主專案全模組現況地圖——26 模組逐一盤完,只給現況不給建議(CM-1824)

註:出貨基線 關鍵字在 BE repo 全歷史共 28 筆命中,上表只列 FR-103/FR-100/FR-102 區段內的;其餘屬 FR-065/FR-092/FR-094 等歷史 arc,與本 arc 無關。


表 C:主專案模組現況(驗證退役是否落地)

目錄 git 追蹤檔數 判定
api/report 0 0 檔=已清空
app/report 0 0 檔=已清空
bin/report_downloader 0 0 檔=已清空
api/translate 0 0 檔=已清空
api/user_auth_provider 0 0 檔=已清空
app/user_auth_provider 0 0 檔=已清空
api/survey 0 0 檔=已清空
api/task_survey 0 0 檔=已清空
api/feedback 0 0 檔=已清空
api/label 0 0 檔=已清空
app/feedback 0 0 檔=已清空
domain/feedback 0 0 檔=已清空
infra/feedback 0 0 檔=已清空

13 個目錄全部 0 檔,退役皆已落地。


表 D:DEV DB 現況

連線:localhost:5432 / cmmgr / guidant_ai_dev(查詢成功)

# 查詢 實際值 預期 判定
1 ui_routes where enable=0 0 0 ✅ 相符(關閉選單已全數退役)
2 ui_routes where enable=1 43 —(僅記錄) —
3 capabilities where name in ('bulletin.read','feedback.read') 2 2 ✅ 相符(共用點留存)
4 capabilities where name like 'workflow.%' 4 4 ✅ 相符(刻意保留待 CM-1836)
5 capabilities 退役族群
(cruise-project* / resource.* / dashboard.* / report)
0 0 ✅ 相符(已清乾淨)

表 E:188 出貨基線庫現況

存取:ssh jedi@192.168.50.188 → docker exec postgres psql -U cmmgr -d guidant_ai(查詢成功)

查詢 實際值 預期 判定
ui_routes where enable=0 0 0 ✅ 相符(本 session 已重產)
ui_routes where enable=1 43 —(加查對照) ✅ 與 DEV 的 43 完全一致

表 F:Notion 卡狀態

卡號 狀態 是什麼(任務名稱前段)
CM-1829 Not started FR-103 主專案殘留清理——四件確定要整理的(母卡,三棒)
CM-1830 修正待驗證 FR-103 第 1 棒 report 整條線退役 + translate 本機殘留清除
CM-1831 修正待驗證 FR-103 第 2 棒 cruising 舊回饋頁退役——選單已關但路由仍掛著
CM-1832 修正待驗證 FR-103 第 3 棒 user_auth_provider 搬進 jedi-iam——地圖唯一的殼
CM-1833 修正待驗證 FR-103 第 4 棒 退役 12 個關閉的舊選單——含權限點、前端孤兒頁、出貨基線同步
CM-1834 修正待驗證 FR-103 第 5 棒 survey/task_survey 接線收進 core/plugins
CM-1835 Not started FR-103 第 6 棒 退役三條確定無人引用的前端路由——乙案
CM-1836 修正待驗證→驗收通過 FR-103 第 7 棒 新舊兩代 BPMN 編輯器整併——五支活頁面改用 flow-template(丙案)。決策者裁不遷、加註記(FE 3d35229/BE 98d756bb)
CM-1837 已作廢 使用者 Excel 匯入:租戶/單位/角色三欄的名稱從未被解析成 id——決策者重走流程證實正常
CM-1823 驗收通過 FR-104 流程疆界重新分析——舊設計稿全部數字失效(一棒,只分析不動程式)。見 FR-104 README
CM-1824 修正待驗證 FR-102 主專案全模組現況地圖——636 檔逐模組盤點(一棒,唯讀)
CM-1820 Not started FR-100 主專案剩餘 route 逐支盤點結論——三支待處理,純記錄不派工
CM-1816 Not started FR-099 意見回饋與標籤併入 jedi-issue——主專案側整組退場(三棒,實作)

母卡 CM-1829 狀態仍為 Not started,七張子卡(CM-1830~1836)皆已驗收通過(Notion 狀態以實際卡為準)。


§3 待辦(下一棒可能要做的)

🟡 已開卡待派

卡 做什麼 建議 model 卡在哪
CM-1823 ✅ 已完成,見 FR-104(流程疆界重新分析) — —
後續 arc FR-104/FR-105/FR-106 見各自 README(docs/features/FR-104-*/FR-105-*/FR-106-*) — —

✅ CM-1835(乙案)已於 2026-09-16 完成並驗收通過(FE 0dc93e1)。 ✅ CM-1836(丙案)已於 2026-09-16 驗收通過——決策者裁不遷、加註記(FE 3d35229/BE 98d756bb)。

🔴 等決策者裁示

項目 為什麼卡著
oscal/module_frame 內部逐檔分類 已由 FR-105 三棒完成並驗收(母卡 CM-1838),見該案 README

📋 記錄在案、未排期

  • license_readonly_mw.py:110 白名單列著 /schedule-report/file-list,但那條路徑 從來沒註冊過(CM-1830 退役 report 時已順手移除該行,此項已解)
  • user_batch_import_service.py 的 policy=None 語意問題(見 LOG 教訓 4)—— 不影響功能,未改
  • 單筆新增使用者的自產密碼路徑未實測(見 LOG「未驗證的假設」)

§4 🔴 行為紅線(動手前必看)

不可刪的東西

東西 為什麼
src/views/workflow/ 整包(16 檔含 55KB BPMN 編輯器) 五支活頁面用 window.open/router.push 開它。FE 路由守衛只擋 requiresAdmin,不依 ui_routes 擋直入——選單關了不代表進不去
capabilities 的 workflow.* 四個 jedi-flow-engine 的 plugin 契約仍宣告它們,刪掉 seed 會讓 test_plugin_capabilities_are_seeded 變紅。要收得連套件一起收
capabilities 的 bulletin.read/feedback.read 公告與意見回饋兩個活功能共用,刪了整個功能 403 且無錯誤訊息
COMMON_PASSWORD_TOO_SHORT(error_code.py:145) 號碼是 CM-1802 特地分出來的,刪掉會被回收重用、重蹈覆轍
src/views/bulletins/ 另外四支 活的公告功能(只有 UserGuide.vue 是孤兒)
src/views/flow-template/ 新一代流程範本,ui_routes 的 flow-template-manage enable=1

環境

  • 開發只動 DEV(localhost:5432/guidant_ai_dev),絕不碰 STG/POC
  • ⚠️ DEV DB 2026-09-13 起在本機 localhost:5432,不是 188:25432
  • 出貨基線庫在 188 的 guidant_ai(port 25432)——動它前必先 pg_dump 備份, 且屬決策者裁示範圍
  • 主線 phase=active/envs=* 的 migration 寫完要回報「出貨基線待重產」,不自己動

套件

  • jedi-iam 已發 1.2.0、pin 已升(pyproject.toml:64),path dependency 已還原為註解(:115)
  • 開發期改套件走 path dependency,path 改動不 commit
  • 不發版、不推 Nexus 除非決策者當次明示

平行作業

本 repo 2026-09-16 當天發生過 commit 夾帶事故(CM-1821 夾走 CM-1818 在 config/app_modules.py 的改動)。顯式 git add 檔名、禁用 -am、commit 前跑 git status 逐檔確認。


§5 座標

什麼 在哪
母卡 CM-1829
全模組地圖(26 模組現況) docs/features/FR-102-2609-host-module-map/README.md ⚠️ 檔頭有失效警示
route 盤點結論 docs/features/FR-100-2609-host-route-inventory/README.md
意見回饋併入 jedi-issue docs/features/FR-099-2609-feedback-label-into-jedi-issue/README.md
終局形狀定義 docs/features/FR-080-.../FINAL-SPEC.md「主專案怎麼接」
接線樣板 core/plugins/issue.py(三段形狀)、core/plugins/remote_agent.py(一個 mount 掛多個)
出貨基線重產步驟 .claude/skills/sql-migration/SKILL.md「首腦重產的步驟」