diff --git a/README.md b/README.md index c8a50fd..384094a 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ Marketplace 統一為 `jsc`(https://gitea.jsc.idv.tw/plugins/meta.git),安 | `tools/sync-domains.sh` | 依 Gitea 正本 marketplace 把所有 domain 存取庫 clone 或 pull 到本機,印出 `domainpath`;**只有 exit 0 代表全部到位且最新**,exit 3 代表有存取庫跳過或 pull 失敗(stderr 列路徑),exit 2 代表有 domain clone 失敗 | | `tools/list-skills.sh` | 列出正本 marketplace 上各 domain 存取庫的技能,印出 `domainnamedescription`;不在正本清單上的存取庫不列 | | `tools/sync-marketplace.sh` | 寫入或更新兩份正本 marketplace 的 plugin 條目,再複製到每個 domain 存取庫(保證位元組一致)。**需要 python3**(json 模組改 JSON),缺 python3 不寫檔並 exit 1;存取庫不在本機 exit 3 | -| `tools/sync-skill-manifest.sh` | 同步 domain README 的「Skills 目錄」,並 bump 三份 manifest 的 version | +| `tools/sync-skill-manifest.sh` | 同步 domain README 的「Skills 目錄」,並 bump 三份 manifest 的 version;每一位都不得超過 `9` | | `tools/find-skill-refs.sh` | 盤點一個技能在正本 marketplace 各 domain 存取庫裡的引用檔案(不掃非技能組存取庫與點開頭目錄);技能名稱為純子字串比對,命中要逐檔確認;零命中 exit 1,掃描失敗 exit 3 | | `tools/verify-skill-removed.sh` | 刪除技能後實地檢查各 CLI 的技能快取與 hook 設定有無殘留;有殘留 exit 1,沒偵測到 CLI 或沒有可查位置 exit 3(**不等於乾淨**) | diff --git a/references/guidelines.md b/references/guidelines.md index efd2225..f04a4bd 100644 --- a/references/guidelines.md +++ b/references/guidelines.md @@ -9,7 +9,7 @@ 3. Skill 名稱:小寫、數字、連字號(`-`),最長 64 字元。名稱即指令(`/jsc-{domain}:{name}`)。 4. 每個 domain 是一個獨立存取庫 `https://gitea.jsc.idv.tw/plugins/{domain}.git`。新 domain 必須依 `https://gitea.jsc.idv.tw/plugins/template` 的結構建立新存取庫(三份 plugin manifest、`skills/`、`README.md`、`AGENTS.md`),並把 plugin 條目(URL 來源指向新存取庫)加入 `plugins/meta` 正本的兩份 marketplace 檔,再把更新後的檔案**同步到所有 domain 存取庫**(含新存取庫自己)。 5. Git 分支名**只允許 ASCII**(`a-z0-9` 與 `/`、`-`);中文需求或標題先翻譯成英文短語再 slug 化。 -6. Manifest 版本號從 `0.0.1` 開始,三份 manifest 同步 bump。 +6. Manifest 版本號從 `0.0.1` 開始,三份 manifest 同步 bump;每一位都不得超過 `9`,滿 `9` 就往左進位。 ## Description 規則 diff --git a/tools/sync-skill-manifest.sh b/tools/sync-skill-manifest.sh index 95f56f5..3ec05d7 100755 --- a/tools/sync-skill-manifest.sh +++ b/tools/sync-skill-manifest.sh @@ -1,6 +1,6 @@ #!/usr/bin/env sh # sync-skill-manifest.sh — 同步 domain 的 README「Skills 目錄」區塊,並把該 domain 所有 -# plugin manifest 的 version 各 bump 一個 patch。 +# plugin manifest 的 version 各 bump 一次,且每個數字都不超過 9。 # # 用法: sync-skill-manifest.sh # @@ -11,7 +11,7 @@ # # manifest: 依序找出 domain 下存在的 plugin.json、.claude-plugin/plugin.json、 # .codex-plugin/plugin.json,version 一律 bump 成同一個新值(以第一份找到的 manifest 版本為準, -# patch 位加一;major.minor 不變)。 +# 右側數字加一,滿 9 就往左進位;任何一位都不超過 9)。 # # 輸出: 變更摘要——README 新增/移除的技能小節、各 manifest 的舊版本 -> 新版本。 set -eu @@ -151,7 +151,25 @@ old=$(sed -n 's/.*"version": *"\([^"]*\)".*/\1/p' "$first" | head -1) major=$(printf '%s' "$old" | cut -d. -f1) minor=$(printf '%s' "$old" | cut -d. -f2) patch=$(printf '%s' "$old" | cut -d. -f3) -new="$major.$minor.$((patch + 1))" + +major=$((major + 0)) +minor=$((minor + 0)) +patch=$((patch + 1)) +while [ "$patch" -gt 9 ]; do + patch=$((patch - 10)) + minor=$((minor + 1)) +done +while [ "$minor" -gt 9 ]; do + minor=$((minor - 10)) + major=$((major + 1)) +done + +if [ "$major" -gt 9 ]; then + echo "版本已超出三位單數字可表示範圍: $old" >&2 + exit 1 +fi + +new="$major.$minor.$patch" echo "== manifest version ==" for m in $MANIFESTS; do