Files
ISEP/hooks/worklist-guard.sh
T
Leo c2638668e3 ISEP 0.1.0:環境設定收成一個 plugin,本機與雲端共用一份
leo 2026-08-20:「同一個 plugin 你用,薄殼也用,保證兩邊同步」
              「我要你幫雲端做薄殼,永遠都有問題,你要做的就是這組設定
                你自己可以 dogfooding」

搬進來:41 支 hook(51 條註冊)/7 支 command/2 支 skill/23 支腳本。
不搬 .env、wiki、docs——那些是知識不是環境。

51 條 hook 路徑全部從 $CLAUDE_PROJECT_DIR/.claude/hooks/ 改成 ${CLAUDE_PLUGIN_ROOT}/hooks/,
零漏網。那正是薄殼一直壞掉的根:雲端 cwd 不是真身,寫死路徑就斷。

尚未驗證:Claude Code 能不能從私有 Gitea repo 裝 marketplace(要憑證)。
下一步就是在本機實際裝一次,通了才動雲端 bootstrap.sh。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-20 11:41:46 +08:00

57 lines
2.7 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/sh
# worklist-guard.sh — Stop hook**還有未完成的步驟就不准收工寫報告**。
#
# 🔴 leo 2026-08-08 連續兩次點破:
# 「所以你**沒有維持 loop**,而是停下來浪費了時間」
# 「**這樣不行,要解決停止 loop 的問題**」
#
# 病根(誠實的):既有的 self-drive-police 是**事後**勸告——它在我已經停下來之後才響,
# 而我對它的回應是**再寫一段散文**,等於又停一次。**勸告治不了「停」這個動作**,
# 因為停下來寫字正是我回應它的方式。
#
# 治法:把「還沒做完」變成**環境事實**,讓收工這件事在事實上不成立。
# · 開一條鏈之前,先把剩下的步驟寫進 /tmp/.worklist-<session_id>(一行一步)
# · 做完一步就把那行刪掉
# · 只要檔案還有內容 ⇒ 本 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 <<EOF
🔁 Loop 警察:**這條鏈還有 $remaining 步沒做完,現在不是收工的時候。**
【leo 2026-08-08】「所以你**沒有維持 loop**,而是停下來浪費了時間。」
【leo 2026-08-08】「**這樣不行,要解決停止 loop 的問題。**」
還沒做完的:
$(grep -vE '^[[:space:]]*$' "$WL" | sed 's/^/ · /')
**不要寫報告,直接做下一步。** 報告等整條鏈跑完再寫一次就好——
中途每停一次寫一段,就是 leo 說的「停下來浪費時間」。
做完一步 ⇒ 從 $WL 刪掉那一行。
真的要中止(撞人閘/前提翻掉/leo 改方向)⇒ 刪掉整個檔,並在回覆說明為什麼中止。
EOF
exit 2