釋出 jsc-cli 0.2.6:相依版本不符改為照樣更新並提醒,新增技能行為清單 #46

Merged
admin merged 7 commits from develop into master 2026-08-31 08:18:28 +00:00
Member

摘要

  • 需求描述:盤點所有技能組,整理出所有技能的行為清單作為技能驗證的參考基準;相依技能版本不符時不得跳過更新,改為阻擋執行。
  • 計畫名稱:無
  • 計畫頁:無
  • 分析頁:無

變更內容

檔案 為什麼改
references/behaviors.md 新增。5 支技能的行為清單,作為技能驗證的參考基準
tools/deploy.sh 相依版本不符不再跳過該 domain,改印 warn 並照樣更新;判不出結論印 note;檢查腳本自己出錯才 skip 並記為失敗
tools/check-requires.sh 退出 1 拆成 1(相依不符)與 4(判不出結論),檔頭同步
skills/deploy/SKILL.md 同步新行為與四種退出碼分流
README.md 兩處仍寫舊的跳過行為,改掉
三份 manifest 版本同步到 0.2.6

設計重點

  • 跳過更新會讓落後的 domain 永遠等不到那一版相依,形成死鎖。阻擋改放在技能呼叫那一層,由 jsc-hooks/hooks/version-guard.sh 執行。
  • check-requires.sh 的退出 1 原本混了「相依版本不符」與「判不出結論」。改成照樣更新之後,環境壞掉會被說成版本落後,操作者照著補版本補不到問題點,所以拆成兩碼、deploy.sh 分別印 warn 與 note。

測試結果

  • 四種退出碼 × 五支 CLI 實測:退出 1 與 4 都照樣執行更新指令、result=ok、rc=0;退出 2 才跳過、result=fail、rc=1。
  • check-requires.sh 的 0、1、2、4 逐一以真實參數實測,與檔頭宣告相符。
  • check-behaviors.sh 退出 0,5 節對上 5 支技能;lint-scripts.sh、ste100-lint.sh 皆退出 0。
  • 未跑「開新 CLI 行程送最小 Prompt」:這條 PR 合併前,CLI 載入的仍是舊的已安裝副本。

前置 Push Request

  • 無
## 摘要 - 需求描述:盤點所有技能組,整理出所有技能的行為清單作為技能驗證的參考基準;相依技能版本不符時不得跳過更新,改為阻擋執行。 - 計畫名稱:無 - 計畫頁:無 - 分析頁:無 ## 變更內容 | 檔案 | 為什麼改 | | --- | --- | | `references/behaviors.md` | 新增。5 支技能的行為清單,作為技能驗證的參考基準 | | `tools/deploy.sh` | 相依版本不符不再跳過該 domain,改印 warn 並照樣更新;判不出結論印 note;檢查腳本自己出錯才 skip 並記為失敗 | | `tools/check-requires.sh` | 退出 1 拆成 1(相依不符)與 4(判不出結論),檔頭同步 | | `skills/deploy/SKILL.md` | 同步新行為與四種退出碼分流 | | `README.md` | 兩處仍寫舊的跳過行為,改掉 | | 三份 manifest | 版本同步到 0.2.6 | ## 設計重點 - 跳過更新會讓落後的 domain 永遠等不到那一版相依,形成死鎖。阻擋改放在技能呼叫那一層,由 `jsc-hooks/hooks/version-guard.sh` 執行。 - `check-requires.sh` 的退出 1 原本混了「相依版本不符」與「判不出結論」。改成照樣更新之後,環境壞掉會被說成版本落後,操作者照著補版本補不到問題點,所以拆成兩碼、`deploy.sh` 分別印 warn 與 note。 ## 測試結果 - 四種退出碼 × 五支 CLI 實測:退出 1 與 4 都照樣執行更新指令、`result=ok`、rc=0;退出 2 才跳過、`result=fail`、rc=1。 - `check-requires.sh` 的 0、1、2、4 逐一以真實參數實測,與檔頭宣告相符。 - `check-behaviors.sh` 退出 0,5 節對上 5 支技能;`lint-scripts.sh`、`ste100-lint.sh` 皆退出 0。 - 未跑「開新 CLI 行程送最小 Prompt」:這條 PR 合併前,CLI 載入的仍是舊的已安裝副本。 ## 前置 Push Request - 無
jiantw83 added 7 commits 2026-08-31 08:14:06 +00:00
What:新增 references/behaviors.md。這一頁列出 delegate、deploy、doctor、models、setup 五支技能的行為。每支技能記錄觸發時機、關鍵步驟、外部呼叫、完成條件、可驗證跡象五個項目。

Why:技能驗證以前沒有共同基準。驗證的人只能自己讀 SKILL.md 反推該有哪些行為,兩個人推出來的結果不會一樣。有了這一頁,驗證就比對同一份基準。

How:一支技能一個章節,章節內用一張兩欄表格寫滿五個項目。外部呼叫欄位寫出腳本路徑與子命令,可驗證跡象欄位寫出實際會被改動的檔案或目錄。頁首寫明規則:技能異動時,要在同一個 PR 內一起更新這一頁。

Who:技能驗證基準。
What:把原本的結束碼 1 拆成兩個。1 只代表相依版本不符或缺相依 plugin。新增 4 代表判不出結論,成因是 manifest 不存在、不是有效 JSON、或缺 python3。這三種成因的輸出從 status=blocked 改成 status=unknown。

Why:兩種成因共用同一個結束碼,呼叫端就只能用同一句話講兩件事。環境壞掉會被講成版本落後。操作者照著去補版本,補到最後也碰不到真正的問題點。

How:找不到 manifest、找不到 python3、JSON 解析失敗三處改回傳 4,狀態字串一併改成 unknown。檔頭的輸出格式表與結束碼表跟著改寫,並寫下 1 與 4 分開的理由。

Who:相依檢查結論分流。
What:check_requires() 對 check-requires.sh 的四種結束碼重新分流。0 照常更新。1 改印一行 warn,該 domain 照樣更新,訊息寫出還缺哪一版。4 印一行 note,也照樣更新。2 或其他代碼維持印 skip、跳過該 domain,並記成失敗。

Why:跳過會讓落後的 domain 永遠等不到它要的相依版本,也就永遠更新不到,兩個 domain 互相等就形成死鎖。阻擋移到技能叫用那一層,由 jsc-hooks 的 version-guard.sh 執行,更新照跑不會壞事。判不出結論跟版本落後要講不同的話,混成一句會把環境問題誤導成版本問題。檢查腳本自己出錯是另一回事,讀不到結論就不能當成通過。

How:結束碼 1 的分支從印 skip、回傳 1 改成印 warn、回傳 0,結束碼 4 新增一個印 note、回傳 0 的分支,其餘代碼維持原本的 skip 與 FAILED。函式上方與檔頭補上這四條分流的理由。檔頭的輸出格式表補進 warn 與 compat 兩欄,結束碼說明也把 warn 列為不算失敗但要據實回報。

Who:相依版本不符的處置。
What:SKILL.md 第 4 步改寫成四種結束碼的處置,第 7 步的回報清單補上 warn 行。README 的 check-requires.sh 表格列與 deploy 技能段落改寫成同一套說法。

Why:文件還寫著版本不符就跳過該 domain。操作者依文件預期那個 domain 不會動,實際上它已經更新,回報也對不上腳本印出來的行。

How:SKILL.md 逐一寫出 0、1、4、2 或其他四種結束碼各自的處置與理由,完成條件改成 skip 要有檢查腳本出錯或本地樹的原因、warn 要指名還缺哪一版。README 兩處改寫成同樣的四種分流,並寫明真正的阻擋在 version-guard.sh。

Who:相依版本不符的處置。
What:plugin.json、.claude-plugin/plugin.json、.codex-plugin/plugin.json 三份 manifest 的 version 從 0.2.5 改成 0.2.6。

Why:這一輪改了相依檢查的結束碼與部署時的處置,外部行為跟 0.2.5 不同。三份 manifest 是版本檢查與部署推薦的依據,版號不動,version-guard.sh 就看不出這台機器該更新。

How:三份檔案只改 version 一個欄位,其餘內容不動,三份保持同一個版號。

Who:版號發布。
admin approved these changes 2026-08-31 08:18:26 +00:00
admin merged commit 81d26c300a into master 2026-08-31 08:18:28 +00:00
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: plugins/cli#46