c2638668e3
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>
67 lines
3.0 KiB
Bash
Executable File
67 lines
3.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# pending-changes-retired.sh — `pending-changes.md` 已廢除,寫它一律擋下(leo 2026-08-19)
|
||
#
|
||
# leo 原話:
|
||
# 「那種形式根本難以回覆,每個都長篇大論也不易閱讀,**而且寫入後不會提醒**,
|
||
# 如果要寫入 pending changes,一律改用票,這個檔案廢除,
|
||
# 可以改成一張 index 指向票號及連結。」
|
||
#
|
||
# 🔴 為什麼要有這道閘,而不是只改文件:
|
||
# 規則躺在 CLAUDE.md/SDD-LIFECYCLE 裡,已經被證明不夠——
|
||
# wiki mistakes 有一整條「以為『規範存在』=『AI 會照做』」。
|
||
# 而這個檔的特性讓違規特別難發現:**寫進去不會通知任何人**,
|
||
# 所以「寫了沒人擋」與「寫了沒人看」會同時成立,債靜靜地長。
|
||
#
|
||
# 擋什麼:Write/Edit/MultiEdit 指向任何 repo 的 `3-specs/pending-changes.md`。
|
||
# 不擋什麼:archive/ 底下的存底(那是唯讀歷史,路徑不同)、以及讀取。
|
||
#
|
||
# 誠實界線(兩條,都要留著):
|
||
# ① 它擋的是**這個路徑**。有人另立一個叫 `pending-changes-v2.md` 的檔照樣繞得過——
|
||
# 那屬於語意層,這道閘不假裝擋得到。
|
||
# ② 它掛在 Write/Edit/MultiEdit 上,**用 bash(heredoc/sed/cat >)寫檔不會經過它**。
|
||
# 這不是疏漏是取捨:PreToolUse 攔不到 shell 內部做什麼;要連那條也擋,得改成
|
||
# Bash matcher 上的字串比對,而那會把「只是提到這個檔名的句子」一起擋掉
|
||
# (`inkstone/InkStoneCo#56` 正在處理的就是這個形狀)。
|
||
set -euo pipefail
|
||
input="$(cat)"
|
||
|
||
file_path="$(printf '%s' "$input" | python3 -c '
|
||
import sys, json
|
||
try:
|
||
d = json.load(sys.stdin)
|
||
print(d.get("tool_input", {}).get("file_path", "") or "")
|
||
except Exception:
|
||
print("")
|
||
' 2>/dev/null || true)"
|
||
|
||
[ -z "$file_path" ] && exit 0
|
||
|
||
# archive/ 底下的存底放行(唯讀歷史,不是提案緩衝區)
|
||
case "$file_path" in
|
||
*/archive/*) exit 0 ;;
|
||
esac
|
||
|
||
case "$file_path" in
|
||
*/3-specs/pending-changes.md|3-specs/pending-changes.md|*/pending-changes.md)
|
||
cat >&2 <<'MSG'
|
||
❌ BLOCKED:`pending-changes.md` 已於 2026-08-19 廢除,不准寫入。
|
||
|
||
leo 廢除它的理由(原話):
|
||
「那種形式根本難以回覆,每個都長篇大論也不易閱讀,**而且寫入後不會提醒**。」
|
||
|
||
要提規格層變更 → **開一張 Gitea 票**,不是寫檔:
|
||
· 標題:👤 裁決題:<一句話>
|
||
· 標籤:Human + s/triage · 指派:Leo
|
||
· 內文只要三段:**要你裁的** / **怎麼回**(給選項,能回一個詞最好) / **誠實標記**
|
||
· 開完就停下等 leo 回覆——「停下等 confirm」這條沒有變,變的只是它住在票上
|
||
|
||
🔴 不要把提案正文貼進票裡當長篇大論。長脈絡寫 wiki,票上只留決策題與連結。
|
||
|
||
原文存底(唯讀):system-dev/docs/3-specs/archive/pending-changes-archive-20260819.md
|
||
規則出處:CLAUDE.md「規格變更唯一路徑」、3-specs/SDD-LIFECYCLE.md 第 3 條
|
||
MSG
|
||
exit 2
|
||
;;
|
||
esac
|
||
exit 0
|