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

FR-092 主專案廢碼清理(套件搬移後沒人引用的檔案與沒人打的端點)

✅ 全案收口(2026-09-13 晚)。母卡 CM-1703 Done;16 棒實作+3 棒收尾(CM-1763 文件清理、CM-1764 十九檔活 schema 搬家、CM-1765 四張表 drop)全 Done。留給後續:version-bump 前跑 site-regression;jedi-task-platform 677f20f 併 1.1.0,發出前 DEV 刪設備確認框壞、STG/POC 不可套 cm1765 主檔 migration。

狀態:✅ 已完成 文件 4 份

FR-092 一頁看完

§1

結論

  1. 用「從 main.py 入口能不能走到」做傳遞性可達分析(含 REGISTERED_APPS 動態載入、DI wiring、AI 儀表板申報、scripts/),主專案 923 個模組有 73 檔約 6,300 行沒有任何活路徑走到,可純刪不改行為。清單在 dead-files.txt。
  2. 227 支 BE 端點對前端、evidence-agent、e2e 三個 repo 逐支核對,12 支三方都沒人打,可退役;其中 subtask_status_history 整個模組(21 檔)跟著退。
  3. 前端 views/_archived/ 15 檔自 2026-03-31 起無路由引用,README 自承備份,一起清。
  4. 刻意不碰:FR-048/FR-069 的 deprecated shim(common/authz/*、common/util/permission.py 四支、app/detection_tools/*、common/util/profile_extractor/)與 app/evidence_classification/resources/——前者 FR-090 第 3 棒與 FR-091 detection 大卡會動 import 路徑,現在改是白做;後者 build 腳本還在包。
  5. 需決策者裁:/audit-round/<uid>/{launch-audit, start-auditing, ar/finalize, ap/generate-draft} 四支前端零呼叫、只有 e2e step 在打——是前端漏做還是流程改走別路,未定,本案不動。
§2

📊 總進度

棒 卡 做什麼 規模 狀態
1 CM-1704 OSCAL v1 序列化殘骸+FR-038 掏空的 versioning/diff/reconciliation/project_system_info 53 檔 約 2,900 行 ✅
2 CM-1705 common/ 死掉的 PDF 鏈與工具、common/code/event_code.py 同名雙真相 17 檔 約 3,000 行 ✅
3 CM-1706 12 支零呼叫端點退役+subtask_status_history 整模組 21+約 15 檔 ✅
4 CM-1707 FE views/_archived/ 15 檔刪除 FE 15 檔 ✅
5 CM-1708 盤活檔裡的死方法/class:vulture 394 條逐一核動態呼叫,分確定/疑似 唯讀 ✅ 完成 2026-09-12 → scan-dead-members.md:確定 63 條/約 611 行/28 檔,誤報 105、活的 126;建議拆四張修正卡
6 CM-1709 盤 pyproject 未用依賴:deptry 對照主專案/jedi 套件/build 清單,分 A-D 唯讀 ✅ 盤完 → scan-unused-deps.md:A 類 3 支可拔(gevent/flask-marshmallow/google-auth-oauthlib)/B 類 6 支屬套件領域/D 類 5 支動不得(psycopg 靠 DB URL 動態載入、三家 LLM SDK 是套件 extras 要宿主提供);反向 7 支未宣告,openpyxl 11 檔最嚴重;另抓到第 2 棒清單缺口 pdf_backend.py
7 CM-1710 盤 DEV 庫無人讀寫的表:ORM+SQL 字串+view 三方對照,分 A-D 唯讀、DEV 只 SELECT ✅ 盤完 → scan-orphan-tables.md:A 類 13 張可 drop/B 類 3 張待裁/D 類 3 張備份表;反向零筆
8 CM-1711 盤 scripts/ 8/16 後新增腳本+test/ 死測試 唯讀 ✅ 盤完,確定 7 條疑似 0 條 → 報告
9 CM-1717 flow_engine 14 條死成員(含 notify_control_reviewers 89 行,決策者裁刪) 5 檔 254 行 ✅ Done
10 CM-1718 OSCAL 14 條死成員(v1 schema 四支、未接線 parser 三支) 7 檔 118 行 ✅ Done
11 CM-1719 module_frame/feedback/summary_report/associations 16 條 7 檔 95 行 ✅ Done
12 CM-1720 api serializers+common/infra/config 18 條(system_asset_snapshot 只刪一支) 9 檔 136 行 ✅ Done
13 CM-1721 pyproject 拔 gevent/flask-marshmallow/google-auth-oauthlib,補 openpyxl/werkzeug/cryptography/requests/httpx pyproject+lock ✅ Done
14 CM-1722 jedi 套件漏宣告 11 條(integrity→sqlalchemy 等),套件異動不發版 7 支 pyproject ✅ Done
15 CM-1723 drop 16 張表(cd_* 六/hi_* 四/device_monitors 二/role_members/alembic_version/DEV 備份二)+基線重產 2 migration ✅ Done
16 CM-1724 test/ 六支死測試+scripts/archive 兩支 8 檔 ✅ Done
§3

需求討論紀錄

  • 2026-09-12 深夜 首腦驗收四棒盤點:抽查關鍵斷言屬實(gevent 零 import、openpyxl 12 活檔零宣告、cd_* 零命中、無 alembic、test_decision_merge:9 踩第 1 棒);CM-1708 一處補正(system_asset_snapshot.py 只刪一支)。決策者裁「1 到 3 照建議」→ 開第二批修正卡 CM-1717~1724 八張。待裁記帳:pdf_backend 去留、B 類三張表、/audit-round 四支端點、jedi-iam role_members 死路徑。盤點結果總帳:活檔死成員 63 條 611 行/依賴拔 3 補 5+套件漏宣告 11/孤兒表 16 張/死測試 6+2。

  • 2026-09-12 決策者:問「什麼時候可以開始做、等 91 全收嗎」→ 重估重疊面:只有第 3 棒碰 app_modules.py 與 DI 接線需等 CM-1700/1701,其餘現在可派。再問「還有需要另外盤的嗎」→ 列六項,裁「先做 1 到 4」→ 開四張唯讀盤點卡 CM-1708~1711(活檔死方法/未用依賴/無人讀寫的表/scripts 與 test 死物),同晚四棒全派出平行跑。等 FR-091 收口再盤的:jedi 套件內部廢碼、CM-1696 後的 DI 殘留。

  • 2026-09-12 決策者:「主專案好像還有很多廢 code 殘留,先盤點」→ 盤點後問「cloner 那支是不是接線漏了」→ 查證為 FR-038 掏空的整組殭屍,非漏接。裁「先列確定的,開卡準備」,時序等 FR-090/091 做完。

  • cloner 查證結論:SspVersioningService 全專案零 caller 零 DI wiring,docstring 自承 FR-038 2A「v2 切換後停用、2B 重建」,所有 _clone_* 為空存根;v2 版本化走 living SSP+凍結快照,不用 deep clone。三支(service/gateway 介面/infra impl)一起刪。

  • app/ 下 auth/flow_control/cloud_integration 為何還在:auth 已搬 jedi-iam,剩 license 守門 wrapper,FR-090 第 3 棒收;flow_control 已搬 jedi-compliance-audit,剩宿主編排(design「project =插座」);cloud_integration 在 FR-069 §7 標「待定序」從未排進棒次,要抽得另開 FR。

§4

座標

  • 清單:dead-files.txt(73 檔分組)
  • 第 7 棒盤點報告:scan-orphan-tables.md(DEV 189 表 × 155 ORM 對照)
  • 第 8 棒盤點報告:scan-dead-tests-scripts.md(test/ 193 檔 + scripts/ 8-16 後新增檔)
  • 端點核對方法:BE add_resource/@route 抓 227 支 → 對 FE src/、evidence-agent/、compliance-manager-test/ 全文比對 literal 路徑段
  • branch:BE/FE/test 三 repo 皆 feature/FR-075(開卡時查)
  • 前置:FR-090 CM-1686/CM-1687、FR-091 三批+大卡
§5

文件

以下全部由 build 掃資料夾產生,新增檔案重 build 即自動出現。標題連結指向渲染後的 HTML,md 連向源檔。

證據與盤點

文件 類型 標題 最後更新
scan-dead-members / md 盤點證據 FR-092 第 5 棒盤點報告——活檔裡的死方法與死類別 2026-09-12
scan-dead-tests-scripts / md 盤點證據 FR-092 第 8 棒盤點報告——scripts/ 與 test/ 的死物 2026-09-12
scan-orphan-tables / md 盤點證據 FR-092 第 7 棒 盤點報告 — DEV 庫裡沒人讀寫的表 2026-09-12
scan-unused-deps / md 盤點證據 FR-092 第 6 棒 盤點報告 — pyproject 沒人 import 的依賴 2026-09-12

其他檔案:dead-files.txt

§6

Notion 卡

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

關係 卡號 標題 狀態
母案 CM-1703 FR-092 主專案廢碼清理——套件搬移後沒人引用的 73 檔、沒人打的 12 支端點、前端 15 檔備份頁(四棒,實作) —
子卡 CM-1704 第 1 棒 OSCAL v1 序列化殘骸與 FR-038 孤兒 53 檔 Done
子卡 CM-1705 第 2 棒 common/ PDF 工具鏈與 event_code 雙真相 20 檔 Done
子卡 CM-1706 第 3 棒 12 支零呼叫端點退役+subtask_status_history 整模組 Done
子卡 CM-1708 第 5 棒 盤活檔裡的死方法與 class Done
子卡 CM-1709 第 6 棒 盤 pyproject 未用依賴 修正待驗證
子卡 CM-1710 第 7 棒 盤 DEV 庫無人讀寫的表 Done
子卡 CM-1711 第 8 棒 盤 scripts/ 與 test/ 死物 修正待驗證
子卡 CM-1707 第 4 棒 FE views/_archived 15 檔 Done