Problem
process-attachments.sh 的 check 與 verify 對 corrupt _manifest.json(無效 JSON)都 silent PASS exit 0:
check:KNOWN=$(jq -r '.files[].url' "$MANIFEST" 2>/dev/null | sort -u || true) — jq parse 失敗被 2>/dev/null || true 吞掉 → KNOWN 空 → 與 CURRENT 比對照常進行 → 實測輸出 ✓ Manifest up-to-date ( files) exit 0(注意 file count 是空字串)
verify:manifest-listed files 的迴圈經 process substitution 讀 jq 輸出 — jq 失敗時 substitution 的 exit 永不傳播 → 迴圈零次執行 → 實測輸出 ✓ All attachments present exit 0
而 verify 是 idd-close Step 1.4 的 gate — corrupt manifest 會讓 close gate 拿到 false PASS。
Type
bug
Reachability(非理論)
_manifest.json 是 git-tracked(deliberate design,.claude/.idd/attachments/ 不在 gitignore)→ merge conflict markers(<<<<<<<)是真實的 corruption path。實測 NOT VALID JSON 內容 → check/verify 雙雙 exit 0。
Expected
corrupt / unparseable manifest → 非零 exit + 可見錯誤(建議語意:同 #186 後的 exit 2 = 資料層失敗),引導使用者重跑 download 重建 manifest。不得 silent PASS — 這正是 #186 同款「失敗被吞成正常」class,只是位置從 detect_urls 移到 manifest 讀取端。
Refs
#186 verify Devil's Advocate Task 4 發現(實測重現含輸出);同 class 前例 #186(detect_urls)
Source: surfaced during /idd-verify #186 follow-up triage (Step 5b)
Problem
process-attachments.sh的check與verify對 corrupt_manifest.json(無效 JSON)都 silent PASS exit 0:check:KNOWN=$(jq -r '.files[].url' "$MANIFEST" 2>/dev/null | sort -u || true)— jq parse 失敗被2>/dev/null || true吞掉 →KNOWN空 → 與CURRENT比對照常進行 → 實測輸出✓ Manifest up-to-date ( files)exit 0(注意 file count 是空字串)verify:manifest-listed files 的迴圈經 process substitution 讀 jq 輸出 — jq 失敗時 substitution 的 exit 永不傳播 → 迴圈零次執行 → 實測輸出✓ All attachments presentexit 0而
verify是idd-closeStep 1.4 的 gate — corrupt manifest 會讓 close gate 拿到 false PASS。Type
bug
Reachability(非理論)
_manifest.json是 git-tracked(deliberate design,.claude/.idd/attachments/不在 gitignore)→ merge conflict markers(<<<<<<<)是真實的 corruption path。實測NOT VALID JSON內容 → check/verify 雙雙 exit 0。Expected
corrupt / unparseable manifest → 非零 exit + 可見錯誤(建議語意:同 #186 後的 exit 2 = 資料層失敗),引導使用者重跑
download重建 manifest。不得 silent PASS — 這正是 #186 同款「失敗被吞成正常」class,只是位置從 detect_urls 移到 manifest 讀取端。Refs
#186 verify Devil's Advocate Task 4 發現(實測重現含輸出);同 class 前例 #186(detect_urls)
Source: surfaced during /idd-verify #186 follow-up triage (Step 5b)