Files
ISEP/hooks/skill-deploy-drift-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

53 lines
3.1 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.
#!/usr/bin/env bash
# skill-deploy-drift-guard.sh — SessionStart:全機載入的那套 skill 跟它的正本對不上時,講出來
#
# 為什麼存在(2026-08-16 查出來的實況):
# `arcrun-kbdb-guardrails` 這套 skill 有兩份——
# 正本 arcrun_harness/.claude/skills/arcrun-kbdb-guardrails/ 有版控
# 產物 ~/.claude/skills/arcrun-kbdb-guardrails/ **全機每個專案真正載入的是這份**
# 它們已經分家過一次,而且不是「一份新一份舊」:各自有對方沒有的東西。
# 家目錄那份長出了一整層 D91 影子表防守,**從來沒進過 git**——差一點就在同步時被蓋掉。
# 反方向也發生過:kbdb guard 的誤擋 bug 修好過,但修在別的拷貝上,
# 於是它透過這份沒同步的產物又長回來(Leo/InkStoneCo#23,同一個形狀第 7 次)。
#
# 🔑 這支 hook 的用途不是同步,是**讓「它們又不一樣了」這件事有人知道**。
# 同步是 `arcrun_harness/scripts/skill-deploy.sh` 的事,判斷也在那支裡;
# 本檔**刻意只是一層殼**:沒有自己的邏輯,就沒有自己的漂移。
#
# 三條設計約束:
# 1. 沒事不出聲——乾淨時完全靜音,才不會被當成背景雜訊而被無視。
# 2. 從不擋人——SessionStart 一律 exit 0,這是通知,不是閘。
# 3. 環境不在就安靜退場——沒有 harness repo(雲端 session、別台機器)不該報錯。
#
# ⚠️ 已知範圍限制:本 hook 掛在 InkStoneCo 的 SessionStart,所以只有「在 InkStoneCo 開
# session」時會檢查。那份 skill 是全機載入的,在別的專案裡編輯它一樣會漂,只是要等
# 下次有人開 InkStoneCo 才會被指出來。之所以先這樣,是因為改 ~/.claude/settings.json
# 等於動全機共用框架——那是要 leo 點頭的事,不是這支腳本自己能決定的。
set -uo pipefail
DEPLOY_SH="${CLAUDE_PROJECT_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)}/arcrun_harness/scripts/skill-deploy.sh"
# 環境不在 → 安靜退場(約束 3
[ -f "$DEPLOY_SH" ] || exit 0
OUT="$(bash "$DEPLOY_SH" check 2>&1)" && exit 0 # 乾淨 → 一個字都不印(約束 1
# 走到這裡代表有漂移。SessionStart 用 stdout 把訊息帶進脈絡。
cat <<EOF
🧬 skill 漂移警報:\`arcrun-kbdb-guardrails\` 的正本與「全機實際載入的那份」對不上。
$OUT
先讀懂標籤再動手,**不要反射性地 deploy**
TAMPERED / FORKED 🔴 產物端有版控裡沒有的修改。直接部署會把它們永久刪掉——
先把那些修改收回正本(2026-08-15 D91 那層防守就是這樣差點沒的)。
STALE 正本前進了、產物沒跟上 → bash arcrun_harness/scripts/skill-deploy.sh deploy
EXTRA 產物端多出來的檔。deploy 不會清,要不要刪由人決定。
🔑 為什麼這件事值得在開工時就講:這份產物是**模型真正讀到的教材**。
它落後的時候不會報錯、不會變慢、不會有任何症狀——
只會安靜地教錯的東西,而且錯得很有權威。
EOF
exit 0