系列說明 >> 本系列大部分 PR 來自私人或公司專案,部分程式碼、環境設定與實作細節不便公開。
我只能保證文中提到的 PR 與問題皆為真實案例,但會經過必要的匿名化與內容調整。
本系列主要分享問題如何被發現、背後的思考方式,以及解法如何形成,不會深入討論完整實作與部署細節,敬請見諒。
如果回到 Day 1,我真的沒想這麼多。
當時的問題很單純:
我能不能不要每次都自己開 Terminal、接 UART、下 Command,再把結果貼回去給 Agent?
先讓它碰得到設備再說。
結果 Day 2 Full Run 一放大,PASS 開始露餡。
有些 Command 根本沒跑完整。
有些 Readback 不對。
有些 RC 跟 Report 混在一起。
到了 Day 3,為了知道 Command 到底跑完沒有,我們甚至把 Marker 塞進 UART,然後再花一篇把自己塞進去的污染拔掉。
非常工程師。
先挖洞。
掉進去。
再開始討論洞為什麼不該存在。
後來 serialwrap 有 Transparent UART、WAL,Human monitor 跟 Agent probe 也能一起活著。
我那時才慢慢感受到:
Agent 能碰到硬體,只是第一關。
真正重要的是,它碰了什麼、什麼時候碰、結果從哪裡來,之後還有沒有東西可以重看。
不然 UART 從「只有人能操作」進化成「Agent 也能操作」,只是把不可追的手工操作換成不可追的自動操作。
速度比較快而已。
FAIL 通常很誠實。
它至少會站在那裡告訴你:
我壞了。
PASS 比較麻煩。
它會讓你想下班。
Day 8 之後,問題從「Test 能不能跑」變成:
這個 PASS 到底是哪一份 Case、哪一列 Workbook、哪一份 YAML、哪段 Source、哪個 Before/Proposed 算出來的?
另一份 YAML 能不能冒充審過的版本?
Repo 拆過以後,Audit Pipeline 還是不是指著同一份 Cases?
四百多條 Case 跑到一半斷掉,明天是 Resume,還是從頭再燒一次 Bench?
這一幕做完後,我對 PASS 的看法變得很差。
不是不相信 PASS。
是開始要求它帶證件。
結果
+
Identity
+
Provenance
+
Evidence
+
可重播的 Progress
少一塊,都只能算:
有一個東西說它過了。
Test PASS 從答案變成了一個 Claim。
做到 Audit,我原本以為已經夠龜毛。
Criteria 要查。
Citation 要綁。
同一 API 在 Workbook 出現多列,要知道到底引用哪一列。
然後 Day 14 又發現:
正向跑三次都 PASS,也可能只是 Criteria 寫得太鬆。
所以補 Negative Control。
錯的值也要真的 Fail。
很好。
再往下一天,Auditor 跑完告訴我:
「Source 我有看。」
我忽然又卡住。
我要怎麼知道你真的看了?
於是連 Reviewer/Auditor 的 Read,都開始要求 Machine-observed Tool Calls。
這時我才真正接受一件事:
No Self-certification 不是用來防 Agent。
它是用來防所有工程角色。
Builder 不能自己說 Build 對了。
Verifier 不能自己說 Verify 過了。
Reviewer 也不能因為名字叫 Reviewer,就自動獲得可信度。
包括我自己。
只要某個角色同時擁有:
做事
+
定義成功
+
宣布自己成功
遲早會出事。
差別只是幾點下班。
Day 16 開始,我本來以為故事會進入:
多 Agent 平行開工,效率起飛。
確實有起飛。
先飛走的是我的注意力。
誰在做哪個 Issue?
哪隻 Agent 結束了?
下一隻能不能開始?
誰卡住?
哪份 Plan 才是現在的?
Agent 說 Done 了,Workflow 為什麼沒往下?
我一邊回答、一邊切 tmux、一邊看 Branch、一邊把下一棒叫起來。
後來才發現:
原來我一直是那個沒有 Repo、沒有 Test、也沒有 Log 的 Scheduler。
所以才一路長出 Durable Job、Completion Lifecycle、Pinned Plan、Planning Artifact、Card/Combo/Deck、Coordinator、Control、Monitor。
名字很多。
但它們其實一直在拆同一件事:
以前偷偷放在人腦裡的責任,到底應該由誰正式持有?
D17 最關鍵的不是「Agent 做完」。
是:
poll
→ gate
→ handoff
→ release
真的走完,下一棒才有資格開始。
D18 不是多一份 Plan Parser。
是 Ready 跟 Fanout 不能各信各的。
D19 小pa不是來幫我寫比較漂亮的 Plan。
是 Plan 被退件時,終於有人對「這次到底要做什麼」負責,而且內容本身看得到、查得到。
D22 Cortex 正式拆出去時,我又踩到一次:
新 Repo 能跑,不代表舊家已經沒權力。
所以舊 Package、Import、Manager、Timer 沒退乾淨以前,都不能說 Cutover 完成。
到這裡,Agent 沒有變得比較聽話。
只是它們開始不能靠一句:
「Done。」
直接改變世界。
Cortex 剛拆完沒多久,下一隻 Agent 看著舊 Package 問:
為什麼不能先留著相容?
我又開始解釋:
兩份 State Owner。
舊 Timer。
Authority Cutover。
打到一半,我忽然覺得很累。
不是因為這題很難。
是因為這題我昨天才付過學費。
前二十二天其實一直都有這種東西:
局部能跑
≠ 全鏈完成
同一個 Fact 有兩份 Authority
≠ 比較安全
沒有 Durable Artifact
→ 下一個人只能重新猜
所以 D23 才開始做 Memory。
但 Memory 這條線也沒比較客氣。
Transcript 全存,下一隻 Agent 還是讀不完。
切成 Atomic Slice,東西一多又找不到。
MOC/Search 有了,Session Start 的 Brief 又只是導覽,不是依 Task Recall。
Hook 有觸發、Brief 有內容,結果 Agent 根本沒真正開 Knowledge。
Memory 拆成 Hippo、Usage 能觀察之後,到了 D29 又出現更漂亮的一巴掌:
舊答案跟新答案一起被 Recall。
我一開始怕 Agent 忘記。
做到最後開始怕它記得太好。
所以 Knowledge 還得知道:
這是在哪個 Code State 學到的
這份是不是已被新版取代
這只是某次 Session 的狀態
這其實是一件還欠著的事
Memory 能提供的是 Prior Knowledge。
不是現在的 Truth。
這條線如果不守,所謂「越來越會學」,最後很可能只是:
越來越有自信地翻出以前的答案。
表面上,這三十天有 UART、TestPilot、Audit、Persona、Cortex、Hippo。
Repo 越來越多。
名詞也越來越多。
但如果把名字全部拿掉,剩下來的東西很像:
能跑
≠ 完成
PASS
≠ Proof
有人說看過
≠ 真的看過
Agent Done
≠ Workflow Transition 完成
Read
≠ Applied
Applied
≠ Outcome
記得以前
≠ 現在仍然正確
我後來常寫的那些原則,也不是一開始坐在桌前設計出來的。
什麼 One Authority per Fact。
Artifact before Transition。
Physical Reality Wins。
Bounded Autonomy。
No Self-certification。
比較像每踩一次坑,就多長一條疤。
因為只要責任沒有被外顯,最後一定會有人偷偷補。
通常是我。
只要 Authority 有兩份,最後一定會有人挑自己喜歡的那份。
通常也是我。
只要沒有 Artifact,下一次就只能靠記憶。
很不幸,還是我。
所以這三十天真正被自動化掉最多的,可能不是 Coding。
是:
我腦子裡那些原本沒有名字、沒有 Log、沒有 Contract 的工程責任。
現在 Cortex 已經能發布 Canonical Engineering Outcome。
Hippo 也知道一則 Memory 有沒有被 Offered、Read、Applied。
看起來只差最後一條:
這次用了哪則經驗
+
最後工程結果到底怎樣
然後才能比較有資格討論:
這則經驗應該 Reinforce、Contradict,還是 Retire?
但這條 Outcome Binding 還沒完成。
Hippo 的 Issue #96 也還開著。
所以沒有「三十天完整 Autonomous Learning Loop 成功閉環」這種結尾。
沒有就是沒有。
如果我在最後一天為了漂亮,把 Open Issue 寫成架構已完成,那前面二十九天大概都白寫了。
這系列一路在講:
Completion 不能靠自己宣布。
Day 30 也一樣。
剛開始用 Agent,我很容易把焦點放在:
它能不能寫?
它能不能修?
它能不能一次做更多?
現在我比較在意的是:
它做了以後,誰能證明真的發生?
它要改 State,誰有 Authority?
它說 Done,哪個 Artifact 支持 Transition?
它拿以前的經驗來用,那份經驗現在還成立嗎?
我沒有因此變得比較不相信 AI。
剛好相反。
正因為我準備讓它做更多,所以才不能把可信度建立在:
「它看起來很有把握。」
Agent 可以寫 Code。
可以操作 UART。
可以跑 Test。
可以 Review。
可以 Plan。
可以派工。
可以讀 Memory。
有一天,可能真的可以自己完成更長、更完整的工程閉環。
但有一件事我希望不要跟著自動化掉:
它不能只因為自己說做對了,就得到「做對了」的資格。
三十天前,我只是想讓 Agent 幫我多做一點事。
三十天後,我真正想留下來的,是一套即使 Agent 做得越來越多,現實還是有辦法對它說:
「等等,證據呢?」
這三十天的路很長,也很短,希望大家在這段旅程裡都能有所收穫。
Have a nice day.