jiantw83 82fb8077fc feat(pr): 目標分支改走階梯,既有 PR 改為校準不重開
What:`pr` 技能新增「PR ladder」一節與階梯形狀的分支命名(`fix` 叫一次 `slugify.sh`,其餘型別叫兩次組出 `{類型}/{功能}/{子功能}`),base 一律由 `base-branch.sh --derive` 推導;新增步驟 6 查目標分支有沒有開啟中的 PR,有就跳到新的步驟 9 比對標題、描述、前置 PR 依賴三項,只有不一樣的那幾項才送 API。`commit` 技能新增步驟 5:認可完成後,目前分支已有 PR 就交給 `pr` 校準。

Why:越級開 PR 與「同一條分支重開第二支 PR」是同一個病灶的兩面——base 與 PR 現況都靠人記。改成先推導、先比對之後,base 由腳本決定,PR 只在真的有差時才更新。

How:呼叫方傳入的 base 仍然照收,但要與推導結果一致;不一致就當成越級擋下,說明正確階梯再問使用者,不會悄悄改目標。校準走 `jsc-gitea` 的 `pr-get` 讀現況、`pr-edit` 一次帶標題與描述、`pr-depend` 補依賴;三項都相同就什麼都不做——每一次多餘的編修都會通知所有審查者,安靜才是對的結果。

Who:`jsc-git:pr` 與 `jsc-git:commit` 兩支技能,以及呼叫它們的 `jsc-sdlc:implement`、`jsc-sdlc:maintain` 與 `jsc-meta` 各技能。
2026-08-27 11:20:28 +08:00
2026-08-21 04:44:13 +00:00

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;一律確認分支存在於遠端,找不到就回傳非零。「沒傳」看參數個數,傳入空字串算錯誤,不會退回 develop
tools/slugify.sh 把類型與英文短語組成 ASCII 分支名 {type}/{slug};輸入含非 ASCII 或 slug 化後為空,就回傳非零並要求先翻譯成英文短語

Skills 目錄

呼叫方式:Claude / Antigravity /jsc-git:{name};Codex ${name};Copilot / Kiro 描述需求自動觸發。

commit

追蹤所有檔案變更,依 Commit 格式 {類型}({需求 or 功能}): {訊息} 將同類型與同需求的變更認可在一起。認可前先跑 jsc-hooks 的 comment-scope.sh sweep 掃過工作區,攔下夾帶文件相關資訊的註解;腳本不在本機就跳過並在回報中說明,不中止認可。訊息格式三選一:完整版(What/Why/How/Who)、簡易版(依 git diff 總結一句)、自訂。

pr

先認可所有變更,再建立目標分支、push、以範本描述建立 Gitea PR。基底分支優先採用呼叫方傳入的分支;呼叫方沒傳,才依序退回 develop、main、master。分支名只允許 ASCII:類型取 commit 優先度最高者,標題先翻譯成英文短語再 slug 化。

範本

檔案 用途
templates/pr-description.md PR 描述:摘要、變更內容、設計重點、測試結果、前置 PR

相關 domain

  • jsc-gitea:建立 PR(tools/gitea.sh pr-create)
  • jsc-sdlc:PR 描述中的計畫頁與分析頁連結
S
Description
No description provided
Readme
246 KiB
Languages
Shell 100%