跑測試不再偽造「有一筆推 main 在等你裁」(inkstone/ISEP#59) #77
Reference in New Issue
Block a user
Delete Branch "fix/tests-leave-no-forged-pending"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
總管親手驗的(worktree 上跑,不是聽回報):
那條線還主動講明一個要總管裁的動作(不是藏著):這個 commit 移除了兩個被追蹤的檔,任何人 pull 之後工作區會失去它們。總管已查過那兩筆的內容——都是 2026-08-21 的舊請求。
現象(實測,不是推論):跑完 main-and-prod-push-guard 那三支測試之後 $ git status --short M hooks/lib/__pycache__/strip_heredoc.cpython-314.pyc M pending-main-push/unnamed--ISEP.md ?? pending-main-push/unnamed--A.md 成因:這支閘擋下推 main 的同時,會把那次請求寫成 `<hooks 的上一層>/pending-main-push/<誰>--<repo>.md`,而三支測試的測資本來 就全是推 main。於是每跑一次測試,工作區就多/改幾筆**偽造的待裁決**。 兩個後果,後者比較貴: ① `git add -A` 很容易把它們帶進 commit(08-27 那次真的帶進去了,事後才拔掉) ② 總管的迴圈讀那個目錄,讀到的每一筆都該是真的在等他裁—— 測試每跑一次就偽造一筆 ⇒ **下一筆真的請求會混在雜訊裡**。 這跟「永遠在響的警報」是同一個病。 改法(產品程式碼一行都沒動): - 新增 hooks/tests/lib/hook-sandbox.sh:把整個 hooks/ 複製到暫存區再跑複本。 閘算 pending 目錄的位置靠的是 `$0` 的上一層 ⇒ 請求寫進暫存區。 **刻意不在閘上開一個「寫去哪」的環境變數**——那種開關同時是一條把紀錄關掉的路。 - 三支測試改測沙盒複本,並各補兩條斷言: ① repo 的 pending-main-push 一個位元都沒動 ② 沙盒裡**真的有**留下請求(只驗 ① 的話,把留紀錄的功能整個關掉也會綠) - pending-main-push/ 不再進版控(它是本機狀態不是原始碼),只留一份 README 說明規約; 既有的兩筆與那顆被追蹤的 .pyc 一併 `git rm --cached`,檔案留在硬碟上不刪。 實測: - 三支各自 10/10、19/19、13/13(原本 8/17/11,各多兩條新斷言) - 把 `H` 改回真跡重跑 ⇒ 新斷言兩條都紅(11/13)+工作區又髒 ⇒ 這兩條斷言真的抓得到它要抓的東西 - 全套 16 支測試檔跑完 0 失敗,`git status` 沒有多出任何一行 - `claude plugin validate .` ✔ Validation passed 沒有升版:這次只動測試與版控範圍,沒有任何閘的行為改變, 不需要靠新版本號送到任何人手上;請跟著總管下一個 release 一起出去。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>