#!/usr/bin/env bash # claim-verify-police.sh — 待驗工作單還在,就不准收工(Stop;leo 2026-08-18 立) # # 這支是 subagent-claim-worksheet.sh 的另一半。 # 那支在 SubagentStop 時把 subagent 的宣稱寫成一張檔案;這支在我要停下時檢查: # # **那張檔還在不在?** # # ── 為什麼判準是「檔案存不存在」 ──────────────────────────────────── # leo 2026-08-17:「你在**文字層**封路⋯⋯自然語言的變體是無限的,blacklist 永遠追不完。 # 封路哲學之所以有效,是因為它封的是**動作**——動作有限且可枚舉。」 # ⇒ 「我驗過了」這句話可以有無限種寫法,但**檔案只能被動作刪掉**。 # 所以這支不讀我的措辭,只看磁碟。 # # ── 怎麼過這道閘(都是動作,都留痕)───────────────────────────────── # ① 真的驗了 → 把證據寫進回覆/票,然後刪掉那個檔 # ② 有幾條不需要驗 → 在檔裡寫下理由,再刪掉(理由留在 git 或票上) # ③ 是人閘 → 走三件機械動作(Human + 指派 + 它自己的票),再刪掉 # # 🔴 **不准為了過閘而直接 rm 掉卻什麼都沒做。** 那等於自己拆掉自己的閘—— # 而這正是 leo 2026-08-10 說的「規則早就存在,但沒有任何機制驗證有沒有照做」。 # # ── 迴圈安全 ──────────────────────────────────────────────────── # stop_hook_active 為真 ⇒ 已經擋過一次,放行。至多提醒一次,不卡死。 # # ── 留痕 ──────────────────────────────────────────────────────── INPUT=$(cat) DIR="$CLAUDE_PROJECT_DIR/.claude/pending-verification" LOG="$CLAUDE_PROJECT_DIR/.claude/hooks/claim-verify-police.log" ACTIVE=$(printf '%s' "$INPUT" | python3 -c ' import json,sys try: print("1" if json.load(sys.stdin).get("stop_hook_active") else "0") except Exception: print("0") ' 2>/dev/null) if [ "$ACTIVE" = "1" ]; then printf '%s\tSKIP:already-nudged\n' "$(date +%FT%T)" >> "$LOG" 2>/dev/null exit 0 fi # 只算「今天以內」的單子——放太久的(跨 session 殘留)不該無限期卡住新工作, # 但仍會被列出來提醒。 FILES=$(ls -1 "$DIR"/claims-*.md 2>/dev/null) if [ -z "$FILES" ]; then printf '%s\tSKIP:no-pending\n' "$(date +%FT%T)" >> "$LOG" 2>/dev/null exit 0 fi N=$(printf '%s\n' "$FILES" | grep -c . ) printf '%s\tBLOCK:%s-pending\n' "$(date +%FT%T)" "$N" >> "$LOG" 2>/dev/null { echo "🔍 查證警察:有 $N 張**待驗工作單**還沒處理掉,不准收工。" echo echo "【leo 2026-08-18 的規格】" echo " 「subagent 做完事⋯⋯**它說可以,你去驗證;它說不行,你想辦法,不行再報告**," echo " 這解決一半的未查證。你常常直接把 subagent 說的不經查證就回報," echo " **它視野小,它說的你有更多資訊去檢驗。**」" echo echo "━━ 還沒處理的單子 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" printf '%s\n' "$FILES" | while read -r f; do [ -n "$f" ] || continue OKN=$(grep -c '^- \[ \]' "$f" 2>/dev/null) echo " · ${f#"$CLAUDE_PROJECT_DIR"/} ($OKN 條待處理)" done echo echo "━━ 怎麼過這道閘(三選一,都是動作)━━━━━━━━━━━━━━━━━━" echo " ① **它說可以** → 你自己跑一次(測試/curl/瀏覽器/git),把證據貼出來,再刪掉那個檔" echo " ② **它說不行** → 先換路徑、查憑證地圖;要說「被擋」就得**自己撞一次並貼拒絕原文**" echo " ③ **真的是人閘** → 三件機械動作:\`Human\` 標籤 + 指派給 Leo + **一張它自己的票**" echo " (leo 08-18:「要進入人閘,標示 human 叫我去開,**不是默默塞進錯的地方**」)" echo echo "🔴 **不准只是 rm 掉了事。** 那是自己拆掉自己的閘——" echo " 正是 leo 08-10 講的「規則早就存在,但沒有任何機制驗證有沒有照做」。" echo echo "📌 為什麼有這道閘:2026-08-18 總管連續三次把**沒驗過的判斷**當成情報交出去," echo " 其中第二次還是為了「更正」第一次而發明的新猜測。" echo " leo:「你給我不正確的資訊⋯⋯subagent 說不通你沒有驗。」" } >&2 exit 2