本卡屬 FR-092(母卡 CM-1703),第 8 棒盤點。只盤不修。

這一棒在做什麼(白話)

前幾棒都把 scripts/ 和 test/ 當「引用來源」,沒反過來看它們自己有沒有死掉。scripts/ 在 CM-1236(2026-08-16)盤過一次、有 archive 政策與 README 索引,所以這棒只補「8/16 之後新增的腳本」;test/ 從沒盤過,172 支測試檔裡可能有測著早已刪掉或退役功能的(用大量 mock 撐著所以還綠)、與已刪 fixture 對不上的、或 @skip 掛了半年的。

為什麼切這一塊

死測試比死程式更陰:它綠著,讓人以為那個功能有保護;實際上功能沒了它還在測 mock。FR-069 收整棒 B 把 94 紅歸零時是修不是刪,可能留下一批「修綠的死測試」。

重點看什麼

已知背景

scripts/ 上次盤點:scripts/README.md(CM-1236,2026-08-16),分類原則與不動區寫在檔頭。test/ 上次大動:FR-069 收整 B 棒 CM-1505(94 紅 23 error → 0,產品碼零異動)與 A 棒退役 tests/ 整合套件 25,015 行。CM-1510 記帳「test_audit 併跑汙染」未處理。

怎麼做

第一步(test/):

# 每支測試檔 import 的專案模組
for f in test/*.py; do grep -hoE '^(from|import) (api|app|domain|infra|common|core|config|di_containers)[\w.]*' "$f" | sed "s|^|$f\t|"; done > imports.tsv
# skip / xfail
grep -rn 'mark.skip\|mark.xfail\|pytest.skip' test/ | grep -v __pycache__
# 只有 mock 斷言的檔(粗篩:assert_called 多、assert == 少)
for f in test/*.py; do echo "$f $(grep -c 'assert_called\|assert_any_call' $f) $(grep -c 'assert .*==' $f)"; done | awk '$2>0 && $3==0'

第二步(scripts/):8/16 後新增檔逐支 grep -rn "<檔名>" .claude docs scripts Makefile .gitlab-ci.yml 2>/dev/null。

第三步:每條候選開檔看,判定寫理由。

交付什麼

紀律