Files
git/references/behaviors.md
T
jiantw83andClaude Opus 5 003593c73a fix(pr): 行為清單那三支腳本的路徑也補上外掛目錄名
上一筆只改了技能本文,行為清單漏掉。新的路徑檢核腳本一跑就指出來——關鍵
步驟與外部呼叫兩欄還留著八處不帶前綴的寫法,而那兩欄正是別人拿來確認這支
技能會呼叫誰的地方。

順手改掉技能本文開頭那一句的舉例方式。原本把不帶前綴的錯誤寫法原樣寫出來
當例子,那一行自己就會被路徑檢核當成一處待改。改成描述後果、不照抄那個
寫法,順便講得更準:省掉外掛目錄名之後,路徑會相對於當下的工作目錄解,
可能解到自己這個存取庫裡對的那一支、可能解到別的 domain 底下另一支,也可能
什麼都解不到。中間那一種最糟,它會跑起來,跑的是另一支腳本。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-04 10:51:31 +08:00

24 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# jsc-git 技能行為清單
本頁記錄 jsc-git 每支技能的行為基準,供技能驗證比對。技能異動時,在同一個 PR 內一起更新這一頁。
## commit
| 項目 | 內容 |
| --- | --- |
| 觸發時機 | 工作區有待提交的檔案變更時叫用。`jsc-git:pr` 的步驟 2 也會叫用它。要推送或開 PR 時不叫用這一支,改叫 `jsc-git:pr`。 |
| 關鍵步驟 | 用 `git status --porcelain` 盤點所有變更路徑、同時跑 `jsc-hooks/hooks/comment-scope.sh sweep` 掃過工作區的註解、依「同型別加同需求或功能」把路徑分組、每組一次 `git add` 加一次 `git commit`、訊息寫成 `{type}({scope}): {message}`、校準本分支既有的 PR、最後跑 `jsc-hooks/tools/report-status.sh skill-end jsc-git:commit {status} {結束碼} {detail}` 記下本輪結果,腳本不在這台機器上就安靜跳過。 |
| 外部呼叫 | `git status --porcelain`、`git add`、`git commit`、`git diff`、`jsc-hooks/hooks/comment-scope.sh sweep`、`jsc-gitea/tools/gitea.sh pr-of-branch`(僅獨立執行時)、`jsc-git:pr`(校準既有 PR)、`jsc-ask:ask`(問訊息風格)。分組與訊息草稿交給 sub agent 處理。 |
| 完成條件 | 註解掃描退出 0,或每一則剩餘警告都被判為誤判並說明理由,或腳本不在這台機器上並回報。`git status --porcelain` 印出空白。步驟 5 回報四種結果之一:因為 `jsc-git:pr` 是呼叫方而略過查詢、本分支沒有開啟中的 PR、`jsc-git:pr` 回報三個項目各自相符或已更新、查詢失敗並指名失敗原因。收尾一定要寫一筆 `skill-end` 狀態事件:每一組都提交完且工作區乾淨是 `ok`,`jsc-hooks` 的 Bash 閘門把提交擋在門外是 `blocked`,提交都進去了但既有 PR 沒校準成功是 `degraded`,`git add` 或 `git commit` 中途回非零、工作區還髒是 `failed`,盤點結果是空的、根本沒有變更可提交是 `aborted`。 |
| 可驗證跡象 | 本地 git 歷史多出一批 commit,`git log --oneline` 看得到,每一筆標題是 `{type}({scope}): {message}` 且訊息含繁體中文。工作區乾淨。註解掃描要求的修正直接改在原始碼檔案裡。獨立執行且本分支有開啟中的 PR 時,Gitea 上那條 PR 的標題、描述、前置依賴由 `jsc-git:pr` 更新。這一支不推送、不建立 PR、不寫 wiki 頁。跑完 `$JSC_HOME/usage/events.jsonl` 會多一筆 `{kind:skill,phase:end}` 事件,`name` 欄是 `jsc-git:commit`,`status` 與 `exit` 兩欄對得上上一列講的判準,沒有變更可提交那一輪看得到 `aborted`;`jsc-hooks` 不在這台機器上時沒有這一筆,技能本身照樣跑完。 |
## pr
| 項目 | 內容 |
| --- | --- |
| 觸發時機 | 工作做完要送審時叫用。既有 PR 在新 commit 之後要重新同步時也叫用。只想提交不想推送時不叫用這一支,改叫 `jsc-git:commit`。 |
| 關鍵步驟 | 先用 `jsc-git/tools/base-branch.sh {呼叫方基底}` 驗證呼叫方傳進來的基底、叫 `jsc-git:commit` 提交全部變更、用 `jsc-git/tools/pick-type.sh` 從 commit 標題選出型別、用 `jsc-git/tools/slugify.sh` 組出階梯狀目標分支名、用 `jsc-git/tools/base-branch.sh --derive {目標分支}` 推導基底並和呼叫方基底比對、以 `git checkout -b {目標分支} origin/{基底分支}` 建分支並 `git push -u origin` 推上去、用 `gitea.sh pr-of-branch` 查一次開啟中的 PR、沒有就用 `gitea.sh pr-create` 開新 PR 並用 `gitea.sh pr-depend` 掛前置依賴、已經有就只更新標題、描述、前置依賴三項裡不同的那幾項、回覆已處理的 PR 意見、回報,最後跑 `jsc-hooks/tools/report-status.sh skill-end jsc-git:pr {status} {結束碼} {detail}` 記下本輪結果,腳本不在這台機器上就安靜跳過。PR 標題寫一句繁體中文摘要,說明這條 PR 做了什麼,不套用分支名;校準既有 PR 時只問標題還描述不描述得了目前的內容,不拿分支名比對。 |
| 外部呼叫 | `jsc-git/tools/base-branch.sh`、`jsc-git/tools/pick-type.sh`、`jsc-git/tools/slugify.sh`、`templates/pr-description.md`、`jsc-git:commit`、`jsc-gitea/tools/gitea.sh` 的 `pr-of-branch`、`pr-create`、`pr-edit`、`pr-depend`、`comment-reply`、`jsc-gitea:wiki`(讀 PLAN 頁與 ANALYZE 頁)、`jsc-ask:ask`(基底衝突與分支不存在時發問)、`jsc-meta/references/guidelines.md` 的「PR 分支階梯」、`jsc-meta/references/pr-report.md`、`git checkout`、`git cherry-pick`、`git push`、`git ls-remote`。分支標題摘要與描述草稿交給 sub agent 處理。 |
| 完成條件 | 握有一個 PR 網址,送出的標題是一句繁體中文摘要,不是分支名。前置依賴已經處理完:`pr-depend` 印出 `OK` 行,或 PR 標題冠上 `WIP:` 且描述指名前置 PR,或描述寫「無」前置 PR 並在回報裡說明。既有 PR 的三個校準項目各自回報為相符或已更新,標題那一項說明拿什麼內容去判定,送出的 API 呼叫數等於不同的項目數。每一則已處理的意見握有回覆連結或記下失敗理由。回報含 `{owner}/{repo}`、PR 編號、PR 網址、PR 摘要四欄,並指名基底分支、目標分支、更新過的校準項目、自動建立的功能主幹、沒回覆到的意見。收尾一定要寫一筆 `skill-end` 狀態事件:拿到 PR 網址且前置依賴處理完是 `ok`,`base-branch.sh` 回 3、4、7、8、9 讓分支還沒推上去就停住是 `blocked`,`pr-depend` 回 4 退成 `WIP:` 或有意見沒回覆到是 `degraded`,`pick-type.sh` 回 3、推送失敗、`pr-create` 回 4、`pr-edit` 回非零是 `failed`,`pick-type.sh` 回 2 代表沒有可提交的變更、沒有 PR 好開,是 `aborted` 不是 `failed`,使用者在確認關卡喊停也是 `aborted`。 |
| 可驗證跡象 | origin 上多出目標分支的 ref,`git ls-remote --heads origin` 查得到。Gitea 上多出一條 PR,標題是一句繁體中文摘要、分支名仍是 ASCII,兩者不一樣。既有 PR 的標題與描述只在內容變了才被 `pr-edit` 改過,依賴被 `pr-depend` 掛上。PR 描述照 `templates/pr-description.md` 生成,各節不留空。功能主幹不在 origin 上時,`jsc-git/tools/base-branch.sh --derive` 會自動從 develop 建出 `{類型}/{功能}/main` 並推上 origin。本地 git 歷史含 `jsc-git:commit` 建立的 commit,目前分支切到目標分支。PR 意見的回覆留在 Gitea 那幾則意見底下。描述檔草稿寫在暫存檔。這一支不寫 wiki 頁,只讀 PLAN 頁與 ANALYZE 頁。跑完 `$JSC_HOME/usage/events.jsonl` 會多一筆 `{kind:skill,phase:end}` 事件,`name` 欄是 `jsc-git:pr`,`status` 與 `exit` 兩欄對得上上一列講的判準;沒有可提交的變更那一輪,事件上是 `aborted` 加結束碼 2,和開出 PR 的那一輪一眼分得開;`jsc-hooks` 不在這台機器上時沒有這一筆,技能本身照樣跑完。 |