Auto-merge 與 Approve 語義
決定日期:2026-04-26 Discussion:https://github.com/nurockplayer/tachigo/discussions/359
決策摘要
開啟 GitHub auto-merge,設定 required 1 approving review。Approve = 授權 merge。
問題背景
Scope Police 強制分拆 PR,分拆後的 PR merge 回 develop 會造成其他 open PR 需要 rebase(merge cascade)。根本原因是 PR 在 approved 狀態停留太久——沒有人負責去按 merge。
設定
| 項目 | 值 |
|---|---|
allow_auto_merge | true |
required_approving_review_count | 1 |
Approve 的意義
按 approve = 「這個 PR 現在可以進 develop」。不存在「approve 但還不 merge」的中間狀態。
Approve 前應確認:CI 全過、scope 正確、無 blocker。
Lightweight lane 下的 Approve
docs / template / metadata-only PR 可以走 lightweight lane,但 Approve 的語義不變:按下 Approve 仍代表該 PR 可以進 develop。
因此 reviewer 在 lightweight lane 仍需確認:
PR Scope Police通過,且 PR body 的 source of truth / dependency / scope 欄位完整。CI scope router的 skipped heavy CI 符合路徑規則;如果 PR 改到.github/workflows/**,就不應被當成 metadata-only。- workflow regression、PR metadata regression、supply-chain / TypeScript guardrail 等保留 checks 沒有失敗。
- 沒有把 inherited backend / frontend / dashboard 紅燈修補混進 docs-only PR。
若 lightweight lane 的 PR 只是文件化策略,Approve 不代表同意後續 workflow runtime 變更;runtime 調整必須另開 issue/PR,重新經過 Scope Police、workflow regression 與必要的人審。
PR Risk Class
Auto-merge 只會在 PR body 剛好勾選一個 PR Risk Class 且該 class 不是 R4 時被 workflow arm。
| Class | auto-merge |
|---|---|
| R0 docs / template / metadata only | 可用 |
| R1 tests / CI / tooling only | 可用 |
| R2 frontend behavior | 可用,但仍需 branch protection 要求的 review |
| R3 backend / API behavior | 可用,但仍需 branch protection 要求的 review |
| R4 auth / permissions / security / schema / migration / secrets / payments / wallet / workflow / release | 不可用 |
R4 PR 必須由 human reviewer 明確 review / approve,且不得使用 auto-ready 或 native auto-merge path。若 PR 未勾選 risk class、勾選多個 class,或勾選 R4,auto-merge workflow 會 skip,PR Scope Police 會在 sticky comment 顯示原因。
Review 動作對應
| 嚴重程度 | 動作 |
|---|---|
| blocker | Request changes |
| major | Approve + Comment 說明風險 |
| minor / nit | Approve + Comment(可選) |
minor / nit 不用 Request changes——在 auto-merge 下這會卡住整個 pipeline,成本不相稱。改用 Comment,作者自行決定是否修或開 follow-up。
詳細討論
完整的方案比較、取捨分析、以及未來改回的條件,見 Discussion: https://github.com/nurockplayer/tachigo/discussions/359