#!/bin/sh # worklist-guard.sh — Stop hook:**還有未完成的步驟就不准收工寫報告**。 # # 🔴 leo 2026-08-08 連續兩次點破: # 「所以你**沒有維持 loop**,而是停下來浪費了時間」 # 「**這樣不行,要解決停止 loop 的問題**」 # # 病根(誠實的):既有的 self-drive-police 是**事後**勸告——它在我已經停下來之後才響, # 而我對它的回應是**再寫一段散文**,等於又停一次。**勸告治不了「停」這個動作**, # 因為停下來寫字正是我回應它的方式。 # # 治法:把「還沒做完」變成**環境事實**,讓收工這件事在事實上不成立。 # · 開一條鏈之前,先把剩下的步驟寫進 /tmp/.worklist-(一行一步) # · 做完一步就把那行刪掉 # · 只要檔案還有內容 ⇒ 本 hook exit 2 ⇒ **我停不下來,只能繼續做下一步** # # 這跟今天立的其他幾道同形狀:**規則被讀到 ≠ 會被執行,要讓環境替我執行。** # (leo 的母原則:環境邊界取代邏輯判斷。) # # 逃生口:鏈真的該中止(撞人閘、前提翻掉、leo 改方向)⇒ 直接刪掉那個檔, # 並**在回覆裡說明為什麼中止**——留痕,不是默默放掉。 set -eu SID=$(cat 2>/dev/null | python3 -c ' import sys, json try: print(json.load(sys.stdin).get("session_id", "") or "nosid") except Exception: print("nosid") ' 2>/dev/null || echo nosid) WL="/tmp/.worklist-$SID" [ -f "$WL" ] || exit 0 # 空白行不算。 # 🔴 2026-08-08 自己踩到:原本寫 `grep -c ... || echo 0`——grep 在 0 命中時**回傳碼非零**, # 於是 `|| echo 0` 也跑,remaining 變成 "0\n0" ⇒ `-eq` 判斷炸掉 ⇒ **清單空了還是擋**。 # 這是「用 grep 回傳碼當有無」的老坑,改成只認它印出來的數字。 remaining=$(grep -cvE '^[[:space:]]*$' "$WL" 2>/dev/null | head -1) [ -z "$remaining" ] && remaining=0 [ "$remaining" -eq 0 ] && { rm -f "$WL"; exit 0; } cat >&2 <