03 worktree 生命週期
互動版:diagrams/03-worktree.html(來源 diagrams/src/03-worktree.lifecycle.json)
命名與位置
| 種類 | 路徑(~/orca/workspaces/spay2/ 下) | 分支 | 何時建 |
|---|---|---|---|
| Issue worktree | feature-ron-issue-<n> | ron.chang/feature-ron-issue-<n> | 認領時(label 設成 in-progress),從整合分支目前 tip 開出 |
| 批次 worktree | feature-ron-batch-<key> | ron.chang/feature-ron-batch-<key> | /issue-pilot 組批次或 /issue-run 多張時,--no-parent --base-branch <integration> |
| Issue 內增量 | feature-ron-issue-<n>-inc<k> | 同名 | 以 --parent-worktree 掛在任務 worktree 下,合入後即刪 |
| retro 分支 | feature-ron-retro-<topic> | ron.chang/feature-ron-retro-<topic> | /retro 的 tooling 修正,不開 Issue |
| pilot 修正 | feature-ron-fix-<slug> | ron.chang/feature-ron-fix-<slug> | /issue-pilot 發現交付工具壞掉時,派修正 worker 用;免回歸合入 |
| 主 checkout | repo 根目錄 | 整合分支(目前 feature/ron/#24846) | 固定存在;/loop /issue-pilot 的 coordinator 在這裡跑 |
名稱中的 ron 來自腳本內的使用者前綴,換人使用時只改腳本設定,流程不變。
規則
- 建:一律透過
node scripts/orca-worktree-create.mjs --name … --gitlab-issue <n>(issue-state.mjs --set … in-progress會代勞)。它只呼叫 Orca 一次,然後用git worktree list輪詢確認;因為 Orca 從 WSL 建立時常先回runtime_unavailable,直接重試會多出一個<name>-2。 - 沒有
ORCA_CLI_COMMAND時不建 Issue worktree,也沒有git worktree add退路:沒有 Orca 連結的 worktree 看板與/issue-queue都看不到。git worktree add只給 isolated runner 這類工具用途。 - 一個 worktree 同時只有一個寫入者;改 Issue 的程式一律在它的 worktree 內做,臨時發現的 bug 先開 Issue。
- 分支從整合分支開出,不從
develop。 - 合入只能用
merge-into-integration.sh:有 lock 與預約(--reserve、--wait、--release、--status),忙碌時回 exit 75INTEGRATION_BUSY;reference-transactionhook 擋掉其他方式的合併、多 commit fast-forward 與改寫整合分支歷史。 - 刪:
close-issue.mjs第二次「結案」時連同本地分支一起刪。其他情況先跑node scripts/worktree-audit.mjs(唯讀)分類,再--apply:REMOVABLE:已合入或 patch 等價且乾淨;或PRISTINE(從未 commit)且 Issue 不再in-progress(開工時會重建)。CLOSE_ISSUE:請改走close-issue.mjs。KEEP:in-progress的PRISTINE是剛開工;未合入的wontfix/已關閉 Issue 需要人判斷。
git stash清單是所有 worktree 共用的,不要在 worktree 間用 stash 搬東西;用git show/git archive。