FR-047 已知坑 ⑦DEAD 桶 — 收尾 SUMMARY

日期:2026-07-07 branchfix/v1.8.0-bugs(未 push,等 user 明示) 範圍:FR-047 已知坑 DEAD 桶(死碼/預留/vestigial)逐條銷帳 + 尾巴 v1 module_frame template copy 整條鏈退役 追蹤表docs/analysis/2026-07-07-known-pits-remediation-tracker.md §DEAD 桶(逐條銷帳表為 living truth,本檔為 arc 收口彙整)


1. 一句話

DEAD 桶 30 條逐條 grep/DB 驗證後分 5 族處理——只刪「確定安全」的死碼,其餘(死欄/表待拍板、誤歸 bug 改桶、寫了沒接回報)不動;尾巴把一條 live-wired 卻零呼叫、JOIN 已 drop v1 表的 module_frame template copy 鏈整條退役

2. Commits 清單

BE(compliance-manager-be

hash 類型 內容
d4b6ee6e chore 刪 feedback 模組確認死碼(FeedbackRequest/FeedbackFileRequest schema + ALLOWED_EXTENSIONS 常數)
7c058565 docs 追蹤表 ⑦DEAD 桶逐條銷帳(5 族分類表)
2d085edf refactor 退役 v1 module_frame template copy 整條鏈(23 檔,-1312 行)
d573c2d4 docs 追蹤表 _overview#3 標「已退役」附 commit
ae169a99 docs 追蹤表補三環境 DB 實查結論(無需 DROP migration)

FE(compliance-manager-fe

hash 類型 內容
7afeb49 chore 刪確認死碼 service/表單元件 4 支 + 註解掉的死 route

註:同期 branch 上另有 76c9b677/c797b1d6/58dbfddd/3b8dad05/999d548a 等 FR-047 其他桶 / _overview#3 調查 commit,屬平行 session,不在本 arc 收口範圍。

3. 改動範圍 + 行為差異

3a. DEAD A 族 — 確認死碼刪除(跨 BE+FE)

坑 id 刪除物件 行為差異
user-form#1 FE UserForm.vue(463 行)+ 註解 route 無(生效版 UserMTRBACForm.vue,死碼零引用)
user-log#7 / bulletin-manage#5 / feedback-management#6(FE) FE UserLogService.js / BulletinService.js / FeedbackService.js(讀 /demo/data/*.json 無(零 import 的假資料 service)
feedback-management#6(BE) FeedbackRequest schema / feedback_file.py / ALLOWED_EXTENSIONS 常數 無(route 手解 request.files['json'],schema/常數零引用)

3b. DEAD 尾巴 — v1 copy 鏈退役(commit 2d085edf

背景oscal.profile_controls / oscal.catalog_control_assessments 兩張 v1 表 FR-038 v2 後已從 DB drop,但主專案殘留一條 live-wired(DI 有註冊)卻零呼叫的 v1 copy 鏈 JOIN 它們。FR-038 Wave 2B 後專案啟動改走 project_start_app_service.deep_clone_ssp,這條鏈被整條繞過 = 孤兒 + 上膛腳槍(誰重新接 copy()UndefinedTable 500)。

退役內容

  • copy 鏈本體module_frame_template_copy_service.py + infra/module_frame/clone/(cloner_impl + __init__,整目錄)+ domain/module_frame/gateway/(interface + __init__,整目錄)
  • PAW 鏈infra/associations/{model,mapper,repository}/profile_assessment_workflow* + domain/associations/{entity(×2),repository,service}/profile_assessment_workflow*;6 個 associations/__init__ 清 PAW export(保留其餘 sibling)
  • DI 解線di_containers/module_frame/module_frame_containers.py 移除 4 imports + repo/domain_service/cloner/copy_service provider + ModuleFrameService 注入參數
  • ModuleFrameService 死碼:PAW imports/建構參數/self 屬性(全檔零讀取)+ create_assessments_workflow_template 整支(零 caller,已被 v2 _init_ao_workflows 取代)+ 連帶死掉的 ActionType import
  • tests:刪 test_module_frame_template_copy_service{,_phase2}.pytest_ssp_versioning_service.py 僅改指向已不存在檔案的 docstring 參照

行為差異:無。全鏈零 production caller,退役不影響任何 live 路徑(專案啟動、資源庫 CRUD 皆走 v2)。

4. 驗證紀錄

  • grep 全 repo:退役符號主專案 .py 歸零;殘留只剩 v2 tree dict-key profile_controls(非表)+ serializer field + 2 處說明註解
  • import sanity.venv):associations / module_frame_service / DI 依賴鏈 import 無斷裂
  • pytest baseline diffgit stash 對照):HEAD 59 failed / 191 passed / 25 errors → 本次 49 failed / 189 passed / 25 errors失敗↓10(=被刪的 copy_service 測試,baseline 即因 JOIN 死表而 fail)、errors 25 不變且皆 pre-existingai_dashboard.service.* / module_frame_*_default_entity 等既有 stale 測試,與退役符號無關)、零新增失敗
  • DB 實查三環境profile_controls / catalog_control_assessments / FK-holder profile_assessment_workflow_mapping 三表在 DEV / STG / POC 全部 already dropped,v1-family pattern 掃殘留=none → 無需補 DROP migration,DB 端已乾淨

5. 規範文件清單(已更新)

  • docs/analysis/2026-07-07-known-pits-remediation-tracker.md:§DEAD 桶 5 族逐條銷帳表 + _overview#3 標「已退役」+ 三環境 DB 實查結論
  • docs/claude/database-schema.mdcatalog_control_assessments / profile_controls / profile_assessment_workflow_mapping 三列標「v1 已退役」(drift 修正)
  • ✅ 本 SUMMARY

6. 未做 / Follow-up

  • DEAD 桶其餘族(回報,未動)
    • B 族死欄users.topt_secret(37 users 全 0 資料、零引用)=乾淨 drop 候選,待補 STG/POC 多環境確認 + user 拍板才 DROP
    • 改判 jedi 套件SURVEY_409003(jedi-survey,零 raise site)需 user 拍板 + 發版才刪
    • C 族誤歸 bug(已改桶,非本桶修):project-dashboard#1→BUG、role-manage#3→BUG+ECODE、feedback-management#1→BUG(TypeError)、issue-integrate-config#1→REPLACE
    • E 族寫了沒接(回報,刪=永久失去):user-log#6 maintain_log_partitions() 無排程;feedback verify_feedback_issue_is_exist 守門未接(update/delete 缺 None 檢查會 500)→ 正解是接上非刪
  • 實體 DROP migration:三環境表皆已無 → 不需要
  • docs/features/FR-047-.../known-pits-remediation-tracker.md(untracked 副本)與 docs/analysis/ 版本並存,可擇一收斂(非本 arc 阻塞)

7. 部署 handover

  • BE 需重啟(無 hot reload,DI 容器有變更)。重啟後手測:
    1. 資源庫清單 / 詳情能開(module_frame 模組 DI 正常 resolve)
    2. 建一個測試專案跑通(專案啟動走 deep_clone_ssp,不碰退役的 copy 鏈)
  • FE:刪的是零引用死碼,不影響 build
  • push:BE + FE 各自 branch 領先 origin,等 user 明示才 push