以 pr-watch 回報 PR 現況並清理工作樹 #41

Closed
opened 2026-09-17 07:12:24 +00:00 by jiantw83 · 0 comments
Member

母議題

#38 — 以 worktree 隔離平行工作包的實作與修正

要做出什麼

PR 開出去之後,開發者要能隨時問一句「這個 PR 現在怎麼樣、我還有什麼要做」,並且在它結束時不必記得回頭清理。

這一段交付兩支腳本。第一支回報 PR 現況:狀態、還有幾則留言沒處理、工作樹在哪、裡面有沒有未提交的東西,以及一個列舉值形式的建議動作。它是一次性、無狀態、冪等的——不是常駐程序也不是 daemon,「每隔多久跑一次」由呼叫端決定,本工具不長出排程器。

它不做變化偵測。「已處理」的判定基準是留言上的 +1 reaction,那個狀態已經存在 Gitea 上,所以一份現況快照就足以回答「還有沒有事要做」,不需要跟上次的結果比較,也就不需要任何本機狀態檔。

它只通知,不動手。偵測到有未處理留言時印出建議,不自動執行 /sdlc-fix:那會違反「不讓流程被模型自動觸發」,而且 /sdlc-fix 要求「不確定時詢問使用者」,非互動模式下那個詢問無處可去。

唯一自動執行的副作用是清理工作樹,而且只在 PR 已合併或已關閉時。PR 被退回草稿時繼續監看且不清理——退回草稿代表還要繼續改,這時候那棵工作樹更需要留著。

第二支腳本是手動清理出口,處理那些永遠不會被合併也不會被關閉的 PR。兩支共用同一份移除實作(直接呼叫共用函式,不另起子行程)。清理只移除工作樹,本機分支與遠端分支都保留;工作樹內有未提交變更時明確中止並報出路徑,絕不加 --force——自動執行的東西只能做可逆的事。

驗收標準

  • 回報腳本為一次性執行,具名 flag 進、單行 JSON 出,不留任何本機狀態檔
  • 回報內容含 PR 狀態、未處理留言數、工作樹推導路徑、工作樹是否存在、是否有未提交變更
  • 回報內容含 terminal、cleaned,以及列舉值形式的 suggestedAction(run-sdlc-fix/cleanup/nothing-to-do/blocked-dirty)
  • 未處理留言的判定基準為留言上沒有 +1 reaction
  • 不與上次執行結果比較,不讀寫任何游標或狀態檔
  • 不自動執行 /sdlc-fix,只輸出建議
  • PR 狀態到處置的對照表有測試覆蓋四種狀態:open/merged/closed/draft
  • merged 與 closed 為 terminal: true 並自動清理工作樹
  • draft 為 terminal: false、cleaned: false,且工作樹仍然存在
  • 清理只執行 git worktree remove,本機分支與遠端分支皆保留
  • 工作樹內有未提交變更時中止並報出路徑,工作樹仍然存在,且不使用 --force
  • 手動清理腳本與自動清理共用同一份移除實作,不以子行程互相呼叫
  • --dry-run 輸出將執行的 git 指令與將發出的請求而不實際執行

阻擋於

  • #14 — 以 sdlc-fix 處理 PR 留言
  • #40 — 以 worktree 建立工作包分支並備妥隔離環境
## 母議題 #38 — 以 worktree 隔離平行工作包的實作與修正 ## 要做出什麼 PR 開出去之後,開發者要能隨時問一句「這個 PR 現在怎麼樣、我還有什麼要做」,並且在它結束時不必記得回頭清理。 這一段交付兩支腳本。第一支回報 PR 現況:狀態、還有幾則留言沒處理、工作樹在哪、裡面有沒有未提交的東西,以及一個列舉值形式的建議動作。它是**一次性、無狀態、冪等**的——不是常駐程序也不是 daemon,「每隔多久跑一次」由呼叫端決定,本工具不長出排程器。 它**不做變化偵測**。「已處理」的判定基準是留言上的 `+1` reaction,那個狀態已經存在 Gitea 上,所以一份現況快照就足以回答「還有沒有事要做」,不需要跟上次的結果比較,也就不需要任何本機狀態檔。 它**只通知,不動手**。偵測到有未處理留言時印出建議,不自動執行 `/sdlc-fix`:那會違反「不讓流程被模型自動觸發」,而且 `/sdlc-fix` 要求「不確定時詢問使用者」,非互動模式下那個詢問無處可去。 唯一自動執行的副作用是清理工作樹,而且只在 PR 已合併或已關閉時。**PR 被退回草稿時繼續監看且不清理**——退回草稿代表還要繼續改,這時候那棵工作樹更需要留著。 第二支腳本是手動清理出口,處理那些永遠不會被合併也不會被關閉的 PR。兩支共用同一份移除實作(直接呼叫共用函式,不另起子行程)。清理只移除工作樹,本機分支與遠端分支都保留;工作樹內有未提交變更時**明確中止並報出路徑,絕不加 `--force`**——自動執行的東西只能做可逆的事。 ## 驗收標準 - [x] 回報腳本為一次性執行,具名 flag 進、單行 JSON 出,不留任何本機狀態檔 - [x] 回報內容含 PR 狀態、未處理留言數、工作樹推導路徑、工作樹是否存在、是否有未提交變更 - [x] 回報內容含 `terminal`、`cleaned`,以及列舉值形式的 `suggestedAction`(`run-sdlc-fix`/`cleanup`/`nothing-to-do`/`blocked-dirty`) - [x] 未處理留言的判定基準為留言上沒有 `+1` reaction - [x] 不與上次執行結果比較,不讀寫任何游標或狀態檔 - [x] 不自動執行 `/sdlc-fix`,只輸出建議 - [x] PR 狀態到處置的對照表有測試覆蓋四種狀態:open/merged/closed/draft - [x] merged 與 closed 為 `terminal: true` 並自動清理工作樹 - [x] draft 為 `terminal: false`、`cleaned: false`,且工作樹仍然存在 - [x] 清理只執行 `git worktree remove`,本機分支與遠端分支皆保留 - [x] 工作樹內有未提交變更時中止並報出路徑,工作樹仍然存在,且不使用 `--force` - [x] 手動清理腳本與自動清理共用同一份移除實作,不以子行程互相呼叫 - [x] `--dry-run` 輸出將執行的 git 指令與將發出的請求而不實際執行 ## 阻擋於 - #14 — 以 sdlc-fix 處理 PR 留言 - #40 — 以 worktree 建立工作包分支並備妥隔離環境
jiantw83 added the ready-for-agent label 2026-09-17 07:12:24 +00:00
jiantw83 added a new dependency 2026-09-17 07:12:25 +00:00
jiantw83 added a new dependency 2026-09-17 07:12:26 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Reference: plugins/tea-sdlc#41