TL;DR — 一個人同時跟四個 AI 視窗協作,自律在第一次趕 commit 時就失靈了。這篇記錄我如何從真實事故中演化出一套治理系統:憲法五條、governance-lint pre-commit hook、75 端點契約測試、12,946 檔案復原演練——每一層制度都有對應的事故編號。
2026 年 5 月 22 日,我的 commit 被擋下來了。
不是被同事擋的,團隊裡沒有其他人類。擋住我的是一個 229 行的 bash 腳本——governance-lint.sh,掛在 git pre-commit hook 上。它冷冰冰地吐出 Strict fails: 4:兩份 handoff 文件缺少 status frontmatter 欄位,也沒有 ## Consequences 章節。
有意思的是,這個腳本是我自己叫 AI 寫的。規則也是我自己定的。但當我趕著把 48 個檔案一次 commit 的時候,我自己沒發現違規。機器替我記住了。
這不是什麼了不起的技術故事。這是一個非全職工程師,在跟四個 AI 視窗協作的過程中,一路踩坑、一路補洞,最後長出一套治理系統的紀錄。
同一天爆三個洞,為什麼「小心一點」不夠用?
故事要從 2026 年 4 月 19 日說起。那天我同時在用 Chat、Cowork、Code 三個視窗處理 paulkuo.tw 的專案。到了下午,三個問題幾乎同時浮出水面:
第一個,session-handoff 這個 skill 在 repo 層是 v5.3,但在雲端層還停在 v4.13。兩邊都以為自己是最新的,沒有人知道對方存在分裂。
第二個,Cowork 視窗引用了一串「已驗證」的事實來做判斷,但追溯回去,那些事實從來沒有人跑過驗證指令。整條推理鏈建立在空氣上——我們後來叫它「castle in the sky」。
第三個,同一筆 memory 在 CLAUDE.md 和 memory 檔案裡各存了一份,內容不完全一樣。改了一邊,另一邊不知道。
三個問題的共同根源不是誰偷懶,而是架構上沒有機制確保「誰說了算」。當你只有一個 AI 對話視窗的時候,這種問題不存在。但當你的工作流是 Chat 做規劃、Cowork 做偵察、Code 做實作、Paul 做拍板——四個參與者各自有記憶、各自會產出結論——「事實一致性」就變成一個必須被工程化的問題。
我試過在 CLAUDE.md 裡多寫幾行規則。有用,但很快發現:注意力在趕 commit 的壓力下會失守。被動文件不等於主動防線。
所以我們做了一件聽起來有點荒謬的事:寫了一部憲法。
人機協作憲法的五條到底在管什麼?
「憲法」不是修辭。這份文件的結構確實參考了憲政設計的邏輯:先定身份(誰是參與者)、再定權限(誰能做什麼)、最後定爭議解決機制(出事了怎麼辦)。
五條的設計,每一條都對應我們踩過的坑:
第一條,SSoT 原則。 paulkuo.tw repo 的 git HEAD 是所有規則、skill、治理文件、memory、待辦佇列的唯一事實來源。這不是設計偏好,是排除法的結果——我調查了 Anthropic 官方文件,上面明白寫著「Custom Skills do not sync across surfaces… You’ll need to manage and upload Skills separately for each surface」。業界方案也一面倒指向 git-first。所有人都在用 git 當 SSoT,因為沒有其他選項。
第二條,載體對等。 雲端(Claude.ai)永遠是下游 mirror,不進協作主幹。這條是針對 skill 分裂事件立的。v5.3 跟 v4.13 的分裂就是因為雲端層被當成了「另一個正本」。
第三條,權責分工。 這條最精妙,也最容易被誤解。它不是把權限鎖死——Chat 只能做 X、Code 只能做 Y。它是「主責彈性 + 核查剛性」:誰負責什麼可以調整,但交叉驗證的義務是剛性的。Code 寫完的東西 Cowork 必須驗,Cowork 的偵察結論 Code 必須能重現。這跟三權分立的憲政設計邏輯一致——行政、立法、司法之間的 check 不是可選的禮貌,是結構性的義務。這篇是「AI 與人類秩序」系列的一部分,探討的就是這種秩序如何在人機協作中被重新建構。
第四條,記憶層次。 一筆事實只在一個負責層存放,禁止跨層複製。同一層內,每筆 memory 必須原子化——一個檔案講一件事。這條是針對 memory 重複事件立的,也是後來整個 memory 系統重構的依據。
第五條,記憶擴充。 要接新的記憶載體(比如 Mem0、Letta、MCP memory server),必須走正式的 ADR(Architecture Decision Record)流程。不能因為某天覺得「這個工具好用」就直接接上去。
拍板那天,我跟 Cowork 視窗從下午四點討論到五點,v0.1 寫完立刻發現不夠,馬上修到 v0.2。整部憲法是在同一天的危機中誕生的。
從文件到防線:governance-lint 怎麼把規則變成程式碼?
憲法寫完後,日子平靜了六天。然後 4 月 25 日,又踩坑了。
一批 handoff 文件的 frontmatter 格式不統一,有的缺 status、有的沒有 ## Consequences 章節。這些在 CLAUDE.md 和憲法裡都有規定,但就是會漏。原因很簡單:規則寫在文件裡,而文件不會在你 git commit 的時候跳出來攔你。
這讓我們想清楚一件事:自律(autonomy)不夠,需要他律(heteronomy)。governance-lint 就是這個思路的產物——一個 bash pre-commit hook,229 行,負責在 commit 階段檢查機器可以檢查的規則。
目前啟用兩項硬性檢查。第一項掃描所有 handoff 文件,確認 frontmatter 有 status(只接受 Draft / Accepted / Superseded / Deprecated 四值)且內文有 ## Consequences 章節。第二項掃描文章的 pillar 欄位,確認值在 ai | circular | faith | startup | life 五個合法值之內——之前有篇文章填了 circular-economy,build 直接爆炸。
設計上有幾個刻意的決定。歷史文件有豁免機制——憲法之前的 handoff 不受新規則約束,這是一次性的赦免。但新文件必須合規。如果你真的需要繞過,可以用 --no-verify,但必須在 commit message 裡標注 [skip-lint-recovery] 並說明原因。逃生門存在,但逃生的代價是留下紀錄。
5 月 22 日的那次攔截是它第一次在生產環境真正發揮作用。48 個檔案的大批 commit,人眼漏掉了四處違規,機器沒漏。修完再 commit,13 個 commit 全部通過 governance-lint。
這套系統的演化路徑很典型:CLAUDE.md 裡的一行規則 → 被違反三次以上 → 升級為 pre-commit hook。我們叫這條路「事故驅動制度演化」——先觀察,再自動化。不要第一次就過度工程化。
GitHub 斷線:治理系統的壓力測試
2026 年 4 月 29 日,我的 GitHub 帳號 zarqarwi 被 suspend 了。沒有預警、沒有說明。
repo 沒有遺失——本地端完整。但整套工作流瞬間斷了:Pages 自動部署死了、Issues 追蹤器沒了、GitHub Actions 全部停擺。這個事件的完整工程紀錄在另一篇文章裡,這裡只講跟治理系統相關的部分。
壓力測試揭露了兩件事。
第一件:治理系統的 SSoT 原則(第一條)救了命。因為所有規則、文件、memory 都在本地 git 裡,GitHub 斷了只是少了一個 remote,不是少了事實來源。我們在 48 小時內切到 Codeberg + GitLab 雙遠端,工作流完全沒降級。如果 SSoT 當時放在 GitHub Issues 或任何雲端服務裡,這個故事的結局會完全不同。
第二件:危機加速了制度建設。在帳號被 suspend 到恢復的這段期間,我們做了 12,946 檔案的復原演練(從加密備份解壓 + 驗證),寫了五層韌性架構,上線了 75 端點的契約測試設計,強化了 commit-msg hook 的跨子專案影響偵測。不是因為有時間做,是因為「如果連 GitHub 都能斷,還有什麼不能斷」這個問題逼著你把每一層防線都想清楚。
韌性架構跟治理系統的交會點在這裡:韌性處理的是「外部服務斷了怎麼辦」,治理處理的是「內部協作亂了怎麼辦」。兩者的共同信念是同一條——不能讓任何單一節點的失效導致整個系統停擺。五層韌性架構的第一原則「No Single Point of Control」,跟憲法第一條的 SSoT 原則,本質上是同一件事的外部版和內部版。
事故轉制度:每一層防線的身世
回頭看整條時間軸,有一個清楚的模式:
2026 年 4 月 19 日,三個治理漏洞同時爆發 → 當天寫出憲法 v0.2。 4 月 20 日,給三個 AI 視窗考憲法考試 → 發現 Cowork 只考了 70%,Code 考了 97%。 4 月 25 日,handoff 格式違規累積到 N≥3 → governance-lint pre-commit hook 上線。 4 月 29 日,GitHub 帳號 suspend → 韌性架構五層全面建置。 5 月 10 日,Worker API 安全審計發現 75 個端點 → 契約測試三層架構設計。 5 月 12 日,自動優化系統停擺七週 → 正式退役 + 範式轉移到分散式 autoresearch。
每一層制度的出生證明上都有一個事故編號。沒有哪一層是「預先設計好等著用」的。
這讓我想到一個命名。我們叫這套東西 Governance Harness——不是 governance cage(籠子),是 harness(安全帶)。安全帶的功能不是限制你的行動,是讓你可以更大膽地跑。governance-lint 攔住 commit 不是為了懲罰粗心,是為了讓你在趕工的時候不用分心記規則。契約測試每天自動跑不是因為不信任,是因為 75 個端點的安全狀態不應該靠人類記憶維護。
升級階梯是固定的:觀察到問題 → 先寫進文件當軟規則 → 觀察 1-2 週 → 如果同類問題重複 N≥3 次 → 升級為自動化。governance-lint 從 CLAUDE.md 裡的一句話走到 pre-commit hook,花了六天。commit-msg hook 的跨專案影響偵測,從衝擊地圖文件走到自動化,花了兩週。速度不是重點,模式是重點:先止血,再根治。觀察夠了才自動化。
考試揭露的盲區
讓我用一個故事收尾。
憲法寫完隔天,我們做了一件可能沒什麼人做過的事:給三個 AI 視窗出了一份治理考試。15 題,分事實題、判斷題、情境題三個層級。
結果是 Code 97 分、Chat 77 分、Cowork 70 分。
最低分的是 Cowork——而 Cowork 在我們的架構裡扮演的是「司法」角色,負責驗證和仲裁。最該懂規則的角色,考最差。
原因很具體:Cowork 的沙盒環境物理上看不到某些檔案的即時狀態,所以涉及精確行數、版本號碼的事實題,它只能靠記憶回答——而記憶會漂移。Chat 的問題更根本:它根本沒有 Read 能力,所有「精確事實」都是二手的。
這個結果直接導致了兩項制度修正:限制 Chat 回答精確事實查詢的權限,以及在 Cowork 的工作流裡強制加入「sandbox 數據不等於 Mac 本機數據」的核實步驟。
治理不是寫完規則就結束的事。它跟你協作的每一天,都在考試。
常見問題
Q: 為什麼人機協作需要治理系統?直接用不就好了?
單一 AI 對話不需要。但當你同時用 Chat 做規劃、Cowork 做偵察、Code 做實作、Codex 做審計,四個視窗各自有記憶、各自會犯錯、各自會產出跟其他視窗矛盾的結論。沒有治理系統,你會花大量時間在「上次做到哪」「這個數字是真的嗎」「誰說了算」這些問題上。治理系統讓你把注意力放在真正重要的判斷上,而不是重複核對。
Q: governance-lint pre-commit hook 具體檢查什麼?
目前啟用兩項檢查:第一,handoff 文件的 frontmatter 必須包含 status 欄位(只接受 Draft/Accepted/Superseded/Deprecated 四值)且內文必須有 Consequences 章節;第二,文章的 pillar 欄位必須在五個合法值內。違規時 commit 會被擋下,必須修正後才能推。這是 229 行的 bash 腳本,掛在 git pre-commit hook 上。
Q: 這套治理系統適用於團隊還是只適用於個人?
目前是為一個人 + 多個 AI 視窗設計的。但底層邏輯——SSoT 原則、交叉驗證義務、事故驅動的制度升級——在小型團隊場景同樣成立。差別在於團隊需要處理人與人之間的權限和信任問題,而這套系統處理的是人與 AI 之間的事實一致性問題。
Q: 事故驅動制度演化的升級階梯是什麼?
觀察到問題 → 先寫進文件當軟規則 → 如果同類問題重複出現 N≥3 次 → 升級為自動化(hook、cron、腳本)。governance-lint 就是這樣從 CLAUDE.md 裡的一行文字變成 pre-commit hook 的。關鍵是不要第一次就過度自動化,先觀察模式再決定。
💬 留言討論
載入中...