資料來源#
- Full Walkthrough: Workflow for AI Coding — Matt Pocock
- Uncle Bob on Software Fundamentals in the Age of AI
問題#
從《規格驅動開發是新一代瀑布式開發》提出的問題是:正如 Pocock 所提議、Martin 的實務所預設的那樣,持續性是否是提示與規格驅動開發之間恰當的定義界線?
結論#
不是。持續性是一種代理指標——容易觀察,與真正重要的特性相關,但在兩端都會判錯。語料真正用來區分規格與提示的特性是權威性:若後續工作會依據某項產物接受評判,那麼該產物就是規格。持續性之所以重要,只是因為儲存產物是讓「依據它評判」得以實現的最低成本方式。
三項發現支持這個結論,前兩項也修正了問題本身的前提:
- **Pocock 的提議有兩個子句,只有第二個站得住腳。**他問:「你有持續保存規格,對吧?你會回頭參照那些規格嗎?」(Full Walkthrough: Workflow for AI Coding — Matt Pocock)。回頭參照才是起作用的子句,持續保存是促成條件;而他刪除 PRD 的理由——文件腐化,代理程式找到過時文件後被誤導——造成傷害的前提是讀回文件,而不只是儲存它。
- **Martin 的實務並未預設持續性界線。**他確實在 repo 裡保留規格檔。他拒絕保留的是計畫。
- 語料依據另一個變項,把持續存在的產物分類為規格或非規格,而且早已有名稱——見《代理程式控制平面模式:tickets、迴圈、規格與記憶檔》和《代理程式脈絡檔》中的政策/工作圖/強制執行區分。
修正 1:Pocock 的界線是持續保存並回頭參照#
值得依照原本的脈絡閱讀這段對話,因為 wiki 頁面把它壓縮了。Pocock 對這個標籤感到不滿,而不是對實務不滿——「你可以對它有十種不同解讀,每次你把資訊交給代理程式……提示工程算不算規格驅動開發?某種程度上算」——他於是以持續性為切入點,試圖阻止這個詞涵蓋一切。但他實際說出的句子是一個合取命題,兩個合取項並不是同一種測試。
他自己的工作流程就把兩者分開了。他在一場 grilling session 後只產生兩份文件——PRD(目的地)和 Kanban(旅程)——接著,依照《設計概念拷問》,他既不是刪除 PRD,也不是以一般方式保留它:**他會關閉 GitHub issue。**用他的話說:「我只要把它標記為已關閉。它想要的話還是可以取用,但會看到一個視覺提示,知道事情已經完成。」產物仍然存在;它的權威性卻被撤銷了。這不是持續性規則,而是一種以保留產物方式實作的回頭參照規則——這也正是文件腐化論點實際支持的做法,因為過時文件只有在有人讀回並把它當成現行內容時才會造成傷害。
同一來源中的另外兩個細節也顯示,持續性不適合描述他自己的觀點。他完全不打算最佳化 PRD(「我不覺得那有多大價值……真正重要的是和 AI 達成一致,而這是在 grilling session 裡做到的」)——因此,持久文件是低價值產物,短暫對話反而是高價值的。至於 push/pull 的區分,關乎權威性,而非儲存方式:CLAUDE.md 的內容會無條件 push 給每個代理程式;skill 則在代理程式選擇時才會 pull。他建議把編碼標準 push 給審查者,讓實作者自行 pull。兩份檔案的持續性完全相同。設計決策全在於哪一份具有約束力。
修正 2:Martin 會持續保留規格檔——並附有檢查器#
該頁面把 Martin 的「不,我不會……規格都是短暫的,會消失」解讀為全面拒絕持續保存。但在同一場訪談中,他早了四十分鐘就描述了另一種產物類別,情況恰好相反:
「我還做了一個確定性工具,可以定義哪些模組應該依賴哪些模組,哪些不應該依賴哪些模組,以及相依關係應該如何流動。**這些內容會放進一個精簡明確的規格檔,代理程式不能違反。**最後還會執行另一個小型檢查器;如果違反了,就得想辦法修好。」 ——Uncle Bob on Software Fundamentals in the Age of AI
這個檔案持續存在、位於 repo 中、每次執行都會讀取,而且具有約束力——這是他整套實務中最強形式的規格。因此,Martin 的立場不是規格都是短暫的;而是**限制會持續保存並以機械方式強制執行,計畫則是短暫的,而且不受任何機制強制執行。**他提出的持久規格替代方案——CRAP scorer、mutation tester、相依規則檢查器(《讓不切實際的品質工具重返實用》)——所表達的是同一個重點,只是從強制執行機制而非檔案來看:他不是刪除意圖的持久陳述,而是把它移進會讓建置失敗的機制裡。
如此解讀,Martin 的實務根本沒有預設持續性界線。它更接近《確定性執行前閘門》的規則;語料在別處把它表述為:「skill 讓違規變得罕見,而 hook 讓違規幾乎不可能」(《已提交產物鏈》):建議性文字是弱產物,可執行限制是強產物,而儲存對兩者都只是附帶條件。
測試 1:語料不稱為規格的持續性產物#
如果持續性就是界線,下列項目全都會是規格驅動開發。但語料中沒有任何地方這樣描述它們。
| 持續存在的產物 | 為何不符合「規格」的解讀 |
|---|---|
CLAUDE.md / AGENTS.md / SOUL.md / .cursorrules(《代理程式脈絡檔》) | 有版本控管、可檢視、每個工作階段都會以確定性方式注入、雙重受眾——持續性和回頭參照都達到最大程度。語料把它歸為政策平面:它規範工作範圍內代理程式的行為方式,而非正在建置的內容 |
WORKFLOW.md(《Symphony》、《以 ticket 驅動的代理程式協調》) | 由 repo 版本控管的 prompt-as-policy——「處理一個 issue、取出 repo、將它標示為進行中、加入 PR」。這是流程,不是產品 |
SPEC.md(《Symphony》) | 持續存在,而且確實是規格——但要注意,它規定的是協調器;OpenAI 還會把它編譯成六種語言,用來模糊測試其中的歧義。它之所以是規格,不是因為放在 repo 裡,而是因為實作會依據它接受檢查 |
| ticket 圖(《以 ticket 驅動的代理程式協調》) | 整個控制平面堆疊中最持久、最具權威性的產物,而且明確屬於「目標,而非狀態轉換」——它負責選取工作,不負責規定工作 |
REVIEW.md、hooks、lint 設定(《已提交產物鏈》、《確定性執行前閘門》) | 持續存在、代理程式會讀取、具有約束力,而且毫無爭議地不是規格 |
| Martin 的相依規則檔(Uncle Bob on Software Fundamentals in the Age of AI) | 持續存在,但作者在同一場對話中說自己不保留規格 |
CLAUDE.md 這列最具決定性。它符合持續性測試的每個條件——持續保存、回頭參照、每個工作階段都會使用,而且是結構所致——如果這就讓工作流程成為規格驅動,那幾乎每個 Claude Code 使用者都在進行規格驅動開發,這個詞便毫無區別力。Pocock 當初用這項測試,就是想避免這種問題。
測試 2:不持續存在、卻完成整套規格工作的產物#
漏收的問題更嚴重,因為它會錯置語料中最重視規格的立場。
- grilling transcript。《設計概念拷問》位於PRD 替代方案光譜的左端——也就是建置前規格最完整的立場,會問 10 到 100 個問題,一場 session 長達一小時。它的輸出產物是「對話歷史本身」,由
write-a-PRDskill 使用一次後便消失。依照持續性測試,語料中最具規格驅動特徵的立場反而是提示。 - Carey 錄下的 why-not-what 對話(《原型勝過 PRD》)。一份交給 Claude 後就丟棄的逐字稿;它產生的「原型就是規格」才是持久產物,但它根本不是文件。Carey 依自己的論點——「兩個人可以看著同一份文件,腦中卻想著兩種不同的產品」——比 PRD 規定得更精確,整個流程中卻沒有任何持續保存的規格。
- **Martin 自己刪除的計畫。**他寫下的計畫規範了整個建置過程——代理程式會照著執行,甚至超過人類早已停手的時點;這正是他抱怨的核心。在工作期間,這些計畫完成了百分之百的規格工作。它們和《已提交產物鏈》中的
plan.md唯一不同的地方是儲存方式,而語料肯定把後者稱為規格驅動。 - **口頭提出的限制。Karpathy 修正 MenuGen 時說的「這些必須是我們用來串起所有資料的唯一使用者 ID」(《Vibe Coding 與 Agentic Engineering》),是他直接稱為「規格」**的人類殘留;這句話是口頭說出的,沒有寫進檔案。
測試 3:Pocock 自己提出的歸謬論證#
他用來反駁這個標籤的例子是「你只要修好標頭中的載入問題」——一句交代給同事的指令。依持續性測試,答案是「不是規格」,這聽起來合理。但若把完全相同的句子寫進已提交的 TODO.md,同一測試就會判定為「規格驅動開發」,儘管工作內容完全沒變。只要 git add 就能翻轉的定義界線,追蹤的是檔案系統,不是方法論。
語料真正採用的界線:權威性#
看過上述每個案例後,區分規格與提示的變項是:下游工作是否依據該產物接受評估:
plan.md是規格,因為「PR 會依據plan.md審查」(《已提交產物鏈》)。- Fung 已提交的規格是規格,因為「Claude 很擅長根據規格驗證是否發生漂移」——《以程式碼為真實來源》指出,提交規格的價值在於檢查,而非儲存。
- evals 就是規格,因為「PRD 描述意圖;eval 定義完成」,而在 Shopify,評分規準真的會成為 RL reward(《Evals 作為產品規格》)。
- Martin 的相依規則檔是規格,因為檢查器會在違規時讓執行失敗。
CLAUDE.md不是規格,因為沒有任何內容會依據它接受檢查——語料記錄過一個案例:一條正確設定目標、已載入且仍有效的CLAUDE.md規則,最後就是沒有被遵守,而且沒有任何閘門能抓到違規(《代理程式脈絡檔》)。- ticket 不是規格,因為它指出目標,而工作是依據該目標的產物接受評判,不是依據 ticket 文字。
《以程式碼為真實來源》已經用規則形式說明了強版本,取自 Anthropic playbook 中關於舊系統遷移的側欄:**每項產物都明確指定唯一一個真實來源系統,其他地方都只保留副本或連結。**若以持續性解讀,這條規則就難以理解——Jira、repo 和 markdown 工作副本都持續存在;但以權威性解讀,這條規則完全合理,因為它精確規範了哪一份持久副本具有約束力。
其他界線:依能解釋多少語料排序#
| 候選界線 | 判定 |
|---|---|
| 權威性——後續工作是否依據它接受評判? | **最佳。**能正確分類測試 1 至 3 的每個案例,已是語料自己的分類法,也是 Pocock 和 Martin 在持續性語言底下真正要表達的概念 |
| 回頭參照/重新讀取(Pocock 的第二個子句) | 強而有力,也是正確解讀他論點的方式,因為文件腐化造成的是讀回傷害。只有遇到 CLAUDE.md 時會失效;它被最大程度地反覆參照,卻不是規格——因此還需要權威性才能完整解釋 |
| 可執行性/機械可檢查性 | 是權威性的鮮明子案例,也是 Martin 實際採用的界線。能乾淨地區分建議性文字和強制執行的限制(《確定性執行前閘門》),但涵蓋不足:intent.md 和目的地 PRD 可以約束人類決策,即使沒有檢查器也成立 |
| 真實來源優先權 | 權威性的正式版本,已在《以程式碼為真實來源》寫成每項產物的規則。它回答「兩項產物相互矛盾時,哪一項優先?」但僅此而已——這是平手時的裁決規則,不是定義 |
| 人類審查/指定的接受者(《已提交產物鏈》) | 在看似合理的界線中最弱,而且語料知道原因。Pocock 刻意不審查自己的 PRD;鏈條本身的累積修正問題表示,提交紀錄「只能證明有人接受了,從不能證明有人讀過」(《人類審查 AI 撰寫的程式碼,仍是真正的控制機制嗎?還是早已流於形式?》)。沒有任何被引述的實務遵守這條界線 |
| 實作可見度(DHH、《Vibe Coding 與 Agentic Engineering》) | 這是另一類答案,值得指出:DHH 在相鄰的 vibe-coding 界線上,關注的是人類的行為(你會不會看實作?),而不是任何產物。它是二元且可觀察的,因此和持續性一樣,因為相同理由而具有吸引力 |
為何持續性看起來仍然正確#
最坦誠的辯護,也是值得保留它作為經驗法則而不直接捨棄的理由:**權威性是一種傾向,持續性則可供觀察。**除非觀察接下來一個月的工作,否則你無法得知某項產物是否約束後續工作;但只要一秒,就能看到它是否位於 repo 裡。而持續性幾乎是權威性的必要條件——語料中沒有任何產物能在沒有某種持久形式下規範後續工作(Martin 的檢查器是程式碼;Carey 的原型已提交;grilling transcript 的權威性恰好隨對話結束)。因此,站得住腳的說法是:
持續性是權威性最便宜的促成條件,因此也是相當不錯的實地測試。它不是定義,而且在兩個方向上都會錯判語料自己的兩端立場。
還有一項結構上的佐證:語料中的立場光譜(《AI 原生速度下的 PRD 替代方案光譜》)依照建置前規格的多寡排序,並把「持久產物」列為第五個描述欄位,而不是排序依據。光譜上的每個立場都有某種持久產物——PRD 加 Kanban、一頁式文件、選定的 PR、原型,以及越過右端後的 Martin 檢查器。如果持續性是主軸,整條光譜就會坍縮成一個點。
證據層級#
這個群集幾乎全是 practitioner-opinion,而這個定義問題不是語料中任何來源原本要回答的問題。
- Pocock(工作坊,
practitioner-opinion)、Martin(訪談,practitioner-opinion)、Carey(演講)、DHH(podcast)、Fung(演講)——五份第一手報告,沒有一份衡量任何形式的規格。 - 《已提交產物鏈》屬於
vendor-claim,而且依據頁面自己的說法,完全沒有任何形式的測量——每個「如何衡量」區塊列出的都是待蒐集的指標。 - 《規劃/執行分工》是這個群集中唯一的遙測資料(400K Claude Code 工作階段,約 70% 的規劃決策由人類做出),但它衡量的是決策分工,不是產物形式。因此無法裁決這個問題。
- vault 中最接近的兩項測量,都和脈絡檔而非規格有關,衡量內容而非儲存方式:Khatri 對正確性的有限零結果,以及 NVIDIA SkillEvaluator 在專有知識 skills 上帶來的 +41 Correctness(兩者都收錄於《代理程式脈絡檔》,而且都明確指出方法上的限制)。
- 新增於 2026-09-22——來自無關語料,首次測量本結論本身採用的判準。Gao & Chen(arXiv 2608.20195,
empirical)追蹤 557 個真實 agentic coding 工作階段中的 3,033 次文件互動,觀察到零次將文件當成程式碼檢查依據的案例:候選互動週期中的Validate階段沒有任何事件,Verify互動類型沒有出現實例;代理程式查閱文件後三個事件內執行測試的比率為基準比率的 0.23 倍,執行建置的比率則是 0.15 倍。作者自己的總結——「我們沒有觀察到文字說明發揮規格作用」——正是本頁的結論,不過是從互動軌跡而非分類得出的,而且嚴格來說只關乎權威性這一半:相關產物都已持續保存、提交,並反覆參照(文件讀取重複發生的比率是 0.270),卻沒有任何內容會依據它們接受檢查。這些零值來自操作定義下的工具呼叫模式,因此界定的是可觀察到的檢查,而非測量工具無法看見、經由模型推理進行的檢查。
因此,上述結論是概念性結果——它透過拿語料自己的分類來檢驗一項候選定義而得出,其可靠程度取決於那些分類的品質。這不是關於結果的實證主張,也不應如此解讀。
哪些證據會推翻這個結論#
- **有一項測量顯示儲存本身會改變結果。**固定內容與讀回行為,只改變產物是否提交;若返工、缺陷率或漂移因此不同,持續性就是獨立變項而非代理指標,這個結論便會大幅削弱。語料中沒有任何研究做過這項測試;Khatri 的消融測試架構是目前最接近的工具,而《已提交產物鏈》的指標組(
spec.md的提交日期晚於第一個plan.md)則是最接近的現有指標。 - 某項產物完全沒有持久形式,卻能約束後續工作——後續工作確實依據只存在於對話中的內容接受檢查。這會打破「持續性幾乎是必要條件」的一半,讓持續性從代理指標降為巧合。
- 不依賴讀取的持續性社會機制。如果提交規格會改變行為,是因為它可供看見,而不是因為有人讀它——例如團隊承諾、稽核員接受,或《以程式碼為真實來源》提到的「稽核員和監管機構已經接受它們」這種壓力——那麼儲存就有權威性無法涵蓋的實際作用。語料中有一個相鄰線索,顯示即使沒人讀取,提交檔案也會改變現實;不過那談的是安全性攻擊面,而非方法論論點:已提交的
CLAUDE.md被攻擊者用來做偵察(《代理程式脈絡檔》、UK AISI INC-2026-07-28-01)。 - **定義被工具直接敲定。**如果主要工具推出一種「規格驅動開發」模式,而其字面機制就是持續保存,這個詞就會跟著工具走。那會解決社會語用上的問題,但概念問題仍會停留在本頁目前的結論。
延伸連結#
- 《規格驅動開發是新一代瀑布式開發》——提出問題的頁面;修正之處在於 Martin 自己的實務依據可強制執行性劃界,而非儲存方式
- 《代理程式脈絡檔》——最具決定性的過度納入案例,也是本結論所依據的政策與工作圖分類法來源
- 《代理程式文件行為》——從互動軌跡側佐證本結論:在 3,033 次互動中,持續保存且反覆參照的文件沒有任何可觀察到的檢查步驟;論文 §6.2 也指出,資料不支持把可驗證性列為推論
- 《以程式碼為真實來源》——以強形式表述權威性界線(每項產物只有一個真實來源),並指出提交規格是為了檢查規格漂移
- 《已提交產物鏈》——「依據
plan.md審查」這種讓權威性變得明確的表述,以及審查不等於閱讀的提醒 - 《原型勝過 PRD》/《設計概念拷問》——兩個納入不足的案例:光譜兩端都有短暫對話完成整套規格工作
- 《Vibe Coding 與 Agentic Engineering》——相鄰的定義爭論,DHH 把界線畫在人類行為,而非某項產物上
- 《Evals 作為產品規格》——沒有文字說明卻具權威性的最佳案例:eval 定義完成,在 Shopify 更成為 reward
- 《代理程式控制平面模式:tickets、迴圈、規格與記憶檔》——以分層分類法(tickets/迴圈/政策/記憶)依權威性整理這些產物
- 《AI 原生速度下的 PRD 替代方案光譜》——排序依據是建置前規格的多寡,並把持久產物列為描述性欄位的光譜
資料來源#
- Uncle Bob on Software Fundamentals in the Age of AI — Robert C. Martin 與 Matt Pocock,2026-08-19,
practitioner-opinion。包括「規格都是短暫的」那段對話,以及「精簡明確、代理程式不能違反的規格檔」段落 - Full Walkthrough: Workflow for AI Coding — Matt Pocock — Matt Pocock 工作坊,
practitioner-opinion。包括文件腐化的回答(「我只要把它標記為已關閉……會看到一個視覺提示,知道事情已經完成」)、「最佳化 PRD 沒有價值」的回答,以及 push/pull 的區分 - The Committed-Artifact Chain — Anthropic Applied AI,2026-08-21,
vendor-claim,沒有測量 - Planning / Execution Division of Labor — 這個群集唯一的遙測資料,且與本問題無關
Cited by 10
- Rationale as a Dated Record: Where the Why Lives for the Next Reader×7
Since June the vault has gained three things the earlier page did not have: the authority analysis…
- Spec-Driven Development as the New Waterfall×3
Does storage-per-se move any outcome once content and read-back behaviour are held fixed — the same…
- Agent Documentation Behavior×2
This is the behavioral measurement of the property Layered Supervision names definitionally: a…
- Agent Context Files
Persistence As The Spec Driven Line — uses this page as the decisive counterexample to…
- Code as Source of Truth
Persistence As The Spec Driven Line — reads this page's two rules as the strong form of the…
- The Committed-Artifact Chain
Persistence As The Spec Driven Line — takes this page's "the PR is reviewed against plan.md" as the…
- Design Concept Grilling
Persistence As The Spec Driven Line — this page as the under-inclusion case that breaks…
- AI Coding Practice
Persistence As The Spec Driven Line — No — persistence is an observable proxy for the property that…
- Prototype Over PRD
Persistence As The Spec Driven Line — this method as a counterexample to defining spec-driven…
- Vibe Coding vs. Agentic Engineering
Persistence As The Spec Driven Line — settles that neighbouring quarrel against persistence and…
Related articles
- Agentic Technical Debt
Debt that *compounds* (not just accumulates) because each agentic-coding session re-derives architectural decisions wit…
- Open Questions Backlog
Generated by `_system/lint.py --write-backlog`. Do not hand-edit. Domain and Watching sections carry one row per page —…
- Spec-Driven Development as the New Waterfall
Robert C. Martin reads the 2026 spec-driven-development movement as the 1970s big-design-up-front temptation returning…
- The Committed-Artifact Chain
Anthropic's Applied AI SDLC playbook makes every stage end by committing a machine-readable artifact the next stage rea…
- Building Is Cheap, Arguing Is Expensive
"In technical debate, code wins": generate three PRs vs whiteboard; prototype over design doc; reduce design docs
