本卡屬 FR-092(母卡 CM-1703),第 5 棒盤點(CM-1708)產出的修正卡 D。純刪成員,不改行為。清單以
docs/features/FR-092-2609-dead-code-cleanup/scan-dead-members.md為準,本卡只摘要。
這些檔案本身活著、有人 import,但裡面的18 條 class/函式沒有任何呼叫者。第 5 棒 runner 用五路核對(BE 直接呼叫/BE 字串引用/jedi 套件端/前端 emit/同檔字串)確認零命中,且不是 Flask HTTP 動詞、marshmallow Meta、框架 decorator 這類框架回呼。留著會讓人以為有人用。
首腦核對:報告內三條重點(notify/system_asset_snapshot/resolve_license_tenant_id)已親自 grep 複驗,結論見各卡「怎麼修」。
api/project/serializers/project.py:18,38,91,123,129,157 六個 Schema/Request/Response class
api/system_config/serializers/system_config.py:17,21,24 SystemConfigGroupResponse/SystemConfigValueResponse/SmtpConfigRequest
api/project/serializers/job_execution_device.py:61 JobExecutionDeviceViewQueryResponse(⚠️ CM-1706 第 3 棒可能整檔刪,先查該卡狀態;已刪就跳過)
api/cloud_integration/serializers/google_drive_integration.py:22 GoogleDriveCallbackQuerySchema
common/util/system_asset_snapshot.py:54 resolve_system_asset_fields(**只刪這一支 50 行,不刪整檔**——同檔 snapshot_device/resolve_device_inventory_fields 被 ssp_inventory_items_app_service 與兩支測試在用)
common/exception_error/common_exception.py:13,19,37,43 ValueMismatchError/DataIsRevokeError/AuthError/MailError
infra/system_config/runtime_config.py:77 get_runtime_value
config/config_util.py:18 get_current_config
docs/features/FR-092-2609-dead-code-cleanup/scan-dead-members.md 對應檔案段落,逐條到該行(vulture 行號是 decorator 那行,def 在其下)刪整個定義區塊(含 decorator 與 docstring)。common/authz/license.py:200 的 resolve_license_tenant_id 不在本卡:決策者裁等 FR-091 CM-1701(license 搬套件)commit 後再動,屆時若該檔仍在主專案再開小卡。api/project/serializers/project.py:5 仍 import 第 1 棒要刪的 api.oscal.serializers.ap.assessment_plan,那是 CM-1704 的事,本卡不碰第 5 行。except <名>/raise <名> 兩種形式,含 jedi 套件目錄。__all__、同檔別的方法呼叫);有就一起處理。docs/api/*/api-spec.md 與 docs/system-design/scripts/generate_*.py 若提到被刪的名字,屬描述性引用,順手拔該行/該列,同一 commit。不寫(純刪,test/ 對這批零引用)。跑:python -m pytest test/ -k 'system_config or project or cloud_integration or fr032' -q
git rm 並在 docs/features/FR-092-2609-dead-code-cleanup/dead-files.txt 補一行。