fix/skill-check-compliance-and-flow
develop
tools/plugins-root.sh
JSC_PLUGINS_ROOT
tools/find-skill-refs.sh
tools/inventory-tooling.sh
tools/list-skills.sh
tools/sync-domains.sh
gitea.sh
tools/sync-marketplace.sh
tools/verify-skill-removed.sh
tools/ste100-lint.sh
tools/sync-skill-manifest.sh
set -e
tools/lint-scripts.sh
tools/deploy-route.sh
references/deploy-verify.md
templates/tooling-contents.md
templates/tooling-page.md
skills/tooling-guide/SKILL.md
inventory-tooling.sh
skills/skill-new/SKILL.md
skills/skill-update/SKILL.md
skills/skill-delete/SKILL.md
skills/skillset-update/SKILL.md
skills/skill-check/SKILL.md
lint-scripts.sh
skills/ste100-sync/SKILL.md
references/guidelines.md
README.md
plugin.json
jsc-hooks
jsc-gitea
.claude-plugin/plugin.json
.codex-plugin/plugin.json
deploy-route.sh
ste100-lint.sh
實際跑過、結果如下:
bash -n
dash -n
tools/
tools/lint-scripts.sh .
SKILL.md
/root/plugins
tools/deploy-route.sh .
route deploy
default-branch master
沒有執行、據實列出:
sync-domains.sh
sync-marketplace.sh
list-skills.sh
find-skill-refs.sh
verify-skill-removed.sh
sync-skill-manifest.sh
jsc-cli:deploy
以 plugin 形式安裝時,腳本會落在 CLI 的 plugin 快取目錄。 六支腳本原本一律取「腳本位置的上兩層」當技能組根目錄,這時一定推錯。 這一輪例行稽核的第一步就實際踩到:不先手動設環境變數,腳本根本跑不動, 而叫用它們的技能說明也沒提要設,等於留了一個必炸的預設值。 把推導規則抽成共用腳本,依序試環境變數、從目前目錄往上找、 腳本位置的上兩層、家目錄底下的 plugins,並以 gitea.sh 在不在當判準。 marketplace 每個 domain 存取庫都帶一份,單看它會把 domain 誤判成根。 推不出來就結束並指名要設環境變數,同時列出試過的每一個候選, 呼叫端一眼看得出要設什麼。只 clone 單一存取庫的環境留了逃生門: 環境變數有設且是目錄就照用,並在錯誤輸出提醒。 順手補上語言檢查與 manifest 同步兩支腳本的結束碼宣告與環境變數說明。 沒有宣告,呼叫端只能猜;猜錯就把失敗當成功。
技能盤點以前只回到對話裡,換一台機器就得重跑才知道裝了什麼。 現在新增技能盤點這個 wiki 頁類型,雜湊取「主機、工具名稱、登入帳號」三段。 每支 CLI 各有自己的 plugin 集合,也各有自己的 hook 接線,那是互相獨立的事實。 少了工具名稱那一段,同一台機器上五支 CLI 會算出同一個雜湊,五份盤點互相覆蓋, 讀的人還看不出被蓋掉。技能盤點新增寫入這兩頁的步驟,整步規定必須開 sub agent。 兩份樣板刻意分開:內容頁每次盤點覆寫整頁,目錄頁只更新自己那一列, 兩者的寫入語意剛好相反,合成一份遲早有人把別台機器的紀錄刪掉。 四支異動技能原本在部署完的同一個工作階段,就叫用剛做好的技能。 部署收尾自己立起重啟閘門,那支技能必被擋下,驗證做不完。 解法不是把它加進豁免清單。豁免擋得住閘門,擋不住「行程還載著舊版」這件事, 硬過關驗到的是舊版行為,等於假通過。所以把判路線、部署、驗證、失敗分流 抽成一份共用說明,驗證一律另開 CLI 行程執行,四支技能只留一行指標指過去。 新增腳本檢查工具,一次做完語法、執行權限與結束碼宣告三項檢查, 只被 source 的函式庫豁免後兩項,而且逐支記在錯誤輸出,不靜默略過。 新增部署路線判定工具,判定改動有沒有進存取庫的預設分支, 取代四支技能各抄一段、各自漂移的散文;判不出來就回報停下,不自己挑路線走。 同時把四支技能裡的中文段落抽到共用說明、指標改回英文, 修正六處相對路徑,把技能盤點的模糊描述改成查得出來的條件, 並讓 manifest 同步的每一個呼叫端逐碼分流。 七支技能改為併行執行:例行稽核從九步併成七步,技能盤點併成六步。 技能盤點不再重跑盤點腳本內部已經跑過的三支腳本, 而那三支原本兼作獨立交叉檢查,拿掉就少一層保護, 所以把少掉的是什麼、風險由誰擋住,明白寫進 Notes,不當作沒發生。
版本前置檢查的豁免表只列了四項,重啟閘門的豁免表少了 hook 修復技能。 照著這兩張表設定,hook 壞掉時唯一的修復路徑會被自己擋住,修不好也繞不過。 兩張表逐項對齊三方實作與腳本現況,補成七項與十項, 並寫明各自的唯一真實來源是哪一支 hook 腳本,兩邊以後要一起改。 Wiki 頁命名總表原本替維護類型列了內容頁。 技能與樣板都沒有產生那一頁的步驟,照著總表找,只會找到一個不存在的頁。 改成只列目錄頁,並寫清楚維護登記全寫在目錄頁的表格裡; 要補內容頁就先補技能步驟與樣板,不能只在總表上寫著。 另外登記技能盤點頁的類型、環境變數與雜湊來源,說明為什麼雜湊要帶工具名稱, 補上唯讀稽核要帶唯讀旗標、行數一律讀腳本自己印的那一行兩項檢查, 並把新增的共用說明、兩份樣板與三支工具寫進 README 的檔案一覽。
這次異動用到 hook 的重啟閘門豁免清單,也用到 hook 那份簡體字表。 相依範圍沒跟著調,裝到舊版 hook 的機器會在部署之後被自己的閘門鎖住, 而且語言檢查與 hook 會各自認一份字表,判定不一致。 三份 manifest 一起把版本往上帶一號,補上 hook domain 的相依下限, 並拉高 gitea domain 的相依下限,讓版本前置檢查擋得住不相容的組合。
No dependencies set.
The note is not visible to the blocked user.
摘要
變更內容
tools/plugins-root.shJSC_PLUGINS_ROOT並列出試過的候選tools/find-skill-refs.shtools/inventory-tooling.shtools/list-skills.shtools/sync-domains.shgitea.shtools/sync-marketplace.shtools/verify-skill-removed.shtools/ste100-lint.shtools/sync-skill-manifest.shset -e的說明,呼叫端才有辦法逐碼分流,不把環境故障當同步成功tools/lint-scripts.shtools/deploy-route.shreferences/deploy-verify.mdtemplates/tooling-contents.mdtemplates/tooling-page.mdskills/tooling-guide/SKILL.mdinventory-tooling.sh內部已經跑過的三支腳本;步驟由十步併成六步;三處模糊描述改成查得出來的條件;被拿掉的獨立交叉檢查寫進 Notesskills/skill-new/SKILL.mdskills/skill-update/SKILL.mdskills/skill-delete/SKILL.mdskills/skillset-update/SKILL.mdskills/skill-check/SKILL.mdlint-scripts.sh;三組審查改為併行並在合併時去掉重複項;步驟由九步併成七步;hook 冒煙的行數改讀腳本自己印的那一行,不寫死數字;唯讀稽核帶唯讀旗標skills/ste100-sync/SKILL.mdreferences/guidelines.mdREADME.mdplugin.jsonjsc-hooks相依下限、拉高jsc-gitea相依下限.claude-plugin/plugin.json.codex-plugin/plugin.json設計重點
gitea.sh在不在當判準。marketplace 每個 domain 存取庫都帶一份,單看它會把 domain 誤判成根。jsc-gitea,這時硬擋會讓「請設環境變數」變成解不開的死路,所以環境變數有設且是目錄就照用,並在錯誤輸出提醒。lint-scripts.sh沒腳本可掃回三號、deploy-route.sh判不出來回一號、ste100-lint.sh沒給對象回二號,三支都在檔頭寫明不等於通過。lint-scripts.sh每豁免一支就在錯誤輸出記一行,摘要也帶函式庫支數,看得出誰被跳過。測試結果
實際跑過、結果如下:
bash -n與dash -n:tools/底下十一支腳本全部通過,包含三支新增腳本。tools/lint-scripts.sh .:結束碼 0,印出「腳本檢查通過:11 支(語法、可執行、結束碼宣告),其中 0 支判定為函式庫」。tools/ste100-lint.sh:對README.md、references/guidelines.md、references/deploy-verify.md、兩份樣板與七支SKILL.md全掃,結束碼 0,無命中。tools/plugins-root.sh:直接執行,結束碼 0,印出/root/plugins,與預期的根目錄相同。tools/deploy-route.sh .:結束碼 0,印出route deploy與default-branch master。這是對提交前的分支 HEAD 判的,只證明腳本跑得動、欄位齊全,不代表本次改動已在預設分支上。jsc-hooks的簡體字表(1006 字),零命中。沒有執行、據實列出:
sync-domains.sh、sync-marketplace.sh、list-skills.sh、inventory-tooling.sh、find-skill-refs.sh、verify-skill-removed.sh、sync-skill-manifest.sh都沒有實跑,這些需要連 Gitea 正本,或需要其他 domain 存取庫在本機。jsc-cli:deploy、新行程的技能驗證,以及技能盤點兩頁的 wiki 實寫都沒有執行。共用部署驗證流程與技能盤點步驟目前只有文件與腳本層的檢查,端到端還沒跑過。前置 Push Request