What:新增 `references/behaviors.md`。檔內收錄 jsc-git 的 commit、pr 兩節,每節一張五列表,欄位為觸發時機、關鍵步驟、外部呼叫、完成條件、可驗證跡象。 Why:技能驗證原本沒有共同的比對基準,只能回頭讀 SKILL.md 逐段推敲。清單放在 jsc-git 自己的 repo,技能改動與清單走同一個 PR,不會互相漂移,也不用跨 repo 開兩條 PR 互卡。 How:逐支技能盤點行為並寫成固定格式。節標題用技能名稱、欄位順序固定,格式由 `jsc-meta/tools/check-behaviors.sh` 在程式層檢查。觸發時機同時寫該叫用與不該叫用的情形,把 commit 與 pr 的邊界標清楚。外部呼叫逐一列出腳本、`git` 指令、`gitea.sh` 子命令與被叫用的技能。可驗證跡象寫成外部觀察得到的結果,並明講兩支技能都不寫 wiki 頁。 Who:jsc-git 的 commit、pr 兩支技能,供技能驗證使用。日後任何技能異動都要在同一個 PR 內同步更新這一頁。
jsc-git — Commit 與 Push Request
jsc 技能組的 git domain:把檔案變更依同類型與同需求或功能分組認可,並建立符合範本的 Push Request。
安裝、更新、移除
Marketplace 統一為 jsc(https://gitea.jsc.idv.tw/plugins/meta.git),安裝 token 為 jsc-git@jsc。每個指令一行:
| CLI | 安裝 | 更新 | 移除 |
|---|---|---|---|
| claude | claude plugin marketplace add https://gitea.jsc.idv.tw/plugins/meta.git && claude plugin install jsc-git@jsc |
claude plugin marketplace update jsc && claude plugin update jsc-git@jsc |
claude plugin uninstall jsc-git@jsc |
| codex | codex plugin marketplace add https://gitea.jsc.idv.tw/plugins/meta.git && codex plugin add jsc-git@jsc |
codex plugin marketplace upgrade jsc |
codex plugin remove jsc-git@jsc |
| copilot | copilot plugin marketplace add https://gitea.jsc.idv.tw/plugins/meta.git && copilot plugin install jsc-git@jsc |
copilot plugin marketplace update jsc && copilot plugin update jsc-git@jsc |
copilot plugin uninstall jsc-git@jsc |
| antigravity | git clone https://gitea.jsc.idv.tw/plugins/git.git ~/plugins/git && agy plugin install ~/plugins/git |
git -C ~/plugins/git pull && agy plugin uninstall jsc-git && agy plugin install ~/plugins/git |
agy plugin uninstall jsc-git |
| kiro | kiro-cli plugin marketplace add https://gitea.jsc.idv.tw/plugins/meta.git && kiro-cli plugin install jsc-git@jsc |
kiro-cli plugin marketplace update jsc && kiro-cli plugin update jsc-git@jsc |
kiro-cli plugin uninstall jsc-git@jsc |
antigravity 不支援 gitea URL 安裝,改用本地 clone 路徑。批次操作五個 CLI:使用
/jsc-cli:deploy。
舊入口
plugins/jsc已移除,marketplace 正本移到plugins/meta。marketplace 名稱仍是jsc(取自 marketplace.json 的name欄位,與存取庫名無關),安裝 token 不變;已從舊入口安裝過的人先執行claude plugin marketplace remove jsc,再依上表重新 add。
工具
| 檔案 | 用途 |
|---|---|
tools/base-branch.sh |
決定 PR 基底分支。兩種模式:不帶旗標時,呼叫方傳入的分支最優先,沒傳才依序試 develop、main、master;--derive [分支] 從分支名推出階梯的上一階。一律確認分支存在於遠端,找不到就回傳非零。「沒傳」看參數個數,傳入空字串算錯誤,不會退回 develop |
tools/slugify.sh |
把類型與英文短語組成 ASCII 分支名 {type}/{slug};輸入含非 ASCII 或 slug 化後為空,就回傳非零並要求先翻譯成英文短語。第一個參數可以帶斜線,所以連叫兩次就組得出 feat/{功能}/{子功能} |
tools/pick-type.sh |
從一組 commit 型別中選出優先度最高的一個,是型別優先序的唯一真實來源。參數或標準輸入都收,commit 標題整行餵進來也認得出型別;沒有輸入回傳 2,輸入裡沒有階梯表型別回傳 3 |
PR 階梯
階梯規則的唯一真實來源是 jsc-meta 的 references/guidelines.md 「PR 分支階梯」一節,本檔不再抄一份。基底一律由 tools/base-branch.sh --derive 推導,不手挑。
腳本這一側的行為:推不出唯一合法基底就回傳 7 並中止,由呼叫端問使用者,不猜也不退回 develop。功能主幹不在遠端時,自動以 develop 為起點建立並推上去,再把建立了哪一條分支印到 stderr。分支名只允許 ASCII(小寫、數字、連字號、斜線),中文簡述先過 tools/slugify.sh,--derive 不收非 ASCII 分支名。
Skills 目錄
呼叫方式:Claude / Antigravity /jsc-git:{name};Codex ${name};Copilot / Kiro 描述需求自動觸發。
commit
追蹤所有檔案變更,依 Commit 格式 {類型}({需求 or 功能}): {訊息} 將同類型與同需求的變更認可在一起。盤點與註解掃描兩件事同時跑,分組草擬要吃盤點的檔案清單,排在盤點之後,可以與掃描並行;掃描要求的修正仍在第一個 commit 之前完成;註解掃描跑 jsc-hooks 的 comment-scope.sh sweep,攔下夾帶文件相關資訊的註解,腳本不在本機就跳過並在回報中說明,不中止認可。git add -A 後單次提交與非繁中訊息由 jsc-hooks 的 PreToolUse Bash 閘門在程式層擋下,只有 claude 有這道閘門,其餘四支 CLI 仍靠技能內文的規則。訊息格式三選一:完整版(What/Why/How/Who)、簡易版(依 git diff 總結一句)、自訂。由 pr 呼叫進來時不查 PR,結果由 pr 傳入;單獨呼叫時查一次 gitea.sh pr-of-branch,查到就交給 pr 校準標題、描述與前置 PR 依賴。
pr
呼叫方傳入的基底先驗合法性,再認可所有變更,然後依階梯命名目標分支、push、以範本描述建立 Gitea PR。基底分支由 base-branch.sh --derive 從分支名推出上一階;呼叫方傳入的基底與推導結果不同,就當成越級擋下並說明正確階梯,不會悄悄改目標。分支名只允許 ASCII:類型交給 pick-type.sh 選,功能與標題先翻譯成英文短語再 slug 化。分支命名完成就同時啟動 PR 查詢與描述草擬,不等 push。整條呼叫鏈只查一次 gitea.sh pr-of-branch;分支已有開啟中的 PR 時不重開,改用該次查詢帶回的標題、base 與描述比對三項,只有不一樣的那幾項才送出 API 呼叫。收尾回報使用 jsc-meta/references/pr-report.md 的 PR 資訊表格。
範本
| 檔案 | 用途 |
|---|---|
templates/pr-description.md |
PR 描述:摘要、變更內容、設計重點、測試結果、前置 PR |