分支審查追蹤器 是做什麼的?
一個跨多輪進行修復的分支審查。每一輪都會重新審查分支,並更新一個頁面:一個編號的問題清單,每個問題都附有狀態和一個「詳細資料」彈出視窗,其中顯示證據、負責的提交以及需要查看的位置。
該頁面是一個 claude.ai Artifact,它是審查的記錄。檢視者只能唯讀:只有 Claude 能夠在審查和修復進展過程中更改狀態。新的一次會話會從頁面的小型 context.json 恢復,而不是從對話或本地檔案中恢復。
追蹤器包含三個檔案:
index.html:該頁面,是assets/tracker.html的副本;issues.json:每個問題以及會話日誌;context.json:恢復筆記和下一個會話的問題索引、啟動它的提示,以及等待使用者處理的簡短清單,這是頁面顯示的唯一部分。
1. 詢問要審查的內容
首先收集候選項,然後在一個 AskUserQuestion 呼叫中詢問所有問題。跳過在調用時已提供答案的問題,例如 PR 編號或 URL。
git for-each-ref --sort=-committerdate --count=6 --format='%(refname:short)' refs/heads
git symbolic-ref --short refs/remotes/origin/HEAD # 預設基底
git log --format=%s <base>..<target> | grep -oE '[A-Z]+-[0-9]+' | sort -u
gh pr list --head <target> --json number,url,title # 或:glab mr list --source-branch <target>
| 問題 | 選項 |
|---|---|
| 目標分支 | PR 的頭部分支(如果給定了 PR);否則為除基底之外最近更新的三個本地分支 |
| 基底分支 | 遠端倉庫的預設分支(建議),然後是其他長期分支(如果有的話) |
| 工單 | 在分支名稱及其提交主旨中找到的 ID;無工單 |
使用者始終可以輸入另一個值。在已知分支後再詢問工單問題,或從最可能的目標推導出其選項。
2. 檢查環境
執行預檢腳本並向使用者顯示其表格:
<此技能>/scripts/preflight --target <branch> [--base <base>] [--ticket <id>]
它會檢查倉庫、兩個參考、使用者的檢出、本地分支是否與 PR 頭部匹配、主機上的 PR、可能阻止 git worktree 的檢出過濾器,以及審查使用的 CLI。退出代碼 2 表示阻止項;1 表示僅警告。它不會檢查專案的建置工具:這些屬於專案的輔助技能。
該腳本會獲取兩個分支。它從 origin 獲取基底(該處為最新狀態),並從克隆獲取目標(作者可能已推送到的位置)。針對它列印的參考進行審查。如果它警告本地分支與 PR 頭部不同,請審查 PR 頭部:使用 git show <sha>:<path> 讀取,而不是檢出它。
然後檢查此會話的工具(腳本無法看到),並將它們添加到表中:
| 需要於 | 工具 | 沒有它會如何 |
|---|---|---|
| 審查 | code-review 技能,或 Agent 工具 | 阻止項 |
| 頁面 | Artifact 工具 | 將檔案保留在暫存區,並在每輪後給使用者其路徑;說明情況 |
| 工單的上下文和發布工單 | Atlassian 工具 (getJiraIssue, createJiraIssue) | 不帶工單進行審查;說明情況 |
| PR 的評論和檢查 | gh 或 glab,已認證 | 僅審查分支;說明情況 |
然後查找專案的輔助技能,如下文「輔助技能」所述,並為每個輔助技能在表中添加一行:已找到(及其名稱),或缺失(以及審查將缺少的內容)。
在阻止項處停止,並說明缺少什麼。對於警告,說明審查不會涵蓋的內容,然後繼續。
如果可以讀取工單,請獲取其摘要和狀態。在 ID 後用括號寫出狀態:PROJ-123 (進行中)。
3. 第一輪
- 審查。 對
<target>相對於<base>調用code-review,或者對 PR 編號調用。告訴審查者使用git show <rev>:<path>讀取其他提交,並且切勿在使用者的目錄中檢出任何內容。 - 審查文字說明,如下文「文字說明審查」所述。
code-review會尋找程式碼中的缺陷,但不涵蓋這部分。 - 驗證每個發現,如下文「驗證發現」所述。只有在此步驟之後,問題才會顯示在頁面上。未通過驗證的發現要嘛在列出來之前被丟棄,要嘛在列出後被設置為
dismissed並附上原因。 - 分類每個問題。
- 負責的提交:
git log -S'<symbol>' <base>..<target>,或git blame -s <target> -- <path>。 - 基底是否也存在此問題:
git show <base>:<path>。基底已有的問題會獲得 `
- 負責的提交: