本卡為 FR-092 母案。把主專案裡「從入口走不到」的檔案與「前端/agent/e2e 都不打」的端點清掉,四棒。子卡清單在末段。排在 FR-090 第 3/4 棒與 FR-091 之後做。
後端模組化(FR-069/FR-080)把功能一支支搬進 jedi-* 套件之後,主專案裡留下不少「沒人再用」的東西:舊版 OSCAL(v1)的 API 回傳格式定義、被 FR-038 掏空只剩空殼的服務、整條沒人跑的 PDF 工具鏈、以及前端早就不接路由的頁面。這些不影響功能,但會誤導後來的人(以為還在用、還去維護——CM-1235 去年 8 月換 PDF 套件時就改了三支沒人跑的檔)。本案把它們刪掉。
FR-090 第 1 棒只清了 app/、api/ 下的空目錄與零呼叫者 dto;FR-069 CM-1506 只清了 shim。剩下的是「不是 shim、也不是空目錄,但沒有任何活路徑走到」的實碼——用可達分析才看得到。決策者 2026-09-12 裁「先列確定的,開卡準備」。
docs/features/FR-092-2609-dead-code-cleanup/dead-files.txt。src/、evidence-agent/、compliance-manager-test/ 全文核對,12 支三方零呼叫。/agents/files/<uid> 是 agent 在用、/project/<uid>/job/<uid> 等是 FE 模板字串組出來的——首輪誤判已剔除。SspVersioningService 零 caller 零 DI,docstring 自承 FR-038 2A 停用,_clone_* 全是空存根;v2 版本化走 living SSP+凍結快照。三支一起刪。app/evidence_classification/resources/(build_release.sh:664-847 還在包)。/audit-round/<uid>/{launch-audit, start-auditing, ar/finalize, ap/generate-draft} 前端零呼叫、只有 e2e site-regression step 在打,是前端漏做還是流程改走別路未定。api/oscal/serializers/__init__.py 的 re-export 要同步拔。common/code/event_code.py 與活的 common/enum/event_code.py 同名不同內容。建議順序:1→2 序列(都動 test/ 與守衛,避免衝突);3 可與 1、2 平行(動 api/init 與模組目錄,不重疊);4 隨時可做(另一 repo)。