一句話:本卡為 FR-105 母案,把主專案 oscal(163 檔/19,996 行)與 module_frame(81 檔/10,942 行)兩個最大模組逐檔分類成「真業務/轉接殼/共用設施/死碼」,兩棒,只分析不動程式。子卡清單在末段。

這系列在做什麼(白話)

主專案四層程式一共約 62,000 行,其中一半住在 oscal 與 module_frame 這兩個模組。這兩個模組裡同時有「本產品自己的業務」(解析 Word/Excel、比對文件差異、產 Excel 範本)與「轉接殼」(把前端請求轉給 jedi_oscal_v2 套件、換欄位名回傳),混在同一個目錄。看目錄分不出哪支是哪種,要開檔逐支看。

這系列要產出一張逐檔的分類表:每一支程式是哪一類、證據是什麼、哪些現在就能收、哪些要先設計。不動任何程式——決策者要的是「有正確的圖才動刀」。

為什麼要做

決策者 2026-09-16 原話:「我要的就是乾淨的 code,因為我後面要去開發新功能了,不要再留一堆無意義的東西。」FR-103 已把確定的殘留(report 整條線、cruising 舊頁、user_auth_provider、12 個舊選單、survey 接線)清完;FR-102 全模組地圖盤到模組層級後明講這兩支「單一標籤蓋不住內部差異」需另開卡逐檔判(docs/features/FR-102-2609-host-module-map/README.md:139-140)。這不是「沒遷乾淨」,是內部邊界沒畫清,性質不同於 FR-103。

首腦讀完後的重點

怎麼拆

兩棒可平行(各自只動自己模組的分析檔),但 docs/features/README.md 登記表與 FR-105/README.md 會共用——第 1 棒建、第 2 棒更新,commit 前 git pull --rebase。建議一次只派一棒。

共同設定

四類判準(依賴方向,不是檔名):真業務=主要邏輯自己寫、jedi 引用少或零、刪掉功能就消失;轉接殼=主體是「開 transaction → 呼叫套件 service → 欄位對應/分頁」,商業規則在套件,另標「有沒有帶主專案獨有規則」;共用設施=無 route 無業務語意、給別的模組用(resolver/DTO/error code/serializer);死碼=四層零引用;還看不準=允許,但要寫卡在哪。

產出落點:docs/features/FR-105-2609-oscal-module-frame-file-classification/(README.md 三段式首頁+ module-frame-classification.md + oscal-classification.md),跑 scripts/deliverables/render_index.py 出 HTML。

共同紀律