fix(lib): 補回搬家時掉了的 rmSync,並讓 origin 檢查只有一份

review 抓到一個沉默的失效:rollback 最後那一手「git 清不乾淨時把目錄本身也清掉」呼叫
rmSync,但把這段從 branch-prep 搬進 lib 時,import 留在了原處。那一行落在自己的
try/catch 裡,所以 ReferenceError 被吞掉——註解承諾的事從來沒發生過,而且測試全綠。
下一次重跑會撞上 WORKTREE_PATH_TAKEN,人看到的是一句與真正原因無關的錯誤。

順手收掉兩支腳本各寫一次的 origin 檢查(只有「為什麼需要它」那一句不同,由呼叫端給),
並把 lib 檔頭「負責六件事」改成七件——工作樹的一生現在整個住在這裡。

正本三處跟著改:
- 查現況那一行補上 --dry-run。pr-watch 在 PR 已終止時會順手清掉工作樹,而「我想看一下
  留言」不該把清理順便做掉——清不清理是使用者的決定。
- 拿掉「使用者堅持要繼續就繼續」:它與同一份正本的邊界(已合併或關閉時不繼續處理留言)
  直接矛盾,而在一棵該被清掉的工作樹上改東西,那些改動不會進到任何 PR 裡。
- worktree-ensure 的指令補上 --path:目標專案多半不是當前目錄,而「不必先手動 cd」
  正是這一步要解決的問題。

議題 #42

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-17 17:33:44 +08:00
co-authored by Claude Opus 5
parent 0dd8d7b7bb
commit 66064a751e
6 changed files with 63 additions and 24 deletions
+18 -6
View File
@@ -16,21 +16,33 @@ reviewer 留完意見,跑這一段,意見被逐條處理並回覆,不漏
先問一次現況,再決定要不要動手:
```
node scripts/pr-watch.js --repo <owner/name> --index <PR 編號>
node scripts/pr-watch.js --repo <owner/name> --index <PR 編號> --dry-run
```
**`terminal` 為 `true`(PR 已合併或已關閉)時就停下來。** 那顆工作包已經結束,在一棵
該被清掉的工作樹上處理留言是白做工。把 `suggestedAction` 的意思講給使用者聽:
`nothing-to-do` 是工作樹也清掉了;`blocked-dirty` 是那裡還有沒提交的東西,要他自己處理。
使用者堅持要繼續就繼續,但要說清楚 PR 已經結束了。
**這裡要帶 `--dry-run`**:`pr-watch` 在 PR 已終止時會順手清掉工作樹,而這一步只是要
知道現況——清不清理是使用者的決定,不該由「我想看一下留言」這個動作順便做掉。
**`terminal` 為 `true`(PR 已合併或已關閉)時就停下來,不要繼續處理留言。** 那顆工作包
已經結束,在一棵該被清掉的工作樹上改東西是白做工,而且那些改動不會進到任何 PR 裡。
把 `suggestedAction` 的意思講給使用者聽,讓他決定下一步:
| 值 | 意思 |
| --- | --- |
| `nothing-to-do` | 沒事了;工作樹不在或已經清掉 |
| `cleanup` | 工作樹還在,可以用 `worktree-remove` 清掉 |
| `blocked-dirty` | 那棵工作樹裡還有沒提交的東西,要他自己處理 |
PR 還開著就定位工作樹。輸入是 `pr-watch` 給的 `branch`——路徑由「哪顆工作包」推導,
不必也不該由使用者自己去記那串雜湊目錄名:
```
node scripts/worktree-ensure.js --repo <owner/name> --branch <pr-watch 給的 branch> --dry-run
node scripts/worktree-ensure.js --repo <owner/name> --path <目標專案路徑> \
--branch <pr-watch 給的 branch> --dry-run
```
`--path` 是目標專案在本機的位置(工作包 `repos` 列的那一顆),不給就用當前目錄——
而當前目錄多半不是它,這正是這一步要解決的問題。
試跑會印出推導出的路徑與將執行的 git 指令;確認無誤後拿掉旗標再跑一次。
**推導出的路徑不存在時它會重建,那是常態不是例外**:進度完全不寫在本機,換一台機器