本卡屬 FR-092,四棒之一。退役 12 支端點:3 支連整模組刪(21 檔)、4 支只退 route 留 service、5 支零散。可與第 1/2 棒平行。
227 支後端端點逐支對前端原始碼、evidence-agent、e2e 測試 repo 核對,12 支三方都沒人打。留著的成本是每支都得維護守門、schema、測試,而且會讓人以為功能還在。
首腦核對(2026-09-12,FE src/ 全文、agent repo 全文、test repo js/ts/feature 全文):
/subtask-status-history、/subtask-status-history/<uid>、/subtask-status-histories/<task_uid>:FE 只剩 views/_archived/ 三檔引用(不接路由,第 4 棒刪)。模組 api/app/domain/infra/di_containers 五層 21 檔。唯一活消費者:app/associations/service/job_execution_device_mapping_service.py:14,44,55 的建構子收 SubtaskStatusHistoryService,而該 service 被 AI 儀表板申報引用要留。做法:先看該 service 內對 self.subtask_status_history_service 的實際呼叫點——若只在 job-execution-device 那幾支 route 走的方法裡,連方法一起刪、建構子拔參數、di_containers/associations/associations_containers.py:55,158 與 di_containers/containers.py:23,146,204 拔引用、config/di_modules_static.py:18 與 config/app_modules.py:57 拔註冊行,再 git rm -r 五個目錄。若呼叫點在 AI 儀表板走的 get_all 路徑上,停下回寫本卡問決策者,不硬刪。/project/job-execution-device、/bulk、/device-view-data、/project/job-execution-devices:FE 只剩 _archived/DeviceViewTable.vue。但 JobExecutionDeviceMappingService 被 di_containers/dashboard_apis/project.py:63 AI 儀表板申報引用、flow_control 三支 repo query 還讀 job_execution_device 表——只拔 api/project/__init__.py 的四行 add_resource 與對應 route class/serializer,service、domain、infra、表都留。/ssp/<uid>/docx-import/upload、/ssp/<uid>/docx-import/<parse_uid>:api/oscal/__init__.py:130-132 三行 add_resource 已被註解掉,route class 是死碼;FE 走 /ssp-docx-imports/parse 那組。刪 api/oscal/routes/ssp/ssp_scoped_docx_import_route.py 與註解行。/oscal/framework-versions/import(api/oscal/__init__.py:37):FE 用 /oscal-framework-version/import(單數,api.js:469),這支複數是舊路徑。/oscal-framework-versions/menu(:47):FE 無對應常數。/schedule-report/file-list(api/report/__init__.py:19):FE 無任何 schedule report 呼叫。/agents/files/<uid>(agent task_executor.py:35 在用)、/project/<uid>/job/<uid>、/audit-round/<uid>/ap、/launch-reverify(FE 模板字串組出)、Google Drive callback/webhook(外部回呼)。/audit-round/<uid>/{launch-audit, start-auditing, ar/finalize, ap/generate-draft} FE 零呼叫、e2e site-regression step 在打。api/subtask_status_history/ app/subtask_status_history/ domain/subtask_status_history/ infra/subtask_status_history/ di_containers/subtask_status/ 整模組 21 檔
config/app_modules.py 拔 "subtask_status_history" 一行
di_containers/associations/associations_containers.py 拔對 subtask_status 容器的引用
api/project/__init__.py 拔 4 行 job-execution-device add_resource
api/project/routes/job_execution_device_route.py 刪
api/project/serializers/job_execution_device.py 刪(先確認 app/associations 沒 import 它)
api/oscal/__init__.py:37,47,130-132 拔 import 複數路徑、menu、三行註解
api/oscal/routes/ssp/ssp_scoped_docx_import_route.py 刪
api/report/__init__.py:19 + routes/scheduler_report_route.py:40 拔 ScheduleReportFileListRoute
job_execution_device_mapping_service.py 呼叫點(見首腦核對)→ 拔 app_modules.py/di_modules_static.py 註冊行 → python main.py 起得來 → 拔三個 di_containers 引用 → git rm -r 五目錄。docs/api/ 與 Postman collection 是否有對應條目,有就在本卡回寫標記(不改文件,歸收尾)。不寫新測試。守衛三檔+python -m pytest test/ -k "subtask or job_execution_device or docx_import or schedule_report" -q 綠(刪掉的測試不算)。