iT邦幫忙

2026 iThome 鐵人賽

DAY 30
0
AI 自動化

我以為我保留了五道閘門系列 第 30

Day 30|那五道閘門,是一份 markdown

  • 分享至 

  • xImage
  •  

模組六|治理與收斂(Day 28–30)

第一天我給了三個數字:

上架不到一年、五十集以上。
兩個 repo 加起來 1,513 個 commit。
其中 ci: 開頭的,0 個。

我說第三個是這 30 天的問題。今天回答它。

先結清前兩個

第一個兌現了。 沒有這條產線,一個人不可能在不到一年內出五十集以上。AI 確實做到了它該做的部分:ASR、EDL、FFmpeg 組裝、封面套版,那些「確定性、可重跑、可量測」的環節(Day 5),全部沒有出過事。

第二個要打折。 1,513 用的是 first-parent(995 + 285)。如果直接數 commit 會得到 1,180 + 333,灌水約 18%,那是平行分支的雙記(Day 24)。

第三個是答案。

0 個 CI,意思是沒有任何規則在被執行

這 30 天講了一堆規則:

  • 五道人工閘門(Day 3)
  • 兩套 schema 模板(Day 7)
  • 查核分層的六條硬門檻(Day 8)
  • 「起草者不得自評、要換一個模型審」(Day 14)
  • 三態生命週期標記(Day 29)
  • 根目錄邊界治理與 KPI(Day 28)

沒有一條掛在任何自動流程上。

而它們的落實率分別是:模板 8%、查核補件 31%、閘門,今天講。

三條證據

我踮腳把一張紙釘在半空中,當成一道門

一、那份閘門文件寫過一次之後,零次修改。

它跟流程狀態檔是同一個 commit 建立的,此後再也沒被動過。

而在那之後,repo 又推了 205 個 commit、產出 5 集節目。

那五集,完全沒有再經過這條流程。

二、AI harness 的權限清單裡,有 Bash(git commit:*)Bash(rm:*)

閘門第一條寫著「絕不自動 commit」。而底層設定同時授權了它,還附贈了 rm(對應第五道「不得刪除或覆寫既有成品」)。

兩份設定互相矛盾,而沒有任何東西會發現這件事,因為沒有任何東西在讀那份 markdown。

三、另一個 repo 只有閘門的引用,沒有閘門的定義。

它的狀態檔寫著「Human gates(未做,等人工)」,然後列了三條。而那個 repo 裡根本沒有那份文件。

它引用了一個不存在於自己身上的規則。

我要把話說清楚

這不代表那五集出事了。

它們都是我自己按下的發布鍵,稿子是我自己讀過的,錄音是我自己錄的。

問題是另一個:如果不是我按的,也沒有任何東西會攔。

那五道閘門的實際狀態,不是「守住了」,是「沒有被測試過」。而一道從來沒有被測試過的防線,跟不存在的差別,只在你有沒有意識到。

而同一條產線上,有東西活得好好的

我蹲著把一條細線綁緊在腳踝的高度

對照組全部在這 30 天裡:

一支 64 行的 bash,覆蓋率 10%,活著。 因為它有退出碼(Day 12)。

一條編輯倫理活著。 「未定事實不得講成定論」被壓成「查核段必須同時含已證實與待證實標記」,兩個 in 判斷(Day 8)。

一支 34 行的 Python 活著。 它的 docstring 寫著「防再把合併衝突 commit 進去」,而它只有一個 commit,訊息裡有「救回被丟的 6 則」(Day 13)。

兩個資料欄位 100% 填滿,沒有任何程式強制它們。 因為不填就播不了(Day 6)。

一條命名規則有效,而一支 CLI 工具無效。 因為那條規則的執行者是人(Day 27)。

而寫得最完整、理由最充分、措辭最強硬的那份閘門文件,沒有活著。

分界線在哪裡

Day 27 已經給了答案,我當時是在講集數編號的時候撞到的:

不是「文件 vs 程式」。是這條規則的執行者是誰。

  • 執行者是人 → 寫成文件。人會讀、會記得、會被提醒
  • 執行者是機器或 AI → 必須寫成機器讀得懂的斷言,否則它不存在

把這 30 天的規則按這條分類,結果非常整齊:

規則 執行者 我寫成了 活著嗎
未定事實要分層 產出流程 程式判斷
稿子要有查核附錄 產出流程 退出碼
資料檔不得有衝突標記 commit 流程 腳本
集數怎麼編號 文件
開場鉤子要有 工作需求
AI 不得自動 commit AI harness markdown
schema 欄位順序 產出流程 沒掛的驗證器
非高可信要補件 產出流程 沒掛的驗證器

下面三條的共同點:執行者是機器,而我寫成了給人看的東西:一份 markdown,或者一支沒有被掛上去的驗證器。

閘門的錯不在寫得不好。它的錯在於,它是寫給 AI 看的文件。

而 AI 不會因為讀過一段 markdown 就改變行為。真正決定它能做什麼的,是那份權限清單。

十條心法

  1. 能被 grep 的規則才會活下來(Day 12、13)
  2. 事故 → 檢查 → 退出碼,這條路徑走完才算數(Day 13)
  3. 保守的預設值是最有效的攔截:沒標=不可信(Day 8)
  4. 要驗一個模型的產出,就換一個模型,換的是推理路徑(Day 14)
  5. 帳本會過期,而 exit code 不會告訴你(Day 15、16)
  6. 有外部標準可錨的參數不會漂,靠感官的一定會漂(Day 19)
  7. 參數的數值只是結論,註解才是推理(Day 20)
  8. 先量出問題的形狀,再選演算法(Day 21、24)
  9. 連續三個版本都在調參數,問題通常在目標(Day 22)
  10. 這是為這一次寫的,還是為每一次寫的(Day 29)

而貫穿它們的那一條:規則要寫成它的執行者讀得懂的格式。

誠實邊界

這是一個人的產線,不是團隊最佳實踐。

一個人有一個特權:你可以在腦子裡執行閘門。 這也正是為什麼它懸空了那麼久都沒出事:每一次 commit、每一次上架,都是我,而我知道那五條。

而這個特權不能複製給團隊,也不能複製給明天的我。

第二個誠實邊界:這 30 天列了大概二十件「我知道該做而沒做」的事:輪替那組還在 git 歷史裡的金鑰、把驗證器掛進 pre-commit、建 ASR 詞庫、刪掉那 17 份沒人用的文件、把複製後的檢查寫出來。

寫出來不等於處理了。 這句話我在這個系列裡說了六次,而它最後也適用於這個系列本身。

我接下來要做的第一件事

不是上面任何一條。

是把那五道閘門搬進權限設定。

文件留著,它的推理是對的,Day 4 那句「輸入不可信是結構問題,不會隨模型變強而消失」我到現在還完全同意。

但執行的必須是設定檔。把 Bash(git commit:*) 從 allow 清單移到需要確認、把 rm 拿掉。十分鐘的事。

而它跟那份 27 行的 markdown 的差別是:設定檔會被讀,markdown 不會。

代價

寫完這 30 天,我得承認一件事:這個系列本身,就是我第一次真的執行那份閘門文件。

不是因為我變自律了,是因為寫成文章逼我去查證。而查證的過程就是執行:我去比對了兩個 repo、實跑了驗證器、算了落實率、發現了七組跨文件落差。

那些東西在磁碟上躺了幾個月,沒有任何機制會發現它們。是「要寫出來給人看」這件事把它們挖出來的。

這不是一個可持續的機制。我不可能每次都寫一個 30 天系列來檢查自己的產線。

帶走什麼

任何寫給自動化流程的規則,如果不能被 exit code 表達,它就只是註解。

現在就可以檢查一次:你專案裡那些「絕對不要」「一律必須」,是寫在 README 裡,還是寫在 CI 裡?寫在 CONTRIBUTING 裡,還是寫在 pre-commit hook 裡?

寫在 agent 的 prompt 裡,還是寫在它的權限清單裡?

前者是給人看的,人會讀,所以它有效。
後者才是給機器執行的。

而我,把給機器的規則寫成了給人看的格式。

三十天,一句話。


上一篇
Day 29|17 份文件、6 支腳本,複用次數 0
系列文
我以為我保留了五道閘門30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言