Problem
idd-close 有兩層 gate,各自防一種失敗模式(skill 自己的說法):
- Step 0 Structural Gate 防 honest forgetting(
- [ ] 沒打勾不能關)
- Step 1.6 Semantic Gate 防 motivated cheating(打勾了但實際沒做)
兩層都不防第三種:寫的當下是真的,關的時候已經不是了。
實例
PsychQuant/plaud-mcp-connector#44 的 authoritative checklist(## Implementation Complete > ### Checklist)第一項:
- [x] 新增 `docs/upstream-report-port-8199.md` → commit `d54ffbc`
寫下時完全屬實。但該 issue 隨後跑了三輪 verify,第三輪之後 那個檔案被刪除了(commit 9f6d22c)——因為查明它的三個 upstream ask 都站不住。
close 時:
| Gate |
判定 |
為什麼 |
| Step 0 Structural |
✅ PASS |
全部 - [x],supersession active |
| Step 1.6 Semantic(Pattern 3:backtick file path) |
✅ PASS |
docs/upstream-report-port-8199.md 確實出現在 git log --grep="#44" --name-only —— 它被新增過一次、刪除過一次,兩個都是 #44 的 commit |
兩層 gate 都放行,而 checklist 描述的交付物已經不存在。 Semantic gate 的 pattern 檢查的是「這個 path 有沒有在本 issue 的 commit 裡出現」,新增與刪除同樣命中。
當次由人補發一則 superseding ## Implementation Complete(把該項改成 - [-] won't fix 並寫明檔案已刪),gate 才反映真實。但那不是 gate 抓到的,是人記得。
Type
bug
Expected
至少其中之一:
- Semantic gate Pattern 3 檢查檔案的最終狀態:path 若在
git log --grep --name-only 中出現,另外確認它在 HEAD 是否存在(或該 issue 最後一個 commit 是否刪除它)。刪除 → warn,讓使用者確認 checklist 是否過時。
- 提示 checklist 時效性:當
## Implementation Complete 的最新一則距今超過 N 個 commit(或該 issue 之後有 ## Verify (FAIL)),提示「checklist 可能已過時,考慮補發一則」。
方案 1 較精確、範圍也小。
Actual
兩層 gate 都放行過時的 checklist,- [x] 指向已刪除的檔案。
Impact
skills/idd-close/SKILL.md Step 1.6(Keyword → Check 對映表,Pattern 3)
- 使用者流程:任何經歷「多輪 verify → 重做」的 issue。輪數愈多、checklist 愈可能過時
為什麼值得修
這個缺口的形狀跟前兩個 gate 不同,也比它們難察覺:
- honest forgetting 有
- [ ] 可見
- motivated cheating 有「宣稱與 commit 不符」可測
- 時效失準沒有任何表面訊號 —— checklist 讀起來完全正常、commit 確實存在、path 確實被碰過
而它出現的時機恰好是最容易鬆懈的地方:一個跑了三輪 verify、終於要收工的 issue。
相關
同一次執行另外開了 #322(Step 0.5 gate 的 enum 與抽取範圍)、#323(Step 6.7 worktree GC 的 exit code)。三者共通點:回傳值 / 判定通過,但事實不是那樣,而呼叫端沒有辦法從輸出看出來。
Source: surfaced during /idd-close execution on PsychQuant/plaud-mcp-connector#44(2026-08-17)。
Problem
idd-close有兩層 gate,各自防一種失敗模式(skill 自己的說法):- [ ]沒打勾不能關)兩層都不防第三種:寫的當下是真的,關的時候已經不是了。
實例
PsychQuant/plaud-mcp-connector#44的 authoritative checklist(## Implementation Complete > ### Checklist)第一項:寫下時完全屬實。但該 issue 隨後跑了三輪 verify,第三輪之後 那個檔案被刪除了(commit
9f6d22c)——因為查明它的三個 upstream ask 都站不住。close 時:
- [x],supersession activedocs/upstream-report-port-8199.md確實出現在git log --grep="#44" --name-only—— 它被新增過一次、刪除過一次,兩個都是#44的 commit兩層 gate 都放行,而 checklist 描述的交付物已經不存在。 Semantic gate 的 pattern 檢查的是「這個 path 有沒有在本 issue 的 commit 裡出現」,新增與刪除同樣命中。
當次由人補發一則 superseding
## Implementation Complete(把該項改成- [-] won't fix並寫明檔案已刪),gate 才反映真實。但那不是 gate 抓到的,是人記得。Type
bug
Expected
至少其中之一:
git log --grep --name-only中出現,另外確認它在 HEAD 是否存在(或該 issue 最後一個 commit 是否刪除它)。刪除 → warn,讓使用者確認 checklist 是否過時。## Implementation Complete的最新一則距今超過 N 個 commit(或該 issue 之後有## Verify (FAIL)),提示「checklist 可能已過時,考慮補發一則」。方案 1 較精確、範圍也小。
Actual
兩層 gate 都放行過時的 checklist,
- [x]指向已刪除的檔案。Impact
skills/idd-close/SKILL.mdStep 1.6(Keyword → Check 對映表,Pattern 3)為什麼值得修
這個缺口的形狀跟前兩個 gate 不同,也比它們難察覺:
- [ ]可見而它出現的時機恰好是最容易鬆懈的地方:一個跑了三輪 verify、終於要收工的 issue。
相關
同一次執行另外開了 #322(Step 0.5 gate 的 enum 與抽取範圍)、#323(Step 6.7 worktree GC 的 exit code)。三者共通點:回傳值 / 判定通過,但事實不是那樣,而呼叫端沒有辦法從輸出看出來。
Source: surfaced during
/idd-closeexecution onPsychQuant/plaud-mcp-connector#44(2026-08-17)。