Leo
|
2f43ecc346
|
信標自己講「這一份是誰」——vendor 還是 plugin 快取
leo 的雲端驗收整整卡了一輪在這個問題上:同一台機器可能有兩份 ISEP,
兩份都會印信標,版本號一樣時分不出誰在說話。而「閘從哪一份走」正是決定
「另一份能不能拆」的唯一判準。
總管上一版設計的判準(叫雲端跑 env | grep CLAUDE_PLUGIN_ROOT)也是錯的:
那個變數是 hook 呼叫當下才注入的,在 Bash 工具的 env 裡本來就看不到
⇒ 空輸出不代表沒載入,那個探針從一開始就答不了這題。
改法:讓路徑自己講。快取在 plugins/cache/ 底下,vendor 的在 repo 的 .claude/ 底下。
三向實測:
/root/.claude/plugins/cache/inkstone/isep/0.3.9 → 來源:plugin(marketplace 裝的)
/home/user/inkstoneco/.claude/isep → 來源:vendor(repo 裡的複製本)
其他路徑 → 來源不明(不假裝知道)
inkstone/InkStoneCo#57
|
2026-08-23 21:02:45 +08:00 |
|
Leo
|
b1f399f8b9
|
信標改數「真的被註冊的閘」——它一直多報一支樣板
leo 的雲端驗收(2026-08-23)抓到:信標說 44 支,`ls hooks/ | wc -l` 是 49,對不上。
追下去是 `ls "$ROOT"/hooks/*.sh | wc -l`:
把 `pre-write-guard.template.sh`(樣板,不是閘)與兩支沒掛註冊的輔助檔一起算進去。
🔴 這個數字是 leo 判斷「這個 session 到底有沒有閘」的唯一介面——**多報就是假綠**。
改成數 `hooks.json` 裡註冊過的唯一 `.sh`;hooks.json 讀不到才退回檔案數(且排除樣板)。
實測兩向:
正向(真的 plugin 根目錄) → 42(與 hooks.json 註冊數一致)
反向(沒有 hooks.json 的假根) → 2(三個檔裡有一個是 .template.sh,沒算進去)
查過歷史:本檔自 daa1674 建立以來只有那一版,沒有別的分支修過這段。
inkstone/InkStoneCo#57
|
2026-08-23 16:52:01 +08:00 |
|
Leo
|
daa1674a20
|
雲端零閘的兩個真因:setup 從不驗證自己+沒有任何 release 撐版本號
2026-08-20 雲端 session 的閘全滅,而三個驗證步驟全部回綠。
今晚在隔離 HOME(GIT_CONFIG_NOSYSTEM=1)重現,把兩件事分開了:
① setup script 的寫法是對的
裸環境失敗、加了 url.insteadOf 就成功 —— x-access-token 這個使用者名稱
Gitea 也接受。所以先前我對 leo 說「URL 重寫沒作用到 marketplace 這條路徑」
是錯的,這裡更正。
(前兩次測試之所以誤導,是因為 /etc/gitconfig 的 macOS keychain helper
還在幫忙 —— 「隔離 HOME」並沒有隔離系統層設定。同一個病第三次。)
② 真正的缺陷是這支腳本從不驗證自己
設完就結束。token 沒生效也不出聲 ⇒ setup log 一片綠、
session 開起來才發現 marketplace 拉不下來,而那時已經沒有任何線索。
本次加兩道自我驗證:git 認證通不通、marketplace 有沒有就位,
任一不通就 exit 1 並印出該查什麼。
③ 新增 isep-presence-beacon.sh(信標,不是閘)
SessionStart 報「ISEP v幾 已載入、幾支閘」。
它的全部意義是鑑別力:這行住在 plugin 裡,所以看得到就一定載入了,
看不到就是零閘。不像 git tag(在三支閘的白名單裡,閘死了照樣過)。
④ plugin.json 0.0.0 → 0.3.0
查清楚了:0.0.0 不是漂移,是誠實 —— ISEP 一個 tag 都沒有,從沒發過 release。
而這正是「雲端拿不到更新」的另一半:claude plugin update 比對版本號,
沒有 release 就永遠沒有新號碼可比。所以這一刀的收工是真的打 tag 發版。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-20 22:59:21 +08:00 |
|