Claude-skill-registry analyze-frame
當接收到新需求或 Event Storming 產出後觸發。分析問題類別(CBF/IDF/RIF),生成完整的規格目錄結構。實現「需求與實作分離」、「規格即文檔、文檔即規格」。
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/analyze-frame-knowlet-pf-skills" ~/.claude/skills/majiayu000-claude-skill-registry-analyze-frame-577f35 && rm -rf "$T"
manifest:
skills/data/analyze-frame-knowlet-pf-skills/SKILL.mdtags
source content
Analyze Frame Skill
觸發時機
- 接收到新需求描述時
- Event Storming 工作坊產出後
- 使用者要求分析問題框架時
核心任務
將需求分析為 Problem Frames 的五種基本類別,並輸出結構化的規格目錄。
Problem Frame 類別定義
CBF (Commanded Behavior Frame) - 命令行為框架
- 特徵:Operator 發出命令,Machine 控制 Controlled Domain 執行狀態變更
- 對應 Sub-agent:
command-sub-agent - 典型場景:建立訂單、更新資料、執行交易
- CQRS 角色:Command Side
IDF (Information Display Frame) - 資訊顯示框架
- 特徵:使用者查詢資訊,系統回傳資料(無狀態變更)
- 對應 Sub-agent:
query-sub-agent - 典型場景:查詢報表、搜尋資料、讀取詳情
- CQRS 角色:Query Side
RIF (Required Behavior Frame) - 反應式框架
- 特徵:系統對事件做出反應,通常是非同步處理
- 對應 Sub-agent:
reactor-sub-agent - 典型場景:事件監聽、訊息處理、系統整合
WPF (Workpieces Frame) - 工作件框架
- 特徵:對工作產物(文件、報告)進行編輯與管理
- 典型場景:文件編輯、報表生成
TF (Transformation Frame) - 轉換框架
- 特徵:輸入資料經過轉換產生輸出
- 典型場景:資料轉換、格式轉換、ETL
輸出:規格目錄結構
在
docs/specs/{feature-name}/ 目錄下生成完整規格:
docs/specs/{feature-name}/ ├── frame.yaml # 問題框架定義 (核心) ├── acceptance.yaml # 驗收測試規格 (在根目錄) │ ├── requirements/ # 需求層 (What) - 純業務語言 │ └── cbf-req-1-{feature}.yaml │ ├── machine/ # 機器層 (How) - Application 層 │ ├── machine.yaml # Machine 定義 │ ├── controller.yaml # API 入口規格 │ └── use-case.yaml # Use Case 規格 │ ├── controlled-domain/ # 領域層 - Domain 層 │ └── aggregate.yaml # Aggregate + Entities + Value Objects │ ├── cross-context/ # 跨 Bounded Context 依賴 (若有) │ └── {context-name}.yaml # ACL 定義 │ └── runbook/ # 執行指南 (選用) └── execute.md
命名規範
- requirements/:
{frame-type}-req-{n}-{feature}.yaml- 範例:
cbf-req-1-create-workflow.yaml - Frame Type:
|cbf
|idf
|rif
|wpftf
- 範例:
- acceptance.yaml: 放在規格根目錄,不是子目錄
frame.yaml 規格格式
# docs/specs/{feature-name}/frame.yaml problem_frame: "{FeatureName}" frame_type: CommandedBehaviorFrame # | InformationDisplayFrame | RequiredBehaviorFrame intent: | {一句話描述問題意圖} {使用 "When ... the Machine shall ..." 格式} # --------------------------------------------------------------------------- # Problem Frame Components # --------------------------------------------------------------------------- operator: name: "{Actor}" description: "{Actor 描述}" machine: name: "{FeatureName}Machine" machine_spec: machine/machine.yaml controlled_domain: domain: "{DomainName}" entity: "{AggregateRoot} (Aggregate Root)" aggregate_spec: controlled-domain/aggregate.yaml # --------------------------------------------------------------------------- # Frame Concerns(問題框架關注點) # --------------------------------------------------------------------------- frame_concerns: - id: FC1 name: "{Concern Name}" description: | {描述這個關注點的業務規則或技術約束} satisfied_by: - controlled-domain/aggregate.yaml#invariants.{name} - tests#{test-id} - id: FC2 name: "Interference / Concurrency" description: | {描述並發或干擾問題} satisfied_by: - machine/use-case.yaml#transaction_boundary - machine/use-case.yaml#idempotency # --------------------------------------------------------------------------- # Cross-Context Dependencies(跨限界上下文依賴) # --------------------------------------------------------------------------- cross_context_dependencies: - id: XC1 name: "{DependencyName}" source_context: "{SourceBC}" target_context: "{CurrentBC}" interface_type: "AntiCorruption Layer" contract_spec: cross-context/{context-name}.yaml # --------------------------------------------------------------------------- # Generation Metadata(生成元數據) # --------------------------------------------------------------------------- generation: version: "1.0.0" created_at: "{ISO-8601}" last_generated: null history: [] output_paths: application: "src/application/use-cases/" domain: "src/domain/" infrastructure: "src/infrastructure/"
requirements/req-{n}-{feature}.yaml 格式
# 需求層:純業務語言,不含任何實作細節 requirement: id: REQ-{NNN} title: "{Feature Title}" type: functional # | non-functional | constraint priority: high # | medium | low # User Story 格式 description: | As a {Actor} I want to {Action} So that {Benefit} # 業務規則(仍在需求層,無實作) business_rules: - id: BR1 rule: "{Business Rule 1}" - id: BR2 rule: "{Business Rule 2}" # 連結到 Frame Concerns addresses_concerns: - FC1 - FC2 # 驗收條件(高層次) acceptance_conditions: - "AC1: {Condition 1}" - "AC2: {Condition 2}"
machine/use-case.yaml 格式
# Machine 層:Application 層規格 use_case: name: "{FeatureName}UseCase" type: command # | query # Input/Output 定義 input: name: "{FeatureName}Input" fields: - name: "{fieldName}" type: "{Type}" required: true validation: "{validation rule}" output: name: "{FeatureName}Output" fields: - name: "{fieldName}" type: "{Type}" # Design by Contract contracts: pre_conditions: - id: PRE1 condition: "{condition}" error: "{ErrorType}" post_conditions: - id: POST1 condition: "{condition}" # 技術約束 transaction_boundary: type: "RequiresNew" isolation: "ReadCommitted" idempotency: enabled: true key: "{idempotencyKeyField}" # 發布的 Domain Events publishes_events: - "{FeatureName}CreatedEvent"
controlled-domain/aggregate.yaml 格式
# Domain 層:Aggregate 規格 aggregate: name: "{AggregateName}" root: true # 身份識別 identity: name: "{AggregateName}Id" type: "UUID" # 屬性 properties: - name: "{propertyName}" type: "{Type}" mutable: false # 內部 Entities entities: - name: "{EntityName}" identity: "{EntityName}Id" # Value Objects value_objects: - name: "{ValueObjectName}" properties: - name: "{prop}" type: "{Type}" # Invariants(不變量) invariants: shared: - id: INV1 name: "{InvariantName}" rule: "{Rule description}" enforced_in: - "constructor" - "method:{methodName}" # Domain Events domain_events: - name: "{AggregateName}CreatedEvent" properties: - name: "{prop}" type: "{Type}"
分析流程
- 識別 Operator:誰發起這個需求?
- 識別 Machine:需要什麼機器來處理?
- 識別 Controlled Domain:控制什麼領域實體?
- 識別 Frame Concerns:有哪些關注點需要滿足?
- 識別 Cross-Context:是否依賴其他 Bounded Context?
- 分類 Frame:根據上述判斷屬於五種 Frame 之一
- 生成規格目錄:輸出完整目錄結構
實作優先順序策略
原則
- 先核心 Aggregate,後支援 Aggregate
- 先 Command,後 Query(或並行)
- 依相依性順序:被依賴的先做
- 完整生命週期:一個 Aggregate 完成 CRUD 後再換下一個
優先順序規劃範例
當有多個 Aggregate 和 Use Case 時,建議按以下方式排序:
Phase 1: 核心 Aggregate 建立 (Create) ├── create-product.json ✅ 已完成 ├── create-pbi.json ✅ 已完成 └── create-sprint.json ✅ 已完成 Phase 2: 完成第一個 Aggregate 生命週期 ├── start-sprint → Command | Medium ├── complete-sprint → Command | Medium ├── cancel-sprint → Command | Low ├── get-sprint → Query | Low ├── get-sprints-by-product → Query | Low └── delete-sprint → Command | Medium Phase 3: 擴展其他 Aggregate ├── Product Aggregate (6 use cases) ├── PBI Aggregate (15 use cases) - 最大 backlog └── Scrum Team Aggregate (5 use cases) - 新 aggregate
複雜度評估
| 複雜度 | 標準 | 估計時間 |
|---|---|---|
| Low | 單一 Aggregate,無跨 BC | 1-2 小時 |
| Medium | 有驗證邏輯或狀態轉換 | 2-4 小時 |
| High | 跨多個 Aggregate 或 BC | 4-8 小時 |
品質檢查清單
- Frame 類別判斷是否正確?
- 需求層是否只有業務語言,無實作細節?
- Frame Concerns 是否有明確的 satisfied_by 連結?
- 是否識別出所有跨 BC 依賴?
- Aggregate Invariants 是否完整?
- Acceptance Criteria 是否可測試?
- 是否涵蓋主要的異常場景?
與其他 Skills 的協作
analyze-frame (本 Skill) │ ├── 輸出 → frame.yaml + 目錄結構 │ ├── spec-template → 生成各層 YAML 模板 │ ├── cross-context → 處理跨 BC 依賴 │ └── 觸發 Sub-agents ├── command-sub-agent (CBF) ├── query-sub-agent (IDF) └── reactor-sub-agent (RIF)
工具腳本 (scripts/)
本 Skill 提供驗證工具,位於
scripts/ 目錄:
validate_spec.py - 規格驗證器
用於驗證規格目錄的完整性與正確性。
使用方式:
# 驗證單一功能規格 python ~/.claude/skills/analyze-frame/scripts/validate_spec.py docs/specs/create-workflow/ # 驗證多個規格 python ~/.claude/skills/analyze-frame/scripts/validate_spec.py docs/specs/create-workflow/ docs/specs/query-dashboard/ # 在 CI/CD 中使用 python ~/.claude/skills/analyze-frame/scripts/validate_spec.py docs/specs/*/ || exit 1
驗證項目:
| 檢查項目 | 類型 | 說明 |
|---|---|---|
| 目錄結構 | ERROR | 必要目錄是否存在 |
| frame.yaml | ERROR | 問題框架定義是否存在且有效 |
| YAML 語法 | ERROR | 所有 YAML 檔案語法正確性 |
| Frame Concerns | WARNING | 是否有 satisfied_by 連結 |
| Cross-Context | INFO | ACL 規格是否存在 |
| Acceptance | WARNING | 測試覆蓋率檢查 |
Exit Codes:
: 驗證通過0
: 有 ERROR 級別錯誤1
: 參數錯誤2
規格範本 (templates/)
本 Skill 提供完整的 YAML 規格範本,位於
templates/ 目錄:
templates/ ├── frame.yaml # 問題框架範本 ├── requirements/ │ └── req-template.yaml # 需求規格範本 (純業務語言) ├── machine/ │ └── use-case.yaml # Use Case 規格範本 ├── controlled-domain/ │ └── aggregate.yaml # Aggregate 規格範本 ├── acceptance/ │ └── acceptance.yaml # 驗收測試範本 ├── cross-context/ │ └── authorization.yaml # ACL 規格範本 └── runbook/ └── execute.md # 執行指南範本
範本使用方式
-
初始化新功能規格:
# 建立目錄結構 mkdir -p docs/specs/{feature-name}/{requirements,machine,controlled-domain,cross-context,acceptance,runbook} # 複製範本 cp ~/.claude/skills/analyze-frame/templates/frame.yaml docs/specs/{feature-name}/ -
在 Claude 中使用:
請根據 ~/.claude/skills/analyze-frame/templates/ 的範本 為「建立工作流程」功能生成規格目錄
範本特點
| 範本 | 用途 | 特點 |
|---|---|---|
| 問題框架定義 | 包含 frame_concerns + satisfied_by |
| 需求規格 | 純業務語言,禁止實作細節 |
| Application 層 | Design by Contract、冪等性 |
| Domain 層 | Invariants 含 enforced_in |
| 測試規格 | BDD 格式,ezSpec 相容 |
| ACL 規格 | 容錯、重試、Circuit Breaker |
| 執行指南 | 生成步驟、品質驗證 |
完整工作流程
1. 需求輸入 ↓ 2. 分析問題框架 (analyze-frame) ↓ 3. 生成規格目錄 (使用 templates/) ↓ 4. 驗證規格完整性 (scripts/validate_spec.py) ↓ 5. 分派至 Sub-agent ├── command-sub-agent (CBF) ├── query-sub-agent (IDF) └── reactor-sub-agent (RIF) ↓ 6. 生成程式碼 ↓ 7. 生成驗收測試 (generate-acceptance-test) ↓ 8. 品質檢查 (arch-guard, enforce-contract) ↓ 9. 執行測試驗證