Compare commits

...

1 Commits

Author SHA1 Message Date
Leo d6e1d6360e 薄殼複製品的漂移檢查——回答「改了雲端會不會跟」這個問題
leo 2026-08-21 問:「現在雲端 plugin 寫死如果修改會跟著改嗎?」
答案是**不會**。複製品是快照,要有人重跑 vendor-to-shell.py 再推薄殼。

實證:ISEP 從 0.3.1 一路改到 0.3.4,薄殼完全不知道,
直到我手動重跑一次。漂了沒有任何人會知道——這支就是那個「知道」。

check-vendor-drift.sh <薄殼路徑>:
  版本不同           → 直接說差多少,並印出修法指令
  版本相同但內容不同 → 列出是哪幾支檔(抓「改了東西忘了升版」)
  執行期產物排除:待驗工作單目錄/推送請求留底/*.log/__pycache__

三向實測:
  一致     → exit 0
  改一支閘 → 指名 credential-only-guard.sh 不同
  改版本號 → 指出 0.3.4 vs 0.2.0 並給修法

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 06:45:12 +08:00
+45
View File
@@ -0,0 +1,45 @@
#!/usr/bin/env bash
# check-vendor-drift.sh — 薄殼裡那份複製品,跟 ISEP 真身還一不一樣?
#
# 🔴 為什麼需要這支(leo 2026-08-21 問的那句):
# 「現在雲端 plugin 寫死如果修改會跟著改嗎?」——**不會。**
# 複製品是快照。ISEP 改了,薄殼不會自己跟;要有人重跑 vendor-to-shell.py 再推。
# 實證:ISEP 從 0.3.1 一路改到 0.3.4,雲端完全不知道,
# 直到有人手動重跑一次。**漂了沒有任何人會知道**——這支就是那個「知道」。
#
# 用法:check-vendor-drift.sh <薄殼 repo 路徑>
# exit 0 = 一致 exit 1 = 漂了(印出差在哪)
set -uo pipefail
SHELL_REPO="${1:-}"
[ -d "$SHELL_REPO/.claude/isep" ] || { echo "用法:$0 <薄殼 repo 路徑>" >&2; exit 2; }
ISEP="$(cd "$(dirname "$0")/.." && pwd)"
TMP=$(mktemp -d)
trap 'rm -rf "$TMP"' EXIT
ISEP_V=$(sed -n 's/.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p' "$ISEP/.claude-plugin/plugin.json" | head -1)
SH_V=$(sed -n 's/.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p' "$SHELL_REPO/.claude/isep/.claude-plugin/plugin.json" 2>/dev/null | head -1)
if [ "$ISEP_V" != "$SH_V" ]; then
echo "❌ 版本不同:ISEP 真身=$ISEP_V,薄殼裡的複製品=${SH_V:-(讀不到)}"
echo " 修法: python3 $ISEP/scripts/vendor-to-shell.py"
echo " 再把 $ISEP/.shell-payload/dot-claude/ 蓋進 $SHELL_REPO/.claude/ 後推"
exit 1
fi
# 版本一樣不代表內容一樣——重新產一份比對,才抓得到「改了東西忘了升版」
python3 "$ISEP/scripts/vendor-to-shell.py" >/dev/null 2>&1 || { echo "❌ vendor 產生失敗" >&2; exit 2; }
# 排除「執行期才產生」的東西:它們本來就只存在於跑過的那一邊,不是漂移。
# pending-verification/ 待驗工作單(hook 執行時寫)
# pending-main-push/ 推送請求留底
# *.log 各閘的留痕
# __pycache__/ python import 時就地產生
if diff -rq \
-x pending-verification -x pending-main-push -x '*.log' -x __pycache__ -x '*.pyc' \
"$ISEP/.shell-payload/dot-claude" "$SHELL_REPO/.claude" > "$TMP/d" 2>&1; then
echo "✅ 一致:薄殼複製品=ISEP v$ISEP_V,逐檔相同"
exit 0
fi
echo "❌ 版本相同($ISEP_V)但內容不同 —— 有人改了東西沒升版:"
head -12 "$TMP/d"
exit 1