Leo
|
47ed778cc4
|
改走「直接複製進薄殼 repo」,並修掉一支會偷跑指令的閘
leo 2026-08-21:「你應該把 Plugin 直接裝進 Github repo,從本地直接複製就好了」
為什麼這條對:雲端 session 是 fresh clone 薄殼 repo,而 setup script 讀不到
環境變數。走 marketplace 就得同時處理憑證、repo 可見性、環境快取三件事——
今天這三件各失敗過一次。複製進 repo 之後,clone 下來就有,沒有任何前置條件。
新增 scripts/vendor-to-shell.py:
把 hooks/skills/commands/scripts/.claude-plugin 整份複製到 .claude/isep/,
並把 54 條 hook 註冊改寫成薄殼裡的絕對路徑。
保留 CLAUDE_PLUGIN_ROOT 這個變數名(44 支閘內部靠它定位自己的 lib/),
只是把它指到複製過來的那份。
冒煙測試(54 條註冊全跑一遍,找路徑壞掉的):
第一輪 4 條壞 → 3 條是 log 目錄不存在(已補建 .claude/hooks/)
1 條在真身也一樣壞 ⇒ 不是複製造成的
第二輪 0 條壞
順手修掉那支既有 bug:wiki-first-search.sh
python3 -c 用雙引號,註解裡的反引號被 shell 當指令替換
⇒ 這支閘每次觸發都在偷跑 bge-m3 與 head changelog.md。
改成全形引號後實測靜默 exit 0。
(crude grep 掃出 6 支疑似,但冒煙測試證明只有這一支真的中——
再一次:證據勝過掃描。)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-21 00:51:00 +08:00 |
|
Leo
|
03d9782f22
|
查了官方文件才發現:setup script 根本讀不到環境變數,而 exit 1 會鎖死 session
leo 問「寫以前為什麼不查」——沒有藉口,我假設了兩件事都沒查,兩件都是錯的。
① setup script 讀不到 Environment variables
官方原文:Each session copies the environment's values once, at startup,
into ordinary environment variables
而 setup script 是 before Claude Code launches 跑的 ⇒ 注入在它之後。
⇒ 把 token 放進 Environment variables 再要 setup script 讀,永遠讀不到。
證據吻合:leo 的變數設對了、值也跟本機同一把(長度 40、頭尾一致),
而腳本回報找不到。
② exit 非零會讓整個 session 開不起來
官方原文:Exit zero: if the script exits non-zero, the session fails to start.
前一版為了大聲失敗用 exit 1 ⇒ 直接造成 Session initialization failed。
⇒ 現在一律 exit 0,失敗寫進 /tmp/.isep-setup-report。
本機三向實測:
無變數(雲端真實情況)→ exit 0,印出說明,不擋 session
有變數(未來平台若改行為)→ 設 git 認證並驗證
ls-remote 加 timeout 45(本機曾掛住近 4 分鐘)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-21 00:39:48 +08:00 |
|
Leo
|
36d8e05a32
|
認證驗證加 timeout:掛住比失敗更糟
2026-08-21 本機隔離測試:git ls-remote 掛住近 4 分鐘不回。
setup 卡在那裡看起來像還在跑,不會有人知道它壞了。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-21 00:34:34 +08:00 |
|
Leo
|
135637291c
|
B4 的探針我自己沒撞過,實撞後發現它根本不會擋
v0.3.1 我把 B4 從 git tag 換成「寫 __GITEA_TOKEN__ 進 /tmp/x.md」,
說它會被 credential-only-guard 擋下。今天實撞:exit 0,閘完全沒反應。
原因:那支閘刻意豁免 .md/docs//wiki/(文件本來就要能談論這些字串)。
它只管會被執行的產物:*workflow*/.yaml/.yml/installer/worker.js/wrangler。
改成 /tmp/wf.yaml 後三向實測:
違規 workflow.yaml 帶佔位符 → exit 2 credential 鐵律攔截
同檔用 {{credential.gitea_token}} → exit 0(正確放行)
.md 談論同一個字串 → exit 0(正確豁免)
薄殼指標端同樣實測:真身在+違規 → exit 2。
這是同一個病的第四次:修假綠的那一刀,自己又是沒撞過就寫。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-21 00:33:44 +08:00 |
|