這個系列從 Day 01 開始,一直在講怎麼讓 AI 參與維護 PHPUnit & Pest Test Explorer 這個真實專案——issue triage、PR review、修 bug、寫文件、依賴升級、release 流程。如果只看到這裡,很容易得到一個錯覺:只要流程設計得夠好,AI 幾乎可以接手維護者所有的日常工作。這個錯覺本身就違反了系列主題句:機械性、可規則化的工作可以交給 AI,但專案的技術方向、社群信任、對貢獻者的責任,終究要人來扛。 今天要做的,是把散落在前面幾天的授權邊界收攏成一份清單,誠實講清楚。
第一種:要不要代替維護者發言。 Day 17 講過,AI 可以幫忙整理技術事實(例如「這個問題應該是某個版本行為改變造成的」),但要不要對一個不禮貌的回報者設下界線、要不要接受一個爭議性的功能請求,這種涉及語氣跟立場的表達,不該讓 AI 自己決定要不要發、要怎麼發。
第二種:程式碼來源是否乾淨、授權是否相容。 Day 18 講過,一段外部貢獻的程式碼是不是原創、跟專案本身的授權條款相不相容,這類判斷需要法律/倫理層面的責任承擔——AI 可以標記「這段程式碼看起來似曾相識,建議查證來源」,但不該自己判定「這應該沒問題」就放行。
第三種:這個版本該不該發。 Day 19 講過,changelog 產生、版號建議、打包檢查這些機械性步驟可以交給 AI,但「這批改動夠不夠成熟該不該發」是一個對使用者的承諾,出了問題要有人負責——這個核准動作不該自動化掉。
第四種:要不要評判一個貢獻者的能力。 Day 23 講過,AI 可以幫忙補足外部貢獻者跟專案慣例之間的資訊落差,但不該對「這個人的技術能力值不值得信任」做評判——這種評判性判斷容易造成貢獻者被冒犯,也不是技術問題該有的答案。
用一組對照來看這四種決定的共同模式:
❌ AI 自己拍板:
「這則 issue 回覆用詞比較衝,我幫你發了一則得體的版本。」
「這段程式碼看起來沒有明顯抄襲痕跡,我合併了。」
「這批改動測試都過,我幫你發布了 v3.10.0。」
「這位貢獻者的 PR 品質不太穩定,建議往後對他的貢獻多留意。」
→ 四種情況的共同問題:AI 用自己的判斷,
取代了本該由人承擔責任的決定
✅ AI 呈現準備,人核准:
「這則 issue 語氣比較衝,我整理了技術事實,
要不要發、怎麼發由你決定。」
「這段程式碼有一部分結構跟另一個專案相似,
建議你確認一下授權相容性。」
「這批改動測試都過了,changelog 我準備好了,
你確認要發布嗎?」
「這位貢獻者這次的 PR 缺了測試,
我在 review 裡列出具體缺漏,其他判斷留給你。」
→ AI 負責準備跟呈現事實,決定權留給人
這條邊界值得記住的地方在於:AI 完全有能力把每一種決定都做得「看起來合理」——它可以寫出得體的回覆、可以評估程式碼相似度、可以判斷測試套件狀態、可以分析貢獻者的 PR 歷史。問題不在於 AI 做不到,而在於這些決定的後果需要一個能承擔責任的人來背書。 這正是這個系列從 Day 01 開始反覆提醒的另一個面向——查證得再紮實的判斷,如果本質上是一個需要授權才能拍板的決定,紮實的查證只是讓這個決定的「呈現」更可信,不代表 AI 因此就有資格自己拍板。
面對任何一個「要不要讓 AI 自己決定」的情境,可以問自己三個問題:
回想這 29 天的系列,你自己維護的專案裡有沒有哪個決定,你曾經想過「乾脆讓 AI 直接處理掉好了」,但套用上面三個問題後,發現其實不該放手?
明天是這個系列的最後一篇:讓 AI 參與維護一段時間之後,這個專案跟這套協作方式本身,有什麼真正的改變——30 天的總結與回顧。