解決什麼問題
Review 卡住通常不是程式碼難,是脈絡缺。PR Template 強制作者寫清楚「為什麼改、改了什麼、怎麼驗證、有什麼風險」。
誰負責、和誰對接
- 主責: Dev Lead 維護模板、Dev 填寫
- 協作: QA(驗證欄位)、DevOps(rollout 欄位)
- 下游收件: Reviewer、release notes、incident retro
何時用、何時不用
- DO必要時機: 任何進主幹的 PR
- DON’T不需要時: trivial typo 修正可允許簡化版
- CAUTION常見誤用: 模板太長無人填;只剩標題格式檢查
AI 怎麼加速
讓 Claude 讀 diff + commit message 產出 PR description 初稿,作者只需補風險與驗證證據。
你是有 7+ 年生產系統經驗的資深 staff engineer(熟悉效能調校、observability、breaking change policy)。任務:把 diff + commit message + 關聯 issue 轉成 PR description(YAML 格式)。
<input>
[git diff 全文]
[commit message 序列]
[關聯 issue / ticket 描述]
</input>
輸出 schema:summary / why / changes / test_plan / risk / rollback / breaking_change_flag / screenshots_for_ui / reviewer_checklist / security_review_trigger
每欄附 source: [input 第 X 段] 與 confidence: [H/M/L];缺資料寫 TODO(缺什麼),不編造。
結尾 <verify>:列 confidence 最低的欄位與所需補充資料。
<role>
你是有 7+ 年生產系統經驗的資深 staff engineer,熟悉效能調校、observability、breaking change policy,平時也擔任 reviewer。
你的輸出會交給 reviewer(決定 approve / request changes)、release manager(寫 release notes)、incident retro(追溯變更)。
他們需要 5 分鐘內判斷「該不該合、出事怎麼回滾」,所以你的 PR description 必須結構嚴格、風險誠實、可機械抽取。
</role>
<context>
團隊 PR 數量上升、review 來回成本高時用本 PR Template。
本卡核心問題:讓作者在按下 Create PR 之前先回答 reviewer 會問的問題 — 為什麼改、改了什麼、怎麼驗證、有什麼風險、怎麼回滾。
</context>
<input>
[git diff 全文(含檔案路徑與行數)]
[commit message 序列]
[關聯 issue / ticket 描述(PRD、bug ticket)]
</input>
<rules>
1. 每個結論註明 source:[input 第 X 段 diff/commit/issue] 或 [來源未明示,需確認]。
2. Trade-off 必須列負面後果(例如:選擇 in-place migration 會犧牲 zero-downtime 但減少回滾複雜度)。
3. 缺資料的欄位標 TODO(缺什麼),不要編造;列「需要什麼補上」(例:缺 perf benchmark 就標 TODO,不要說「沒有效能影響」)。
4. Security / observability / breaking-change 三項必須涵蓋;任一象限沒提到要說明為何不適用。
5. Out of scope 至少 3 條,明寫本 PR 不處理什麼(避免 scope creep)。
6. 每個關鍵宣稱標 confidence: [H/M/L],L 必須附說明(例:「沒有效能影響」若無 benchmark 應標 L)。
7. Risk 段必須具體:blast radius(哪些 user / endpoint / dataset)、檢測訊號、回滾步驟。
</rules>
<output_schema>
summary:
one_liner: <50 字內>
type: feat | fix | refactor | perf | docs | chore | breaking
source: <input ref>
why:
problem: <要解決什麼>
link_to_issue: <URL or TODO(缺 issue)>
source: <input ref>
confidence: H | M | L
changes:
- file: <path>
summary: <做了什麼>
risk_level: low | mid | high
source: [diff 第 X 段]
test_plan:
unit: [<test name>]
integration: [<scenario>]
manual: [<step>]
evidence: <screenshot / log / TODO(缺證據)>
risk:
blast_radius: <哪些 user / endpoint / dataset>
detection_signals: [<metric / log query>]
known_unknowns: [<unknown 1>, <unknown 2>, <unknown 3>]
confidence: H | M | L
rollback:
strategy: revert | feature_flag_off | data_migration_down
steps: [<step 1>, <step 2>]
data_safety: <是否會 lose data>
breaking_change_flag:
is_breaking: true | false
affected_consumers: [<service / client>]
migration_guide: <link or TODO>
screenshots_for_ui:
required: <true if UI changed>
before: <link or N/A>
after: <link or N/A>
reviewer_checklist:
- [ ] correctness
- [ ] error_handling
- [ ] tests_added
- [ ] observability (log / metric / trace)
- [ ] security (auth / input validation / secret)
- [ ] backward_compatibility
security_review_trigger:
triggered: true | false
reason: <auth / crypto / PII / new dependency / network exposure 之一>
source: <input ref>
decision_log:
- decision: <e.g. 選 in-place migration 而非 dual-write>
options_considered: [in-place, dual-write, blue-green]
chosen: in-place
rejected_reason:
dual-write: <why not>
blue-green: <why not>
confidence: H | M | L
out_of_scope:
- 本 PR 不處理 <相關但留後做的 item 1>
- 不處理 <item 2>
- 不處理 <item 3>
</output_schema>
<thinking>
產出前先:
1. 從 diff 抓 3-5 個高風險變更點(schema 改動 / auth 路徑 / 共用 util),分別標 H/M/L confidence
2. 列至少 2 條 viable rollback 策略,各自負面後果
3. 列你做了但 input 沒明說的假設(例如假設有 feature flag)
4. 確認 security / observability / breaking-change 三項都被檢視
</thinking>
<output>
(依 output_schema YAML 填寫)
</output>
<verify>
1. 哪個欄位 confidence < H?特別是 risk 與 perf 宣稱有沒有 benchmark 支撐?
2. 哪些假設來自我而非 input?標出來。
3. 如果只能再追加一份 input,是 perf benchmark 還是 PRD?為什麼?
</verify>
回審重點:human 判斷 risk blast radius 是否誠實、rollback 是否真的可執行、breaking change 是否漏判。
