Framing 容易停留在啟發式層次——5 Whys 問到第五層,HMW 生成幾個方向,但這些輸出通常是非正式的、依賴語感的陳述。Problem Frames 是 Michael Jackson 提出的形式化分析方法,把「機器要造什麼」與「世界的樣子是什麼」嚴格分開,並用一個可驗證的邏輯斷言連起來。kiro-frame 是一個 Claude Code skill,把這套方法接進 cc-sdd 的 spec-driven pipeline,讓 framing 的結果以可被下游 skill 繼承的結構產出,而不只是一份閱讀用的筆記。

理論基礎:Zave–Jackson 參考模型

Pamela Zave 與 Michael Jackson 在 1997 年的論文〈Four Dark Corners of Requirements Engineering〉提出一個參考模型,核心斷言是:

S ∧ W ⊨ R

三個符號各有嚴格定義:

符號名稱性質詞彙範圍
RRequirementOptative(期望世界如何)世界詞彙
WDomain assumptionsIndicative(世界現在如何)世界詞彙
SSpecificationIndicative(機器在介面上做什麼)僅 shared phenomena

斷言的意思:在世界假設 W 成立、機器確實做到 S 的條件下,需求 R 必然被滿足。這是一個邏輯蘊含,不是一個願景。

為何詞彙分離重要:S 只能用 shared phenomena(機器與世界共同可見的事件或狀態)描述。用世界詞彙描述 S,或用機器詞彙描述 R,都是常見的規格寫壞的方式——混詞彙讓 entailment 無法成立,bug 也因此無法被形式上定位。

可佐證性:Zave–Jackson 模型發表於 IEEE Transactions on Software Engineering(1997),Problem Frames 完整理論收錄在 Jackson《Problem Frames: Analysing and Structuring Software Development Problems》(Addison-Wesley, 2001)。這是有學術出版基礎的形式方法,不是工具文件裡自創的術語。

Problem Context 的三類域

Problem context(問題脈絡)把系統邊界圖分成三個部分:

Machine:待建造的軟體。它只能透過 shared phenomena 接觸世界,不能直接操作世界域的任何事物。

Problem domains(問題域,可有多個):

類型說明範例
Causal(因果域)有可預測的物理或邏輯因果規律硬體設備、物理系統
Biddable(可請求域)可以接受請求但不能被強制使用者、操作員
Lexical(詞彙域)資料或符號的表示與儲存資料庫、日誌、設定檔

Shared phenomena(共享現象):機器與某個域在介面上共同可見的事件或狀態,標記方式:

  • M!:機器控制(Machine initiates)
  • D!:域控制(Domain initiates)

這個標記讓控制權的歸屬顯性化——一個在 spec 裡寫成機器控制但在現實中由用戶發起的現象,是一個隱藏的 W 假設破口。

五個基本 Frame

Problem Frames 把所有子問題歸入五種原型模式,每種對應不同的域組成與關切重點:

Frame核心關切典型域組合
Required Behaviour機器直接控制並約束一個因果域的行為Machine ↔ Causal domain
Commanded Behaviour透過 biddable 域的指令來控制另一個因果域Machine ↔ Biddable ↔ Causal
Information Display把一個域的狀態即時顯示給觀察者Machine ↔ Causal/Lexical ↔ Biddable
Simple Workpieces操作一個由人編輯的 lexical 域(文件、設定)Machine ↔ Biddable ↔ Lexical
Transformation把一個 lexical 域的內容轉換成另一個 lexical 域Machine ↔ Lexical ↔ Lexical

每個 frame 都帶一份 concern 清單,常見條目:

  • Initialization:狀態從什麼初始條件啟動?
  • Reliability:機器或域故障時如何處理?
  • Identities:物件如何被唯一識別?
  • Completeness:所有需要處理的事件是否都被涵蓋?
  • Overrun:事件產生速度超過處理速度時怎麼辦?
  • Breakage:預期的域性質(W 裡的假設)如果不成立,後果是什麼?

一個複雜功能往往是多個 frame 的組合;拆開之後,每個子問題的 concern 才能被獨立檢查。

最高槓桿的產出:W Register

kiro-frame 最有實用價值的輸出不是 frame 圖,而是 W(Domain Assumptions Register)——一份把「AI 否則會默默假設的事」逐條寫成可被檢查的陳述的清單。

每一條 W 有三種狀態:

狀態意義
verified已有具體方式確認(測試、文件、對話記錄)
assumed-risk知道這個假設存在、接受其風險
to-confirm尚未確認,需要在進入下游步驟前補上

為何它對 AI 輔助開發特別重要:LLM 在沒有 W 的情況下,會用訓練資料裡的「常識」填補假設——這些假設通常不被記錄、無法被審核、也不反映目前專案的實際約束。把 W 寫明並附進 brief.md,讓每個下游 skill(spec-requirements、spec-design、spec-tasks)都讀到同一份假設清單,而不是各自猜。這個效果是結構性的,不依賴 prompt 技巧。

方法論主張(未量化):「顯性 W 能減少 AI 幻想假設」是合理推論,但「顯性 W 能減少多少幻想」並沒有針對這個 skill 的實驗數據。

卡進 cc-sdd Pipeline 的方式

kiro-frame 在 cc-sdd pipeline 裡插入分析層:

/kiro-discovery
        │
        ▼
/kiro-frame <feature>          ← kiro-frame 的位置
        │  產出 frame.md
        │  → Problem Frame Summary 附進 brief.md
        ▼
/kiro-spec-init
        │
        ▼
/kiro-spec-requirements
        │
        ▼
/kiro-spec-design
        │
        ▼
/kiro-spec-tasks
        │
        ▼
/kiro-impl

kiro-frame 的介入對下游 skill 是透明的:它只修改 brief.md(追加 Problem Frame Summary),不改變其他 skill 的介面。下游 skill 不需要知道 framing 是否發生——只要 brief 裡有 W 清單,它們自動繼承這個約束。

安裝方式:複製 skill 目錄到 .claude/skills/kiro-frame/。若需要讓 frame-review-gate 在下游 spec 步驟真正去做 entailment 驗證,需在對應 skill 文件加一行引用。

Frame Review Gate

frame-review-gate 是一個驗證關卡,對每個子問題檢查以下條件:

Entailment checkS ∧ W ⊨ R 是否成立?亦即:「如果世界按照 W 的假設運作、機器確實做到 S,R 真的會被滿足嗎?」

五個 well-formedness 條件

條件問題
ConsistencyS 的行為要求之間有無矛盾?W 的假設之間有無矛盾?
Non-trivialityS 是否確實做了一些有意義的事?
Vocabulary separationR 確實用世界詞彙寫?S 確實只用 shared phenomena?
GroundingW 的假設有無根據——verified 或 assumed-risk 都可,但不能沒有來源
Assumption accountability每個 W 的狀態(verified/assumed-risk/to-confirm)是否都已標記?

Breakage check:W 的某個假設如果不成立,整個 S∧W⊨R 推導就崩了。Breakage check 逐一問:「這條 W 如果在 production 被打破,最壞情況是什麼?」

與本專欄既有概念的對應

Problem Framing(本專欄第一篇) 用的工具(5 Whys、HMW、JTBD)是啟發式的,目的是找到值得解的問題陳述。kiro-frame 接在這之後,把啟發式結論轉譯成形式化的結構——R/W/S 是對問題陳述(R)和假設清單(W)的精確化,不是替代。

Spec-Driven Development(本專欄第二篇) 的假設浮現機制(「先列出你在假設的事」)與 W Register 在功能上高度對應。差別在於:SDD 的假設清單是 spec 寫作過程的附帶產物,W Register 是 framing 的一級輸出,且有驗證狀態欄位(verified / assumed-risk / to-confirm)。

Framing → Spec 閉環(本專欄第三篇) 的「Specify 環節前,把假設公開可被指正」這個短路防止機制,正是 kiro-frame 的 W Register 要結構性地做到的事。

cc-sdd pipeline/kiro-spec-requirements 等下游 skill,讀到的 brief.md 會含有 Problem Frame Summary;這讓「顯性世界模型 → spec」的連接是機制層面的,不靠每次 framing 完了後手動整理輸出。

誠實評價

優點

  • W 是可被審查的文件:把 AI(和人類)會默默假設的事寫成清單,讓每個假設有明確的確認狀態,這是結構性的品質提升,而不只是 prompt 改善。
  • S∧W⊨R 是問題定向的正確性判準:「spec 正確嗎」不是感覺題,Entailment check 給出了一個可以操作的問法。
  • Five frames 有助發現忽視的域:系統化地問「這個子問題的域是 causal / biddable / lexical?」,常常讓人在 framing 階段就發現被忽略的 stakeholder 或約束。
  • cc-sdd 整合是非侵入的:只改 brief.md,下游 skill 不需修改。

取捨與門檻

  • 形式化有學習成本:Zave–Jackson 模型和 frame 分類需要一定的學習投入;Jackson 的書本身就是一本 400 頁的學術著作。不熟悉的人在前幾次使用時,framing 的品質可能不如熟練使用 5 Whys 的直覺方法。
  • R/W/S 的詞彙分離難以保持:在實際寫作中,「世界詞彙」和「機器詞彙」的邊界不總是清晰;特別是在 biddable 域裡,用戶行為和系統行為的交界很容易模糊。
  • 這個 skill 本身的效益是主張:Problem Frames 作為學術方法有出版記錄可佐證,但「kiro-frame skill 讓開發效果更好」屬於工具作者的主張,沒有獨立的實驗驗證。
  • 何時不值得用:bug fix、config 變更、或任何問題到解法的映射已經顯而易見的情況,framing 投入大於收益。kiro-frame 自己的文件也明確標出這三類跳過情境。

延伸