Superpowers 教學手冊(企業標準技術白皮書)

版本:v2.0|基於:Superpowers Framework v5.0.5(by Jesse Vincent / obra @ Prime Radiant
最後更新:2026-03-23|適用對象:資深工程師、Tech Lead、AI Agent 團隊|語言:繁體中文
GitHub:https://github.com/obra/superpowers ⭐ 107k stars · 8.6k forks
Plugin Marketplace:https://claude.com/plugins/superpowers
Discord 社群:https://discord.gg/Jd8Vphy9jq


目錄


第 1 章:Superpowers 概述

章節摘要:本章介紹 Superpowers 的核心理念、與其他 AI 開發方法論的差異、支援平台、版本演進,以及它為企業團隊帶來的「工程紀律」價值。

1.1 什麼是 Superpowers

Superpowers 是由 Jesse Vincent(GitHub 帳號 obra)與 Prime Radiant 團隊開發的開源 AI Agent 技能框架(Agentic Skills Framework),目前是 GitHub 上最受歡迎的 AI 開發方法論專案之一(⭐ 107k stars、8.6k forks)。

官方定義:

Superpowers is a complete software development workflow for your coding agents, built on top of a set of composable “skills” and some initial instructions that make sure your agent uses them.

Superpowers 不是一般的 Prompt 模板集,而是一套完整的軟體開發工作流(Software Development Workflow)。技能會自動觸發——你不需要記住特殊指令,AI Agent 會在適當的時機自動啟用對應的技能。

核心設計哲學

原則說明
Test-Driven Development先寫測試,永遠。強制 Red-Green-Refactor 循環
Systematic over ad-hoc系統化流程優於憑感覺猜測
Complexity reduction簡潔是首要目標(YAGNI + DRY)
Evidence over claims驗證後才宣告成功(Verification before Completion)
工程紀律優先AI 必須先釐清需求、撰寫計畫、寫測試,才能動手寫程式碼
隔離安全透過 Git Worktrees 確保實驗不會影響主分支

📚 延伸閱讀Superpowers for Claude Code——Jesse Vincent 的原創文章

Superpowers 不是什麼

  • ❌ 不是 Prompt 範本庫(不只教你「怎麼問」——技能會自動觸發)
  • ❌ 不是 AI Agent 執行引擎(不取代 LangChain / AutoGen)
  • ❌ 不是單一 IDE 外掛(支援 Claude Code、Cursor、Codex、OpenCode、Gemini CLI)
  • ✅ 是一套「讓 AI Agent 自動遵守工程紀律的完整開發工作流」

定位圖

graph TB
    subgraph "AI 開發方法論層級"
        A[Prompt Engineering<br/>怎麼對 AI 說話] --> B[Context Engineering<br/>給 AI 什麼背景知識]
        B --> C[Harness Engineering<br/>在什麼環境中操作]
        C --> D[Superpowers<br/>完整的軟體開發工作流<br/>教 AI 遵守工程紀律]
    end
    
    style D fill:#f9a825,stroke:#f57f17,stroke-width:3px,color:#000
    style A fill:#e3f2fd,stroke:#1565c0,color:#000
    style B fill:#e8f5e9,stroke:#2e7d32,color:#000
    style C fill:#fce4ec,stroke:#c62828,color:#000

1.2 與 Prompt Engineering / Agent Framework 的差異

面向Prompt EngineeringAgent Framework(LangChain 等)Superpowers
關注點如何撰寫有效的提示如何編排多個 AI 工具鏈如何讓 AI 遵守工程紀律
產出單次回應多步驟自動化流程高品質、可維護的程式碼
測試通常無可選強制(刪除未經測試的程式碼)
計畫由框架自動規劃強制人工審核的微步驟計畫(2-5 min/task)
程式碼審查可選自動化兩階段審查(Spec + Quality)
適用階段探索 / PoC自動化流程生產級開發
品質保證依賴人工審查依賴框架限制15 個內建技能自動協作
自動程度手動 Prompt手動設定工具鏈技能自動觸發

1.3 適用場景

✅ 最適合的場景

  1. 企業系統開發:需要長期維護的銀行 / 金融 / 醫療系統
  2. AI-Assisted Coding:使用 Claude Code、Cursor、Codex、OpenCode 等工具進行日常開發
  3. Agent 團隊協作:Subagent-Driven Development 實現多 Agent 自動分工
  4. 技術債清理:利用 AI 重構舊系統但需確保品質
  5. 新人培訓:用 Superpowers 規範引導新人養成正確開發習慣
  6. 自主長時間開發:Agent 可自主工作數小時而不偏離計畫

⚠️ 不適合的場景

  • 一次性腳本 / 資料分析
  • 快速 PoC / 黑客松
  • 產出不需維護的程式碼

1.4 核心價值:工程紀律

mindmap
  root((Superpowers<br/>工程紀律))
    需求釐清
      蘇格拉底式提問
      Visual Companion
      Spec Document Review
    計畫驅動
      微步驟拆解 2-5 min
      Plan Document Review
      YAGNI + DRY
    測試優先
      Red-Green-Refactor
      刪除未測試的程式碼
      Evidence over Claims
    Subagent 分工
      Two-Stage Code Review
      Spec Compliance + Quality
      自動 Dispatch
    系統化除錯
      假設驅動 4 階段
      Root Cause Tracing
      Defense in Depth
    安全隔離
      Git Worktrees
      Branch finishing workflow
      實驗不影響 main

💡 提示:Superpowers 的核心價值在於「把資深工程師的工作習慣編碼成 AI 可執行的技能」。技能是強制性工作流(Mandatory workflows),不是建議。

實務案例

某金融科技團隊在導入 Superpowers 前後的比較:

指標導入前導入後改善幅度
AI 產出通過 Code Review 比率35%82%+134%
測試覆蓋率12%78%+550%
生產環境缺陷率15 bugs/sprint3 bugs/sprint-80%
平均 Debug 時間4.2 小時1.1 小時-74%
AI 自主工作時長10-15 分鐘數小時10x+

⚠️ 注意:以上數據為示範用,實際效果依團隊狀況而異。導入初期可能因學習曲線導致短期效率下降。

1.5 支援平台總覽

Superpowers v5.0 起支援多個 AI 編碼平台:

平台安裝方式支援程度Subagent 支援說明
Claude CodeOfficial Plugin Marketplace⭐⭐⭐⭐⭐✅ 完整原生支援,推薦首選
CursorPlugin Marketplace + Hooks⭐⭐⭐⭐⭐✅ 完整v4.3.1 起正式支援
Codex(OpenAI)Manual(INSTALL.md)⭐⭐⭐⭐✅ multi_agentv3.3.0 起支援
OpenCodeOne-line install(v5.0.4+)⭐⭐⭐⭐✅ Native skillv3.5.0 起支援
Gemini CLIExtension install⭐⭐⭐❌(fallback to executing-plans)v5.0.1 起支援

💡 提示:在不支援 Subagent 的平台上,Superpowers 自動降級為 executing-plans 模式(批次執行 + 人工檢查點)。

1.6 版本演進歷程

timeline
    title Superpowers 版本演進
    section v2.x(2025-10)
      v2.0.0 : 技能倉庫分離架構
            : 9 個新技能(Problem-solving / Research / Architecture)
            : 自動更新機制
    section v3.x(2025-10~11)
      v3.0.1 : 導入 Anthropic 第一方技能系統
      v3.1.0 : 技能名稱標準化(lowercase kebab-case)
      v3.2.0 : 設計文件整合至 Brainstorming
      v3.3.0 : Codex 支援(實驗性)
      v3.5.0 : OpenCode 支援
    section v4.x(2025-12~2026-02)
      v4.0.0 : Two-Stage Code Review
            : DOT 流程圖作為可執行規範
            : 測試反模式參考
      v4.1.0 : OpenCode native skill
      v4.2.0 : Worktree 隔離強制化
      v4.3.0 : Brainstorming 硬性閘門
      v4.3.1 : Cursor 正式支援
    section v5.x(2026-03)
      v5.0.0 : Visual Brainstorming Companion
            : Document Review System
            : 架構指導整合至技能管線
            : Subagent-Driven Development 強制化
      v5.0.2 : 零依賴 Brainstorm Server
            : Subagent Context Isolation
      v5.0.4 : Review Loop 精簡(3 輪)
            : OpenCode 一行安裝
      v5.0.5 : ESM/CJS 修正
            : Windows PID 修正
            : 恢復 Execution Mode 選擇

第 2 章:整體系統架構設計

章節摘要:本章說明 Superpowers v5.0.5 的 Plugin 架構、技能自動觸發機制、Hooks 系統、多平台支援策略,以及與 CI/CD 系統的整合模式。

2.1 Superpowers 在 AI 開發架構中的位置

Superpowers 位於「AI Agent 的行為規範層」,介於底層 LLM 與上層應用邏輯之間。v5.0 起轉為 Plugin 架構,透過各平台的 Plugin Marketplace 安裝,不再需要手動複製檔案:

graph TB
    subgraph "應用層"
        APP[Web Application / API / Library]
    end
    
    subgraph "開發者工具層"
        IDE[VS Code / Terminal / IDE]
        GIT[GitHub / GitLab]
    end
    
    subgraph "AI Agent 層(宿主平台)"
        CC[Claude Code]
        CU[Cursor]
        CDX[Codex]
        OC[OpenCode]
        GC[Gemini CLI]
    end
    
    subgraph "行為規範層(Superpowers Plugin)"
        direction TB
        SP_HOOK[Hooks System<br/>session-start]
        SP_CORE[Core Skills 15+]
        SP_VIS[Visual Brainstorming<br/>Companion Server]
        SP_DOC[Document Review<br/>System]
    end
    
    subgraph "LLM 層"
        CLAUDE[Claude Sonnet / Opus]
        GPT[GPT-4o / o3]
        GEM[Gemini 2.5]
    end
    
    APP --> IDE
    IDE --> CC & CU & CDX & OC & GC
    CC & CU & CDX & OC & GC --> SP_HOOK
    SP_HOOK --> SP_CORE
    SP_CORE --> SP_VIS & SP_DOC
    SP_CORE --> CLAUDE & GPT & GEM
    IDE --> GIT
    
    style SP_HOOK fill:#fff3e0,stroke:#e65100,color:#000
    style SP_CORE fill:#fff3e0,stroke:#e65100,color:#000
    style SP_VIS fill:#fff3e0,stroke:#e65100,color:#000
    style SP_DOC fill:#fff3e0,stroke:#e65100,color:#000

2.2 Plugin 架構與多平台支援

2.2.1 Plugin 架構總覽

自 v3.0 導入 Anthropic 第一方技能系統,v5.0 全面轉型為 Plugin Marketplace 模式:

元件說明
Plugin Manifest宣告技能清單、版本、平台相容性
Skills Directory15+ 個 Markdown 技能定義檔(.md
Hooks事件驅動的進入點(如 session-start
Visual Companion零依賴 Node.js WebSocket 伺服器(Brainstorming 用)
Platform Adapters各平台的安裝腳本與設定映射

2.2.2 倉庫目錄結構(v5.0.5)

superpowers/                          # GitHub: obra/superpowers
├── skills/                           # 技能定義(核心)
│   ├── brainstorming.md
│   ├── test-driven-development.md
│   ├── systematic-debugging.md
│   ├── verification-before-completion.md
│   ├── writing-plans.md
│   ├── executing-plans.md
│   ├── dispatching-parallel-agents.md
│   ├── requesting-code-review.md
│   ├── receiving-code-review.md
│   ├── using-git-worktrees.md
│   ├── finishing-a-development-branch.md
│   ├── subagent-driven-development.md
│   ├── writing-skills.md
│   └── using-superpowers.md
├── references/                       # 參考資料(技能可引用)
│   └── testing-anti-patterns.md
├── hooks/                            # Hooks 系統
│   └── session-start.*               # 各平台的 session-start hook
├── tools/                            # 工具腳本
│   └── brainstorm-server/            # Visual Brainstorming Companion
│       ├── server.mjs                # 零依賴 Node.js 伺服器
│       └── index.html                # 瀏覽器端介面
├── INSTALL.md                        # 各平台安裝指南
├── CHANGELOG.md
├── RELEASE-NOTES.md
└── README.md

2.2.3 各平台整合方式

graph LR
    subgraph "Superpowers Plugin"
        SKILLS[Skills 15+]
        HOOKS[Hooks]
        VIS[Visual Companion]
    end
    
    subgraph "Claude Code"
        CC_MKT[Official Marketplace]
        CC_CLAUDE[CLAUDE.md auto-inject]
    end
    
    subgraph "Cursor"
        CU_PLUG[Plugin Marketplace]
        CU_RULES[.cursorrules]
        CU_HOOK[Hooks → session-start]
    end
    
    subgraph "Codex"
        CDX_AGENTS[AGENTS.md mapping]
        CDX_MA[multi_agent support]
    end
    
    subgraph "OpenCode"
        OC_INST[instructions.md]
        OC_AGENT[agents/ directory]
    end
    
    SKILLS --> CC_MKT & CU_PLUG & CDX_AGENTS & OC_INST
    HOOKS --> CC_CLAUDE & CU_HOOK & CDX_AGENTS & OC_INST
    VIS --> CC_MKT & CU_PLUG

💡 重要:各平台的「技能定義內容」完全相同,差異僅在於安裝路徑與 Hook 觸發機制

2.3 技能自動觸發機制

Superpowers 最重要的設計特點是——你不需要明確呼叫技能。每個技能內建觸發條件,當 AI Agent 偵測到匹配情境時自動生效。

觸發流程

sequenceDiagram
    participant User as 使用者
    participant Agent as AI Agent
    participant SP as Superpowers Skills
    participant Hook as session-start Hook
    
    User->>Agent: 開啟新 session
    Hook->>Agent: 注入 using-superpowers 技能
    Agent->>Agent: 載入所有技能定義
    
    User->>Agent: "幫我加一個登入功能"
    Agent->>SP: 偵測到「新功能需求」
    SP-->>Agent: 觸發 brainstorming
    Agent->>User: 蘇格拉底式提問(5+ 問題)
    
    User->>Agent: 回答完問題
    Agent->>SP: 偵測到「需求已釐清」
    SP-->>Agent: 觸發 writing-plans
    Agent->>User: 產出微步驟計畫
    
    User->>Agent: 核准計畫
    Agent->>SP: 偵測到「計畫已核准」
    SP-->>Agent: 觸發 subagent-driven-development
    Agent->>Agent: Dispatch subagent + Two-Stage Review

1% 規則與合理化偵測

using-superpowers 技能定義了一個關鍵規則——永遠不要跳過技能觸發階段。技能中包含「合理化偵測表」,提醒 Agent 不要因為自認為情況簡單就跳過流程:

常見合理化藉口技能的回應
「這個改動很小,不需要計畫」再小的改動也需要至少 1 條計畫步驟
「我已經知道 bug 在哪了」知道 ≠ 已驗證;先建立假設再驗證
「測試太瑣碎,浪費時間」刪除未經測試的程式碼
「只是 formatting 改動」formatting 也需要通過既有測試

⚠️ 1% 規則:即使你 99% 確定不需要走流程,那 1% 的不確定性也可能造成災難。永遠走流程。

2.4 Hooks 系統

Hooks 是 Superpowers 的事件驅動進入點,在特定時機自動執行腳本。

session-start Hook

最重要的 Hook 是 session-start——當使用者開啟新的 AI session 時自動執行:

hooks/
└── session-start          # 依平台不同使用不同格式
    ├── 01-setup.sh        # Unix 環境初始化
    └── 01-setup.ps1       # Windows 環境初始化

Hook 的工作流程:

  1. 偵測平台:自動辨識 Claude Code / Cursor / Codex / OpenCode / Gemini CLI
  2. 注入技能:將 using-superpowers 技能載入 Agent Context
  3. 技能載入 using-superpowers 後,Agent 即知道完整的 15+ 技能索引
  4. 啟動 Visual Companion(如需要):自動啟動 Brainstorm Server

💡 提示:Hooks 系統是 Superpowers「零設定」自動觸發的關鍵。安裝 Plugin 後,技能就會在每個 session 自動生效,不需要手動載入。

2.5 與 CI/CD 系統整合

sequenceDiagram
    participant Dev as 開發者
    participant SP as Superpowers
    participant Agent as AI Agent
    participant GH as GitHub
    participant CI as CI/CD Pipeline
    
    Dev->>Agent: "幫我實作 X 功能"
    Agent->>SP: 自動觸發 brainstorming
    SP->>Dev: 蘇格拉底式提問
    Dev-->>Agent: 確認需求
    
    Agent->>SP: 觸發 using-git-worktrees
    SP->>Agent: 建立 feature branch + worktree
    
    Agent->>SP: 觸發 writing-plans
    SP->>Agent: 產出微步驟計畫
    Dev-->>Agent: 核准計畫
    
    Agent->>SP: 觸發 subagent-driven-development
    SP->>Agent: Dispatch subagent 執行計畫
    
    Note over Agent: Subagent 執行 TDD 循環
    Agent->>SP: 觸發 requesting-code-review
    SP->>Agent: Two-Stage Review(Spec + Quality)
    
    Agent->>SP: 觸發 finishing-a-development-branch
    SP->>GH: Push + 建立 Pull Request
    GH->>CI: 觸發自動測試
    CI-->>GH: 測試通過 ✅
    GH-->>Dev: PR Ready for Review

2.6 整體技術堆疊

graph LR
    subgraph "前端"
        FE[React / Vue / Angular]
    end
    
    subgraph "後端"
        BE[Spring Boot / FastAPI / Node.js]
    end
    
    subgraph "AI Agent + Superpowers"
        AI[Claude Code / Cursor / Codex<br/>+ Superpowers Plugin]
    end
    
    subgraph "品質保證"
        QA[JUnit / Jest / pytest]
        SA[SonarQube]
        AR[ArchUnit]
    end
    
    subgraph "基礎設施"
        GIT2[GitHub]
        CICD[GitHub Actions]
        DOCK[Docker / K8s]
    end
    
    AI -->|產出| FE & BE
    FE & BE -->|測試| QA
    QA -->|分析| SA & AR
    FE & BE -->|版控| GIT2
    GIT2 -->|觸發| CICD
    CICD -->|部署| DOCK

💡 提示:Superpowers 不綁定特定技術堆疊,其核心價值(工程紀律)適用於任何語言與框架。

Best Practices

  1. 使用 Plugin Marketplace 安裝:透過 /plugin install 而非手動複製檔案
  2. 統一團隊版本:確保每位成員使用相同版本的 Superpowers Plugin
  3. 分層整合:不要試圖一次整合所有工具,從 Claude Code + GitHub 開始
  4. 善用 Hooks:利用 session-start hook 自動設定專案級規範

Anti-patterns

  • ❌ 手動複製技能檔到專案中(使用 Plugin Marketplace)
  • ❌ 不同成員使用不同版本的 Superpowers
  • ❌ 跳過 CI/CD 整合,只在本地使用
  • ❌ 修改技能定義的核心流程(fork 前先確認是否有設定選項)

第 3 章:安裝與環境建置

章節摘要:本章詳述 Superpowers v5.0.5 的安裝方式(以 Plugin Marketplace 為主)、各平台安裝指南、專案初始化流程,以及升級策略。

3.1 前置要求

工具最低版本說明
Git2.20+需支援 git worktree 功能
Node.js18+Visual Brainstorming Companion 需要
AI 平台見下方至少安裝一個支援的 AI 編碼平台

支援的 AI 平台

平台版本要求取得方式
Claude Code最新版npm install -g @anthropic-ai/claude-code
Cursor最新版cursor.com
Codex(OpenAI)最新版github.com/openai/codex
OpenCode最新版github.com/opencode-ai/opencode
Gemini CLI最新版github.com/google-gemini/gemini-cli

3.2 安裝步驟

方式一:Claude Code Plugin Marketplace(推薦)

# 在 Claude Code 中執行
/plugin install superpowers@claude-plugins-official

# 安裝完成後自動生效——技能會在每次 session 開始時自動載入

安裝後驗證:

# 開始新的 Claude Code session
claude

# 輸入任何開發請求,觀察 Agent 是否自動啟動 Brainstorming
> "幫我加一個使用者登入功能"
# 預期:Agent 開始蘇格拉底式提問,而非直接寫程式碼

方式二:Cursor Plugin Marketplace

# 在 Cursor 中執行
/add-plugin superpowers

# 或透過 Cursor 的 Plugin Marketplace UI 搜尋 "superpowers"

Cursor 額外設定(自動套用 Hooks):

// .cursor/settings.json — 通常 Plugin 安裝時自動設定
{
  "superpowers.hooks.sessionStart": true,
  "superpowers.visualCompanion": true
}

方式三:Codex(OpenAI)

參照 INSTALL.md 中的 Codex 區段:

# 1. Clone Superpowers 倉庫到本機暫存
git clone https://github.com/obra/superpowers.git /tmp/superpowers

# 2. 複製 AGENTS.md 到專案(Codex 使用 AGENTS.md 作為指令檔)
cp /tmp/superpowers/INSTALL_CODEX/AGENTS.md ./AGENTS.md

# 3. 複製技能目錄
cp -r /tmp/superpowers/skills/ ./superpowers-skills/

# 4. Codex 會自動讀取 AGENTS.md 並套用技能

⚠️ 注意:Codex 使用 multi_agent 支援 Subagent-Driven Development,技能內建自動偵測。

方式四:OpenCode

# v5.0.4 起支援一行安裝
opencode plugin install superpowers

# 或手動安裝(舊版本)
git clone https://github.com/obra/superpowers.git /tmp/superpowers
cp /tmp/superpowers/INSTALL_OPENCODE/instructions.md ~/.opencode/instructions.md
cp -r /tmp/superpowers/skills/ ~/.opencode/agents/superpowers/

方式五:Gemini CLI

# Extension 安裝
gemini extensions install superpowers

# 或手動設定
# 參照 INSTALL.md 中的 Gemini CLI 區段

⚠️ 注意:Gemini CLI 目前不支援 Subagent,Superpowers 會自動降級為 executing-plans 模式。

方式六:搭配 GitHub Copilot 使用(方法論移植)

Superpowers 的 Plugin Marketplace 不直接支援 GitHub Copilot,但其方法論可透過指令檔注入:

<!-- .github/copilot-instructions.md -->
# Copilot 開發規範(基於 Superpowers 方法論)

## 強制規則
- 收到新功能需求時,先提問釐清(至少 5 個問題),不要直接寫程式碼
- 必須先產出微步驟計畫(每步 2-5 分鐘),人工核准後才開始
- 每個功能必須有對應的測試(TDD: Red → Green → Refactor)
- Debug 時必須先建立假設再驗證(Systematic Debugging 4 階段)
- 所有實驗性工作必須在 Git Worktree 中進行

3.3 專案初始化

💡 注意:使用 Plugin Marketplace 安裝時,不需要在專案中建立 .superpowers/ 目錄。技能由 Plugin 全域管理。以下設定僅適用於需要專案級客製化的情況。

專案級 CLAUDE.md 設定(Claude Code 專案)

<!-- CLAUDE.md -->
# 專案開發規範

## 技術堆疊
- Language: Java 21
- Framework: Spring Boot 3.x
- Build: Maven 3.9+
- Test: JUnit 5 + Mockito

## Superpowers 客製化
- Brainstorming 最少提問:5 題
- Planning 每步上限:5 分鐘
- TDD 覆蓋率最低:80%
- 所有 feature 開發必須使用 Git Worktree

專案級 .cursorrules 設定(Cursor 專案)

<!-- .cursorrules -->
# Cursor 開發規範(Superpowers 增強)

遵循 Superpowers 工作流:
1. 新功能 → Brainstorming → Writing Plans → Subagent Development
2. 強制 TDD:先寫測試、再寫實作
3. Debug → Systematic Debugging(假設驅動 4 階段)
4. 所有實驗 → Git Worktree 隔離

3.4 建議目錄結構

使用 Plugin(推薦——無需本地技能檔)

your-project/
├── CLAUDE.md                    # Claude Code 專案指令(客製化用)
├── .cursorrules                 # Cursor 規範(客製化用)
├── .github/
│   ├── copilot-instructions.md  # Copilot 方法論注入
│   └── workflows/
│       ├── ci.yml
│       └── tdd-check.yml
├── src/
│   ├── main/java/...
│   └── test/java/...
├── pom.xml
└── README.md

💡 技能檔由 Plugin 管理,不需要在專案中維護 .superpowers/ 目錄。

手動安裝(無 Plugin 支援的平台)

your-project/
├── superpowers-skills/          # 手動複製的技能(Codex 等平台)
│   ├── brainstorming.md
│   ├── test-driven-development.md
│   ├── ...
│   └── using-superpowers.md
├── AGENTS.md                    # Codex 用
├── CLAUDE.md                    # Claude Code 用
├── src/
└── pom.xml

Monorepo 結構

monorepo/
├── CLAUDE.md                    # 全域 Claude 指令
├── packages/
│   ├── frontend/
│   │   ├── CLAUDE.md            # 前端專屬覆寫
│   │   └── src/
│   ├── backend/
│   │   ├── CLAUDE.md            # 後端專屬覆寫
│   │   └── src/
│   └── shared/
│       └── src/
└── pom.xml / package.json

3.5 Dev Container 配置(選用)

// .devcontainer/devcontainer.json
{
  "name": "Superpowers Dev Environment",
  "image": "mcr.microsoft.com/devcontainers/java:21",
  "features": {
    "ghcr.io/devcontainers/features/node:1": {},
    "ghcr.io/devcontainers/features/git:1": {}
  },
  "postCreateCommand": "npm install -g @anthropic-ai/claude-code && claude /plugin install superpowers@claude-plugins-official",
  "customizations": {
    "vscode": {
      "extensions": [
        "vscjava.vscode-java-pack",
        "github.copilot",
        "github.copilot-chat"
      ]
    }
  }
}

3.6 升級方式

Plugin Marketplace 升級

# Claude Code
/plugin update superpowers

# Cursor
/update-plugin superpowers

# OpenCode
opencode plugin update superpowers

手動安裝升級

# 拉取最新版本
cd /path/to/superpowers-clone
git pull origin main

# 重新複製技能檔
cp -r skills/ /path/to/your-project/superpowers-skills/

版本鎖定

如需鎖定特定版本(企業環境建議):

# 安裝指定版本
/plugin install superpowers@5.0.5

# 或手動 checkout 特定 tag
git checkout v5.0.5

3.7 驗證安裝

安裝完成後,執行以下檢查:

# 1. 確認 Git Worktree 可用
git worktree list

# 2. 確認 Node.js 版本(Visual Companion 需要)
node --version   # 預期:v18+

# 3. 測試 Git Worktree 建立
git worktree add ../sp-test -b sp/test/verify
git worktree remove ../sp-test

# 4. 開始新 session 並測試技能觸發
#    輸入任何開發請求,確認 Agent 自動啟動 Brainstorming

功能驗證清單

項目驗證方式預期結果
技能自動觸發請求新功能開發Agent 自動開始提問
TDD 強制請求實作功能Agent 先寫測試
Git Worktree開始開發任務自動建立隔離分支
計畫產出需求釐清後產出 2-5 分鐘微步驟
Visual Companion啟動 Brainstorming(如適用)瀏覽器自動開啟圖形介面

預期驗證結果:

✅ Git Worktree 支援:正常
✅ Node.js 版本:v18+
✅ Superpowers Plugin:已安裝 v5.0.5
✅ 技能自動觸發:正常(15 個技能已載入)
✅ Visual Companion:可啟動(零依賴 Node.js 伺服器)

💡 提示:首次安裝建議使用方式一(Git Clone),之後可依專案需求調整配置。

Anti-patterns

  • ❌ 不將 .superpowers/ 目錄加入版控
  • ❌ 團隊成員各自維護不同的技能定義
  • ❌ 跳過驗證步驟直接開始使用
  • ❌ 在 config.yaml 中關閉 enforce: true(這會讓 TDD 變成可選)

第 4 章:核心 Skills 詳解

章節摘要:本章深入介紹 Superpowers v5.0.5 的 15+ 個內建技能。按照 The Basic Workflow(7 步驟)的順序組織,並涵蓋每個技能的觸發條件、執行流程、Prompt 範例與注意事項。

4.1 完整技能庫總覽

技能清單(v5.0.5)

#技能名稱類別自動觸發說明
1brainstorming需求蘇格拉底式提問 + Visual Companion
2using-git-worktrees隔離Git Worktree 自動建立與管理
3writing-plans規劃微步驟計畫 + Document Review
4subagent-driven-development執行Subagent 分工 + Two-Stage Review
5executing-plans執行循序執行(無 Subagent 時 fallback)
6test-driven-development品質Red-Green-Refactor 強制循環
7requesting-code-review審查向 Subagent 發起程式碼審查
8receiving-code-review審查接收並處理審查回饋
9finishing-a-development-branch完成分支收尾 + Merge 流程
10systematic-debugging除錯假設驅動 4 階段除錯
11verification-before-completion品質完成前強制驗證
12dispatching-parallel-agents執行平行 Subagent 調度
13writing-skillsMeta手動撰寫新技能定義
14using-superpowersMeta技能索引 + 觸發規則

參考資料

名稱說明
testing-anti-patterns.mdTDD 反模式參考(v4.0.0 新增)

技能依賴關係圖

graph LR
    subgraph "The Basic Workflow(7 步驟)"
        BS[1. brainstorming] --> GW[2. using-git-worktrees]
        GW --> WP[3. writing-plans]
        WP --> SDD[4a. subagent-driven-development]
        WP --> EP[4b. executing-plans]
        SDD --> TDD_S[5. test-driven-development]
        EP --> TDD_S
        TDD_S --> RCR[6. requesting-code-review]
        RCR --> FDB[7. finishing-a-development-branch]
    end
    
    subgraph "支援技能"
        SD[systematic-debugging]
        VBC[verification-before-completion]
        DPA[dispatching-parallel-agents]
        RECV[receiving-code-review]
    end
    
    TDD_S -.->|測試失敗| SD
    SD -.->|修復| TDD_S
    FDB -.->|完成前| VBC
    SDD -.->|分派| DPA
    RCR -.->|回饋| RECV
    
    style BS fill:#e3f2fd,stroke:#1565c0,color:#000
    style WP fill:#e8f5e9,stroke:#2e7d32,color:#000
    style TDD_S fill:#fff3e0,stroke:#e65100,color:#000
    style SDD fill:#f3e5f5,stroke:#6a1b9a,color:#000
    style GW fill:#fce4ec,stroke:#c62828,color:#000
    style FDB fill:#c8e6c9,stroke:#2e7d32,color:#000

4.2 The Basic Workflow(7 步驟)

Superpowers v5.0 將核心開發流程標準化為 7 個步驟。這是所有新功能開發的預設路徑

graph TD
    A[收到新功能需求] --> B["① brainstorming<br/>蘇格拉底式提問 + Visual Companion"]
    B --> C["② using-git-worktrees<br/>建立隔離開發環境"]
    C --> D["③ writing-plans<br/>微步驟計畫 + Document Review"]
    D --> E{平台支援 Subagent?}
    E -->|是| F["④a subagent-driven-development<br/>Subagent 分工 + Two-Stage Review"]
    E -->|否| G["④b executing-plans<br/>循序執行 + 人工檢查點"]
    F --> H["⑤ test-driven-development<br/>Red → Green → Refactor"]
    G --> H
    H --> I["⑥ requesting-code-review<br/>向 Subagent 發起審查"]
    I --> J["⑦ finishing-a-development-branch<br/>分支收尾 + Merge"]
    
    style B fill:#e3f2fd,stroke:#1565c0,color:#000
    style C fill:#fce4ec,stroke:#c62828,color:#000
    style D fill:#e8f5e9,stroke:#2e7d32,color:#000
    style F fill:#f3e5f5,stroke:#6a1b9a,color:#000
    style H fill:#fff3e0,stroke:#e65100,color:#000
    style I fill:#ede7f6,stroke:#4527a0,color:#000
    style J fill:#c8e6c9,stroke:#2e7d32,color:#000

⚠️ 重要:這 7 個步驟是強制性的。using-superpowers 技能內建「合理化偵測」,防止 Agent 因認為情況簡單而跳過任何步驟。


4.3 Brainstorming(需求釐清)+ Visual Companion

核心理念

Brainstorming 技能使用蘇格拉底式提問法(Socratic Questioning),強制 AI 在動手寫程式碼之前,先透過一系列深入的提問來釐清需求。

v5.0 新增 Visual Brainstorming Companion——一個基於 WebSocket 的瀏覽器介面,即時顯示腦力激盪的思維圖。

v5.0 新增:硬性閘門(Hard Gates)

自 v4.3.0 起,Brainstorming 引入硬性閘門——Agent 必須在以下條件全部滿足時才能離開 Brainstorming 階段:

閘門條件
問題數量至少提出 5 個深入問題
使用者確認使用者明確確認「需求已釐清」
設計文件產出 Spec Document(v3.2.0 起整合)
Document ReviewSpec 經過 Review Loop(v5.0.0 起,最多 3 輪)

Visual Brainstorming Companion

v5.0.0 新增的瀏覽器端圖形化工具,與 Agent 的 Brainstorming 即時同步:

sequenceDiagram
    participant User as 使用者
    participant Agent as AI Agent
    participant Server as Brainstorm Server<br/>(Node.js, port 8765)
    participant Browser as 瀏覽器介面
    
    User->>Agent: "幫我加一個登入功能"
    Agent->>Agent: 觸發 brainstorming 技能
    Agent->>Server: 啟動伺服器(自動)
    Server->>Browser: 開啟 http://localhost:8765
    
    loop 提問循環
        Agent->>User: 蘇格拉底式問題
        Agent->>Server: 更新思維圖節點
        Server->>Browser: WebSocket 推送更新
        User->>Agent: 回答
        Agent->>Server: 更新連結與結論
    end
    
    Agent->>Server: Brainstorming 完成
    Server->>Browser: 顯示最終 Spec

技術特點

  • 零依賴:僅使用 Node.js 內建模組(http, fs, crypto
  • 自動啟動:Agent 觸發 Brainstorming 時自動啟動伺服器
  • Windows 支援:v5.0.5 修正了 Windows PID 管理問題

蘇格拉底式提問框架

graph TD
    A[接收需求] --> B{需求是否明確?}
    B -->|否| C[釐清性提問]
    B -->|是| D{是否有隱含假設?}
    C --> E[使用者回答]
    E --> B
    D -->|是| F[假設驗證提問]
    D -->|否| G{邊界條件是否清楚?}
    F --> H[使用者確認]
    H --> D
    G -->|否| I[邊界探索提問]
    G -->|是| J[產出 Spec Document]
    I --> K[使用者回答]
    K --> G
    J --> L[Document Review Loop<br/>最多 3 輪]
    L --> M[需求確認 ✅]
    
    style M fill:#c8e6c9,stroke:#2e7d32,color:#000
    style L fill:#fff3e0,stroke:#e65100,color:#000

提問類型與範例

第一類:釐清性提問(Clarification Questions)

使用者:「我需要一個登入功能。」

AI Brainstorming 回覆:
1. 登入功能的目標使用者是誰?(內部員工 / 外部客戶 / 兩者皆是)
2. 需要支援哪些認證方式?(帳號密碼 / SSO / OAuth2 / 多因素認證)
3. 登入失敗時需要怎樣的處理?(鎖定次數 / 驗證碼 / 通知管理員)
4. 是否需要「記住我」功能?Session 有效期限為何?
5. 是否需要稽核日誌(Audit Log)?

第二類:假設驗證提問(Assumption Probing)

使用者:「用 JWT 做認證就好。」

AI Brainstorming 回覆:
1. 確認一下,JWT 是否需要搭配 Refresh Token 機制?
2. Token 是否需要支援撤銷(Revocation)?純 JWT 無法實現即時撤銷。
3. 目前系統是否有現存的 Session 機制需要相容?
4. 前端 Token 儲存位置?(HttpOnly Cookie vs LocalStorage — 安全性考量)
5. 是否需要考慮跨域(CORS)場景?

第三類:邊界探索提問(Boundary Exploration)

AI Brainstorming 回覆:
1. 同一帳號是否允許多裝置同時登入?
2. 預計尖峰時段的並發登入數量?
3. 如果認證服務(如 LDAP/AD)不可用時,系統該如何處理?
4. 密碼規則的最低要求是什麼?
5. 是否需要支援密碼過期強制重設?

Best Practices

  1. 最少 5 個問題:確保覆蓋主要面向
  2. 分層提問:從高層(Why)到低層(How)
  3. 產出 Spec Document:Brainstorming 結論必須文件化
  4. 不要在 Brainstorming 階段寫程式碼
  5. 善用 Visual Companion:複雜需求使用圖形化介面輔助思考

Anti-patterns

  • ❌ AI 沒有提問就直接開始寫程式碼
  • ❌ 提問太表面,未深入業務邏輯
  • ❌ 使用者敷衍回答,AI 沒有追問
  • ❌ 未產出 Spec Document 就離開 Brainstorming 階段
  • ❌ 跳過 Document Review Loop

4.4 TDD — 測試驅動開發

核心理念

TDD 是 Superpowers 中最重要的技能。它強制 AI 遵循「Red → Green → Refactor」循環。v4.0.0 起新增 testing-anti-patterns.md 參考,幫助 Agent 避免常見測試錯誤。

TDD 三階段循環

graph LR
    R[🔴 Red<br/>寫失敗的測試] --> G[🟢 Green<br/>寫最少程式碼通過測試]
    G --> RF[🔵 Refactor<br/>重構但不改變行為]
    RF --> R
    
    style R fill:#ffcdd2,stroke:#c62828,color:#000
    style G fill:#c8e6c9,stroke:#2e7d32,color:#000
    style RF fill:#bbdefb,stroke:#1565c0,color:#000

關鍵規則

規則說明
先寫測試,永遠在任何實作程式碼之前,必須先有失敗的測試
刪除未測試的程式碼如果一段程式碼沒有對應的測試,刪掉它
一次一個測試不要批次撰寫所有測試
Refactor 不改行為重構階段測試必須始終 Green
參考 anti-patterns避免 testing-anti-patterns.md 中列舉的反模式

完整實作範例(Java / Spring Boot)

場景:實作一個銀行帳戶轉帳功能

🔴 Red 階段:先寫失敗的測試

package com.tutorial.banking.service;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.DisplayName;

import static org.junit.jupiter.api.Assertions.*;

/**
 * 帳戶轉帳服務測試類別。
 * 遵循 Superpowers TDD 技能:先寫測試,再寫實作。
 */
class TransferServiceTest {

    private TransferService transferService;
    private Account sourceAccount;
    private Account targetAccount;

    @BeforeEach
    void setUp() {
        transferService = new TransferService();
        sourceAccount = new Account("ACC-001", 10000.0);
        targetAccount = new Account("ACC-002", 5000.0);
    }

    @Test
    @DisplayName("正常轉帳:來源帳戶扣款、目標帳戶入款")
    void shouldTransferAmountBetweenAccounts() {
        // Given
        double transferAmount = 3000.0;

        // When
        TransferResult result = transferService.transfer(
            sourceAccount, targetAccount, transferAmount
        );

        // Then
        assertTrue(result.isSuccess());
        assertEquals(7000.0, sourceAccount.getBalance());
        assertEquals(8000.0, targetAccount.getBalance());
    }

    @Test
    @DisplayName("餘額不足時應拒絕轉帳")
    void shouldRejectTransferWhenInsufficientBalance() {
        // Given
        double transferAmount = 15000.0;

        // When
        TransferResult result = transferService.transfer(
            sourceAccount, targetAccount, transferAmount
        );

        // Then
        assertFalse(result.isSuccess());
        assertEquals("INSUFFICIENT_BALANCE", result.getErrorCode());
        assertEquals(10000.0, sourceAccount.getBalance()); // 餘額不變
        assertEquals(5000.0, targetAccount.getBalance());   // 餘額不變
    }

    @Test
    @DisplayName("轉帳金額不可為零或負數")
    void shouldRejectNonPositiveAmount() {
        assertAll(
            () -> {
                TransferResult result = transferService.transfer(
                    sourceAccount, targetAccount, 0
                );
                assertFalse(result.isSuccess());
                assertEquals("INVALID_AMOUNT", result.getErrorCode());
            },
            () -> {
                TransferResult result = transferService.transfer(
                    sourceAccount, targetAccount, -100
                );
                assertFalse(result.isSuccess());
                assertEquals("INVALID_AMOUNT", result.getErrorCode());
            }
        );
    }

    @Test
    @DisplayName("不可轉帳給自己")
    void shouldRejectSelfTransfer() {
        TransferResult result = transferService.transfer(
            sourceAccount, sourceAccount, 1000.0
        );
        assertFalse(result.isSuccess());
        assertEquals("SELF_TRANSFER", result.getErrorCode());
    }
}

此時執行測試:全部失敗(Red) ✅ — 這是預期行為。

mvn test -Dtest=TransferServiceTest
# 結果:4 tests, 0 passed, 4 failed ← 正確!這就是 Red 階段

🟢 Green 階段:寫最少的程式碼讓測試通過

package com.tutorial.banking.service;

/**
 * 帳戶轉帳服務。
 * 
 * @author AI (Superpowers TDD)
 */
public class TransferService {

    /**
     * 執行帳戶間轉帳。
     *
     * @param source 來源帳戶
     * @param target 目標帳戶
     * @param amount 轉帳金額
     * @return 轉帳結果
     */
    public TransferResult transfer(Account source, Account target, double amount) {
        // 驗證:金額必須為正數
        if (amount <= 0) {
            return TransferResult.failure("INVALID_AMOUNT", "轉帳金額必須大於零");
        }

        // 驗證:不可自轉
        if (source.getAccountId().equals(target.getAccountId())) {
            return TransferResult.failure("SELF_TRANSFER", "不可轉帳給自己");
        }

        // 驗證:餘額充足
        if (source.getBalance() < amount) {
            return TransferResult.failure("INSUFFICIENT_BALANCE", "餘額不足");
        }

        // 執行轉帳
        source.debit(amount);
        target.credit(amount);

        return TransferResult.success(source, target, amount);
    }
}
package com.tutorial.banking.service;

/**
 * 帳戶模型。
 */
public class Account {
    private final String accountId;
    private double balance;

    public Account(String accountId, double balance) {
        this.accountId = accountId;
        this.balance = balance;
    }

    public String getAccountId() { return accountId; }
    public double getBalance() { return balance; }

    public void debit(double amount) { this.balance -= amount; }
    public void credit(double amount) { this.balance += amount; }
}
package com.tutorial.banking.service;

/**
 * 轉帳結果。
 */
public class TransferResult {
    private final boolean success;
    private final String errorCode;
    private final String message;

    private TransferResult(boolean success, String errorCode, String message) {
        this.success = success;
        this.errorCode = errorCode;
        this.message = message;
    }

    public static TransferResult success(Account source, Account target, double amount) {
        return new TransferResult(true, null,
            String.format("成功轉帳 %.2f 從 %s 到 %s",
                amount, source.getAccountId(), target.getAccountId()));
    }

    public static TransferResult failure(String errorCode, String message) {
        return new TransferResult(false, errorCode, message);
    }

    public boolean isSuccess() { return success; }
    public String getErrorCode() { return errorCode; }
    public String getMessage() { return message; }
}

再次執行測試:全部通過(Green)

mvn test -Dtest=TransferServiceTest
# 結果:4 tests, 4 passed, 0 failed ← Green!

🔵 Refactor 階段:重構但不改變行為

重構要點(在測試保護下安全進行):

// 重構:將驗證邏輯抽取為私有方法
public class TransferService {

    public TransferResult transfer(Account source, Account target, double amount) {
        TransferResult validation = validate(source, target, amount);
        if (validation != null) {
            return validation;
        }

        execute(source, target, amount);
        return TransferResult.success(source, target, amount);
    }

    private TransferResult validate(Account source, Account target, double amount) {
        if (amount <= 0) {
            return TransferResult.failure("INVALID_AMOUNT", "轉帳金額必須大於零");
        }
        if (source.getAccountId().equals(target.getAccountId())) {
            return TransferResult.failure("SELF_TRANSFER", "不可轉帳給自己");
        }
        if (source.getBalance() < amount) {
            return TransferResult.failure("INSUFFICIENT_BALANCE", "餘額不足");
        }
        return null; // 驗證通過
    }

    private void execute(Account source, Account target, double amount) {
        source.debit(amount);
        target.credit(amount);
    }
}

再次執行測試:仍然全部通過

mvn test -Dtest=TransferServiceTest
# 結果:4 tests, 4 passed, 0 failed ← Refactor 完成,行為不變

測試策略矩陣

測試類型範圍速度使用時機範例
Unit Test單一類別/方法毫秒級每個 TDD 循環TransferServiceTest
Integration Test多個元件互動秒級功能完成時Service + Repository
Contract TestAPI 介面秒級API 變更時REST API Schema
E2E Test完整流程分鐘級Release 前登入→下單→付款

TDD Prompt 範例

我需要實作「密碼重設功能」。

請使用 Superpowers TDD 技能:
1. 先幫我列出所有需要測試的案例(至少 5 個)
2. 從最簡單的案例開始,寫一個會失敗的測試
3. 等我確認後,再寫實作讓測試通過
4. 每次只處理一個測試案例

Best Practices

  1. 一次只寫一個測試:不要一次寫完所有測試
  2. 測試命名要描述行為shouldRejectTransferWhenInsufficientBalance
  3. 使用 AAA 模式:Arrange(準備)→ Act(執行)→ Assert(驗證)
  4. Refactor 不改行為:重構時測試必須始終通過
  5. 測試也要重構:避免測試程式碼變成技術債

Anti-patterns

  • ❌ 先寫實作再補測試(這不是 TDD)
  • ❌ 一次寫完所有測試(違反逐步推進原則)
  • ❌ 測試中使用 magic number 而不說明意義
  • ❌ 跳過 Refactor 階段(導致程式碼品質下降)
  • ❌ 測試只測 happy path(必須包含錯誤場景)

4.5 Writing Plans(微步驟計畫)+ Document Review

核心理念

Writing Plans 技能將大型任務拆解成每個步驟 2~5 分鐘可完成的微任務。v5.0 新增 Document Review System——計畫文件必須經過 Review Loop(最多 3 輪)才能進入實作階段。

任務拆解方法論

graph TD
    A[大型需求] --> B[功能分解]
    B --> C[模組拆解]
    C --> D[微任務列表]
    D --> E{每個任務 ≤ 5 分鐘?}
    E -->|是| F[Plan Document 完成]
    E -->|否| G[繼續拆解]
    G --> D
    F --> H[Document Review Loop<br/>最多 3 輪]
    H --> I{Review 通過?}
    I -->|是| J[計畫核准 ✅]
    I -->|否| K[修訂計畫]
    K --> H
    
    style J fill:#c8e6c9,stroke:#2e7d32,color:#000
    style H fill:#fff3e0,stroke:#e65100,color:#000

v5.0 Document Review System

審查維度說明
完整性所有需求是否都有對應的任務?
粒度每個任務是否在 2-5 分鐘內?
可驗證性每個任務完成後能否立即驗證?
依賴順序任務之間的先後關係是否合理?
TDD 覆蓋是否每個功能都有對應的測試任務?
YAGNI 檢查是否包含不必要的功能?

💡 v5.0.4 將 Review Loop 精簡為最多 3 輪,避免過度審查。

計畫範本

# 功能計畫:用戶認證模組

## 需求摘要
實作 JWT 認證,支援登入、登出、Token 刷新。

## 微任務列表

### 階段一:資料模型(預計 10 分鐘)
- [ ] 任務 1.1:建立 `User` 實體類別(3 min)
- [ ] 任務 1.2:建立 `UserRepository` 介面(2 min)
- [ ] 任務 1.3:寫 User 實體的單元測試(5 min)

### 階段二:認證服務(預計 20 分鐘)
- [ ] 任務 2.1:寫 AuthService.login() 的測試(5 min)
- [ ] 任務 2.2:實作 AuthService.login()(5 min)
- [ ] 任務 2.3:寫 AuthService.refreshToken() 的測試(5 min)
- [ ] 任務 2.4:實作 AuthService.refreshToken()(5 min)

## 驗收標準
- [ ] 所有測試通過
- [ ] 測試覆蓋率 ≥ 80%

2~5 分鐘微任務設計原則

原則說明範例
單一職責每個任務只做一件事✅ 建立 User 實體 ❌ 建立 User 實體並配置 JPA
可驗證完成後可以立即驗證✅ 寫測試並確認紅燈 ❌ 「開始研究認證機制」
原子性可以獨立 commit✅ 一個完整的 Red-Green 循環 ❌ 半完成的功能
有序性依賴關係清晰✅ 先 Model → 再 Service → 再 Controller

Anti-patterns

  • ❌ 計畫寫了但不看就開始做
  • ❌ 單一步驟包含太多工作(超過 5 分鐘)
  • ❌ 計畫中沒有包含測試步驟
  • ❌ 跳過 Document Review 直接開始實作

4.6 Subagent-Driven Development(Subagent 分工開發)

核心理念

v4.0 引入、v5.0 強制化的核心執行模式。Agent 不直接執行計畫中的每個任務,而是 dispatch Subagent 來執行,並對產出進行 Two-Stage Code Review

為什麼需要 Subagent?

問題直接執行的風險Subagent 方案
Context 汙染多個任務後 Context 膨脹每個 Subagent 有隔離的 Context
失聰效應長時間執行後忽略早期指令每次從乾淨的指令開始
品質下降疲勞導致後期品質不穩定每個 Subagent 都是新鮮的
無法審查自己審查自己的程式碼獨立的 Review Subagent

執行流程

sequenceDiagram
    participant Main as 主 Agent<br/>(Orchestrator)
    participant Sub as Subagent<br/>(Worker)
    participant Rev1 as Review Agent 1<br/>(Spec Compliance)
    participant Rev2 as Review Agent 2<br/>(Code Quality)
    
    Main->>Main: 載入核准計畫
    
    loop 每個計畫步驟
        Main->>Sub: Dispatch(任務描述 + 隔離 Context)
        Sub->>Sub: TDD 執行(Red → Green → Refactor)
        Sub-->>Main: 回報完成 + diff
        
        Main->>Rev1: Stage 1 Review(Spec Compliance)
        Rev1-->>Main: 是否符合需求規格?
        
        Main->>Rev2: Stage 2 Review(Code Quality)
        Rev2-->>Main: 程式碼品質是否及格?
        
        alt 兩階段都通過
            Main->>Main: 標記任務完成 ✅
        else 有問題
            Main->>Sub: 重新 Dispatch(附帶 Review 回饋)
        end
    end

Two-Stage Code Review

階段審查者重點通過標準
Stage 1: Spec ComplianceReview Subagent產出是否符合 Spec?所有需求項目都有對應程式碼
Stage 2: Code Quality另一個 Review Subagent品質、可維護性、安全性無明顯 code smell

Context Isolation(v5.0.2)

主 Agent Context:
├── 完整計畫文件
├── 所有技能定義
└── 專案全貌

Subagent Context(隔離的):
├── 單一任務描述
├── 相關 Spec 片段
├── 相關現有程式碼
└── TDD 技能定義
    (不包含其他任務的 Context)

平台相容性

平台Subagent 支援機制
Claude CodeTask tool
Cursor內建 Subagent
Codexmulti_agent
OpenCodeNative skill(v4.1+)
Gemini CLIfallback → executing-plans

Anti-patterns

  • ❌ 讓主 Agent 直接執行全部任務(跳過 Subagent)
  • ❌ 不進行 Two-Stage Review
  • ❌ Subagent 收到過多不相關的 Context
  • ❌ 只做 Stage 1 或只做 Stage 2(兩階段都必要)

4.7 Systematic Debugging(系統化除錯)

核心理念

強制使用**假設驅動(Hypothesis-Driven)**的除錯方法。v4.0 起新增 Root Cause TracingDefense in DepthCondition-Based Waiting 等進階策略。

四階段除錯流程

graph LR
    A[1️⃣ 問題重現<br/>Reproduce] --> B[2️⃣ 假設建立<br/>Hypothesize]
    B --> C[3️⃣ 驗證<br/>Validate]
    C --> D{假設正確?}
    D -->|是| E[4️⃣ 修復<br/>Fix + Regression Test]
    D -->|否| B
    E --> F[Defense in Depth<br/>加固周邊防護]
    
    style A fill:#ffcdd2,stroke:#c62828,color:#000
    style B fill:#fff3e0,stroke:#e65100,color:#000
    style C fill:#bbdefb,stroke:#1565c0,color:#000
    style E fill:#c8e6c9,stroke:#2e7d32,color:#000
    style F fill:#f3e5f5,stroke:#6a1b9a,color:#000

進階策略(v4.0+)

策略說明
Root Cause Tracing不只修復表面症狀,追溯到根本原因
Defense in Depth修復後在周邊加入防護層(validation、fallback)
Condition-Based Waiting非同步問題的除錯:基於條件等待而非固定 sleep

Debug 報告範本

## Debug 報告:訂單建立失敗

### 問題描述
使用者反映在下午 3 點後建立訂單時,偶爾會收到 500 Internal Server Error。

### 假設列表
| # | 假設 | 可能性 | 驗證方法 | 結果 |
|---|------|--------|---------|------|
| H1 | 資料庫連線池耗盡 | 高 | 檢查 HikariCP 指標 | ❌ 排除 |
| H2 | 第三方 API 超時 | 中 | 檢查 API 回應日誌 | ❌ 排除 |
| H3 | 庫存並發死鎖 | 中 | 檢查 DB lock 日誌 | ✅ 確認 |

### 修復方案
使用樂觀鎖 + @Retryable 處理並發更新

### 回歸測試
shouldHandleConcurrentStockUpdate — 驗證並發安全

Best Practices

  1. 不要在沒有假設的情況下改程式碼
  2. 每個修復都必須附帶回歸測試
  3. 修復後執行 Defense in Depth
  4. 記錄 Debug 過程作為團隊知識

Anti-patterns

  • ❌ 直接搜尋 Stack Overflow 並貼上解法
  • ❌ 到處加 System.out.println() 來找問題
  • ❌ 修復後不寫回歸測試
  • ❌ 修改了但不知道為什麼修好了(Cargo Cult Fix)

4.8 Git Worktrees(隔離開發環境)

核心理念

v4.2.0 起強制化——所有開發任務必須在 Worktree 中進行,確保 main 分支始終穩定。

Worktree 概念圖

graph TB
    subgraph "Git Repository"
        MAIN[main branch<br/>穩定版本]
        
        subgraph "Worktree 1"
            WT1[sp/tdd/auth-module]
        end
        
        subgraph "Worktree 2"
            WT2[sp/debug/order-500]
        end
        
        subgraph "Worktree 3"
            WT3[sp/experiment/graphql]
        end
    end
    
    MAIN -.->|branched from| WT1 & WT2 & WT3
    WT1 -->|✅ merge| MAIN
    WT2 -->|✅ merge| MAIN
    WT3 -->|❌ 丟棄| TRASH[🗑️]
    
    style MAIN fill:#c8e6c9,stroke:#2e7d32,color:#000

命名慣例

前綴用途範例
sp/tdd/TDD 功能開發sp/tdd/user-auth
sp/debug/Bug 修復sp/debug/order-500-error
sp/experiment/實驗性功能sp/experiment/graphql-api
sp/refactor/重構sp/refactor/extract-payment-service

Anti-patterns

  • ❌ 直接在 main 分支上開發
  • ❌ Worktree 存活太久不合併(超過一週應檢視)
  • ❌ 不清理已完成的 Worktree
  • ❌ 在 Worktree 之間直接 cherry-pick 而不經過 main

4.9 其他重要技能

4.9.1 finishing-a-development-branch(分支收尾)

開發完成後的標準化收尾流程:

graph TD
    A[開發完成] --> B[verification-before-completion]
    B --> C{所有測試通過?}
    C -->|否| D[修復問題]
    D --> C
    C -->|是| E[整理 commits]
    E --> F[Push to remote]
    F --> G[建立 Pull Request]
    G --> H[清理 Worktree]
    
    style G fill:#c8e6c9,stroke:#2e7d32,color:#000

4.9.2 verification-before-completion(完成前驗證)

在宣告任何任務完成之前強制執行的檢查:

檢查項目說明
所有測試通過mvn test / npm test / pytest 全部 Green
無編譯警告乾淨的 build output
Spec 符合性產出與 Spec Document 一致

⚠️ 「Evidence over Claims」:Agent 必須提供實際測試執行結果,不能只說「我確認完成了」。

4.9.3 dispatching-parallel-agents(平行調度)

計畫中有互不依賴的任務時,同時 dispatch 多個 Subagent 平行執行。

4.9.4 requesting-code-review & receiving-code-review

雙向的程式碼審查技能:

  • requesting:向 Review Subagent 發起審查
  • receiving:接收並處理審查回饋

4.9.5 executing-plans(循序執行)

不支援 Subagent 時的 fallback 模式——主 Agent 直接循序執行,每步完成後暫停等待確認。

4.9.6 writing-skills(撰寫新技能)

Meta 技能——教你如何撰寫自訂的 Superpowers 技能。

4.9.7 using-superpowers(技能索引)

所有技能的「入口」——session-start Hook 自動載入,包含完整技能索引、The Basic Workflow、合理化偵測表。


第 5 章:實戰開發流程(End-to-End)

章節摘要:本章串聯所有 Superpowers 技能,示範一個完整的 Web Application 功能從需求到上線的全流程。以「電商平台——訂單結帳功能」為範例,展示 The Basic Workflow 7 步驟的完整實踐。

5.1 開發流程總覽(The Basic Workflow)

graph TD
    A[📝 需求到達] --> B["① Brainstorming<br/>蘇格拉底式提問 + Visual Companion"]
    B --> C["② Git Worktree<br/>建立隔離開發環境"]
    C --> D["③ Writing Plans<br/>微步驟計畫 + Document Review"]
    D --> E{"平台支援 Subagent?"}
    E -->|是| F["④a Subagent-Driven Development<br/>Subagent 分工 + Two-Stage Review"]
    E -->|否| F2["④b Executing Plans<br/>循序執行 + 人工檢查點"]
    F --> G["⑤ TDD 開發<br/>Red → Green → Refactor"]
    F2 --> G
    G --> H{測試全部通過?}
    H -->|否| I["Systematic Debugging<br/>假設驅動 4 階段"]
    I --> G
    H -->|是| J["⑥ Code Review<br/>requesting-code-review"]
    J --> K["⑦ finishing-a-development-branch<br/>分支收尾 + Merge"]
    K --> L[🚀 CI/CD 部署]
    L --> M[✅ 功能上線]
    
    style B fill:#e3f2fd,stroke:#1565c0,color:#000
    style C fill:#f3e5f5,stroke:#6a1b9a,color:#000
    style D fill:#e8f5e9,stroke:#2e7d32,color:#000
    style F fill:#ede7f6,stroke:#4527a0,color:#000
    style G fill:#fff3e0,stroke:#e65100,color:#000
    style I fill:#fce4ec,stroke:#c62828,color:#000
    style J fill:#e0f2f1,stroke:#00695c,color:#000
    style K fill:#c8e6c9,stroke:#2e7d32,color:#000

5.2 完整範例:電商訂單結帳功能

Phase 1:Brainstorming(需求釐清)

=== Superpowers Brainstorming Session ===
功能:訂單結帳
日期:2026-03-23

AI 蘇格拉底式提問:

1. 【釐清】結帳流程包含哪些步驟?(購物車確認 → 選擇付款 → 確認訂單 → 付款 → 完成?)
2. 【釐清】支援哪些付款方式?(信用卡 / 轉帳 / 第三方支付?)
3. 【假設驗證】結帳時是否需要即時檢查庫存?如果庫存在結帳過程中被他人搶購怎麼辦?
4. 【假設驗證】是否需要支援部分退款?還是只支援全額退款?
5. 【邊界探索】尖峰時段預計並發結帳數量?需要考慮限流嗎?
6. 【邊界探索】結帳過程中如果使用者離開頁面,訂單狀態如何處理?(逾時自動取消?)
7. 【安全性】付款資訊是否需要進行 PCI DSS 等級的加密?

使用者回答後產出需求文件:

## 需求結論

### 功能範圍
- 結帳流程:購物車確認 → 庫存鎖定 → 選擇付款 → 建立訂單 → 付款 → 完成
- 付款方式:信用卡(透過第三方綠界 ECPay)
- 庫存策略:結帳時鎖定庫存 15 分鐘,逾時自動釋放
- 退款:僅支援全額退款(v1)

### 非功能性需求
- 並發:支援 500 TPS 結帳
- 回應時間:< 2 秒
- 安全:付款資訊不經過我方後端,直接由前端送至 ECPay

### 排除範圍(v1 不做)
- 部分退款
- 折價券 / 優惠碼
- 跨幣別結帳

Phase 2:Writing Plans(任務拆解)

# 結帳功能開發計畫

## 階段一:資料模型(15 分鐘)
- [ ] 1.1 建立 Order 實體(id, userId, items, totalAmount, status, createdAt)— 3 min
- [ ] 1.2 建立 OrderItem 實體(id, orderId, productId, quantity, unitPrice)— 3 min
- [ ] 1.3 建立 OrderStatus 列舉(PENDING, STOCK_LOCKED, PAYMENT_PENDING, PAID, CANCELLED)— 2 min
- [ ] 1.4 建立 OrderRepository — 2 min
- [ ] 1.5 寫 Order 實體的單元測試 — 5 min

## 階段二:庫存鎖定服務(20 分鐘)
- [ ] 2.1 寫 StockLockService.lock() 的測試 — 5 min
  - 正常鎖定、庫存不足、重複鎖定
- [ ] 2.2 實作 StockLockService.lock() — 5 min
- [ ] 2.3 寫 StockLockService.release() 的測試 — 5 min
- [ ] 2.4 實作 StockLockService.release() — 3 min
- [ ] 2.5 寫定時釋放任務(15 分鐘逾時)的測試與實作 — 5 min

## 階段三:訂單服務(25 分鐘)
- [ ] 3.1 寫 CheckoutService.createOrder() 的測試 — 5 min
  - 正常建立、庫存不足、購物車為空
- [ ] 3.2 實作 CheckoutService.createOrder() — 5 min
- [ ] 3.3 寫 CheckoutService.confirmPayment() 的測試 — 5 min
  - 付款成功、付款失敗、訂單不存在
- [ ] 3.4 實作 CheckoutService.confirmPayment() — 5 min
- [ ] 3.5 寫 CheckoutService.cancelOrder() 的測試與實作 — 5 min

## 階段四:API 端點(20 分鐘)
- [ ] 4.1 寫 POST /api/orders/checkout 整合測試 — 5 min
- [ ] 4.2 實作 OrderController.checkout() — 5 min
- [ ] 4.3 寫 POST /api/orders/{id}/confirm-payment 整合測試 — 5 min
- [ ] 4.4 實作 OrderController.confirmPayment() — 5 min

## 階段五:整合測試與收尾(15 分鐘)
- [ ] 5.1 端到端整合測試(完整結帳流程)— 10 min
- [ ] 5.2 API 文件更新 — 5 min

### 預估總時間:95 分鐘
### 總 commit 數量:約 15-18 次

Phase 3:Git Worktree(建立隔離環境)

# 建立功能分支的 Worktree
git worktree add ../sp-checkout -b sp/tdd/checkout-feature

# 進入隔離環境
cd ../sp-checkout

# 確認狀態乾淨
git status
# On branch sp/tdd/checkout-feature
# nothing to commit, working tree clean

# 開始按計畫進行 TDD 開發
echo "🚀 Worktree 已建立,開始 Phase 4: TDD 開發"

Phase 4:TDD 開發(逐步實作)

以任務 3.1 ~ 3.2 為例:

🔴 Red — 寫 CheckoutService.createOrder() 的測試

package com.tutorial.ecommerce.service;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

import java.util.List;

import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*;

@ExtendWith(MockitoExtension.class)
class CheckoutServiceTest {

    @Mock
    private OrderRepository orderRepository;

    @Mock
    private StockLockService stockLockService;

    @Mock
    private CartService cartService;

    @InjectMocks
    private CheckoutService checkoutService;

    private List<CartItem> sampleCartItems;

    @BeforeEach
    void setUp() {
        sampleCartItems = List.of(
            new CartItem("PRD-001", 2, 500.0),
            new CartItem("PRD-002", 1, 1200.0)
        );
    }

    @Test
    @DisplayName("正常結帳:應建立訂單並鎖定庫存")
    void shouldCreateOrderAndLockStock() {
        // Given
        String userId = "USR-001";
        when(cartService.getItems(userId)).thenReturn(sampleCartItems);
        when(stockLockService.lockAll(anyList())).thenReturn(true);
        when(orderRepository.save(any(Order.class))).thenAnswer(
            invocation -> {
                Order order = invocation.getArgument(0);
                order.setId("ORD-001");
                return order;
            }
        );

        // When
        OrderResult result = checkoutService.createOrder(userId);

        // Then
        assertTrue(result.isSuccess());
        assertEquals("ORD-001", result.getOrderId());
        assertEquals(2200.0, result.getTotalAmount());
        assertEquals(OrderStatus.STOCK_LOCKED, result.getStatus());
        verify(stockLockService).lockAll(sampleCartItems);
        verify(orderRepository).save(any(Order.class));
    }

    @Test
    @DisplayName("庫存不足時應拒絕建立訂單")
    void shouldRejectWhenInsufficientStock() {
        // Given
        String userId = "USR-001";
        when(cartService.getItems(userId)).thenReturn(sampleCartItems);
        when(stockLockService.lockAll(anyList())).thenReturn(false);

        // When
        OrderResult result = checkoutService.createOrder(userId);

        // Then
        assertFalse(result.isSuccess());
        assertEquals("INSUFFICIENT_STOCK", result.getErrorCode());
        verify(orderRepository, never()).save(any());
    }

    @Test
    @DisplayName("購物車為空時不應建立訂單")
    void shouldRejectWhenCartEmpty() {
        // Given
        String userId = "USR-001";
        when(cartService.getItems(userId)).thenReturn(List.of());

        // When
        OrderResult result = checkoutService.createOrder(userId);

        // Then
        assertFalse(result.isSuccess());
        assertEquals("EMPTY_CART", result.getErrorCode());
        verify(stockLockService, never()).lockAll(anyList());
    }
}
mvn test -Dtest=CheckoutServiceTest
# BUILD FAILURE — 3 tests FAILED (expected: Red ✅)

🟢 Green — 寫最少程式碼通過測試

package com.tutorial.ecommerce.service;

import java.util.List;

/**
 * 結帳服務。負責訂單建立、付款確認與取消。
 */
public class CheckoutService {

    private final OrderRepository orderRepository;
    private final StockLockService stockLockService;
    private final CartService cartService;

    public CheckoutService(OrderRepository orderRepository,
                           StockLockService stockLockService,
                           CartService cartService) {
        this.orderRepository = orderRepository;
        this.stockLockService = stockLockService;
        this.cartService = cartService;
    }

    /**
     * 建立訂單(含庫存鎖定)。
     *
     * @param userId 使用者 ID
     * @return 訂單建立結果
     */
    public OrderResult createOrder(String userId) {
        List<CartItem> items = cartService.getItems(userId);

        if (items.isEmpty()) {
            return OrderResult.failure("EMPTY_CART", "購物車為空");
        }

        if (!stockLockService.lockAll(items)) {
            return OrderResult.failure("INSUFFICIENT_STOCK", "庫存不足");
        }

        double totalAmount = items.stream()
            .mapToDouble(item -> item.getUnitPrice() * item.getQuantity())
            .sum();

        Order order = new Order(userId, items, totalAmount, OrderStatus.STOCK_LOCKED);
        order = orderRepository.save(order);

        return OrderResult.success(order.getId(), totalAmount, order.getStatus());
    }
}
mvn test -Dtest=CheckoutServiceTest
# BUILD SUCCESS — 3 tests PASSED (Green ✅)
git add . && git commit -m "feat(checkout): implement createOrder with TDD - Green"

Phase 5:Systematic Debugging(如遇問題)

假設在整合測試階段發現偶發失敗:

## Debug Session: 整合測試偶發失敗

### 問題重現
CheckoutIntegrationTest.shouldCreateOrderEndToEnd() 在 CI 上約 20% 失敗。
本地難以重現。

### 假設列表
| # | 假設 | 可能性 | 驗證方法 |
|---|------|--------|---------|
| H1 | 測試之間有資料殘留(未清理 DB) | 高 | 檢查 @Transactional / @DirtiesContext |
| H2 | 非同步庫存鎖定導致時序問題 | 中 | 加入 Awaitility 等待機制 |
| H3 | CI 環境記憶體不足導致 GC 暫停 | 低 | 檢查 CI Runner 資源配置 |

### 驗證結果
| # | 結果 | 證據 |
|---|------|------|
| H1 | ✅ 確認 | 缺少 @Transactional,上一筆測試的 Order 未回滾 |

### 修復
- 加入 @Transactional 於整合測試類別
- 撰寫回歸測試確認資料隔離

Phase 6:Code Review(Two-Stage Review)

在 Subagent-Driven Development 模式下,程式碼已經過 Two-Stage Review。但在提交 PR 前,仍需做最終驗證:

# 在 Worktree 中完成所有開發
cd ../sp-checkout

# 觸發 verification-before-completion 技能
# 確認測試全通過
mvn test
# BUILD SUCCESS — 22 tests PASSED

# 確認測試覆蓋率
mvn jacoco:report
# Line coverage: 87% ✅ (threshold: 80%)

# 推送到遠端
git push origin sp/tdd/checkout-feature

# 建立 Pull Request
gh pr create \
  --title "feat(checkout): 實作訂單結帳功能" \
  --body "## 變更摘要
- 實作結帳流程(庫存鎖定 → 建立訂單 → 付款確認)
- 22 個測試案例,覆蓋率 87%
- 使用 Superpowers TDD + Subagent-Driven Development

## Superpowers 流程記錄
- Brainstorming:7 個問題,需求已確認
- Plan:通過 Document Review(2 輪)
- Two-Stage Review:Spec ✅ + Quality ✅"

Code Review Checklist(基於 Superpowers v5.0):

- [ ] 是否有 Brainstorming 記錄(含 Spec Document)?
- [ ] 是否有微步驟計畫(通過 Document Review)?
- [ ] 每個功能是否有對應測試(TDD)?
- [ ] 測試覆蓋率 ≥ 80%?
- [ ] 是否經過 Two-Stage Review(Spec + Quality)?
- [ ] 是否在隔離的 Worktree 中開發?
- [ ] verification-before-completion 是否通過?
- [ ] 是否遵循小步 commit?

Phase 7:finishing-a-development-branch + CI/CD

# finishing-a-development-branch 技能自動執行:
# 1. 合併完成後清理 Worktree
cd ../main-project
git worktree remove ../sp-checkout
git branch -d sp/tdd/checkout-feature
git worktree list  # 確認已移除

5.3 流程時間線總覽

gantt
    title 結帳功能開發時間線(Superpowers 流程)
    dateFormat HH:mm
    axisFormat %H:%M
    
    section Phase 1 — Brainstorming
    需求釐清與提問              :bs1, 09:00, 15min
    產出需求文件                :bs2, after bs1, 5min
    
    section Phase 2 — Planning
    任務拆解                    :pl1, after bs2, 10min
    計畫審核                    :pl2, after pl1, 5min
    
    section Phase 3 — Git Worktree
    建立隔離環境                :gw1, after pl2, 2min
    
    section Phase 4 — TDD 開發
    階段一 資料模型              :tdd1, after gw1, 15min
    階段二 庫存鎖定服務           :tdd2, after tdd1, 20min
    階段三 訂單服務              :tdd3, after tdd2, 25min
    階段四 API 端點              :tdd4, after tdd3, 20min
    階段五 整合測試              :tdd5, after tdd4, 15min
    
    section Phase 5-7 — Review & Deploy
    Code Review                 :cr1, after tdd5, 15min
    CI/CD 部署                  :cd1, after cr1, 10min

💡 提示:整個流程約 2.5 小時完成一個中等複雜度的功能,其中 AI(搭配 Superpowers)主要加速 Phase 4 的編碼工作,但 Phase 1-3 的品質把關不可省略。

Best Practices

  1. 不要跳過任何 Phase:每個階段都有其存在的意義
  2. Phase 1 的品質決定後續效率:需求不清 → 計畫錯誤 → 程式碼要重寫
  3. 保持 commit 粒度小且頻繁:每完成一個微任務就 commit
  4. 讓 AI 的 Prompt 參考計畫中的任務編號:保持可追溯性

Anti-patterns

  • ❌ 直接跳到 Phase 4 開始寫程式碼
  • ❌ 不做 Brainstorming 就開始規劃
  • ❌ 在 main 分支上開發而不建 Worktree
  • ❌ 所有程式碼寫完後才一次性 commit
  • ❌ Code Review 只看程式碼不看測試

第 6 章:與企業系統整合

章節摘要:本章說明如何將 Superpowers 方法論應用於企業級系統整合場景,包含 Spring Boot、微服務架構、資料庫、訊息佇列等。

6.1 整合架構總覽

graph TB
    subgraph "前端"
        FE[React / Vue / Angular]
    end
    
    subgraph "API Gateway"
        GW[Kong / Spring Cloud Gateway]
    end
    
    subgraph "微服務群"
        SVC1[用戶服務<br/>Spring Boot]
        SVC2[訂單服務<br/>Spring Boot]
        SVC3[庫存服務<br/>Spring Boot]
        SVC4[付款服務<br/>Spring Boot]
    end
    
    subgraph "資料層"
        DB1[(PostgreSQL<br/>用戶/訂單)]
        DB2[(Oracle<br/>核心銀行)]
        REDIS[(Redis<br/>Session/Cache)]
    end
    
    subgraph "訊息層"
        MQ[Kafka / RabbitMQ]
    end
    
    subgraph "AI 開發支援"
        SP[Superpowers<br/>工程紀律層]
        CC[Claude Code]
        CP[GitHub Copilot]
    end
    
    FE --> GW
    GW --> SVC1 & SVC2 & SVC3 & SVC4
    SVC1 --> DB1
    SVC2 --> DB1 & DB2
    SVC3 --> DB1 & REDIS
    SVC4 --> DB2
    SVC2 <--> MQ
    SVC3 <--> MQ
    SVC4 <--> MQ
    
    SP -.->|規範| SVC1 & SVC2 & SVC3 & SVC4
    CC -.->|輔助開發| SP
    CP -.->|輔助開發| SP
    
    style SP fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#000

6.2 與 Spring Boot 整合

Superpowers + Spring Boot 的 TDD 工作流

sequenceDiagram
    participant Dev as 開發者
    participant SP as Superpowers
    participant AI as Claude Code
    participant SB as Spring Boot
    participant DB as Database
    
    Dev->>SP: 啟動 TDD Skill
    SP->>AI: 先寫失敗的測試
    AI->>SB: 建立 @SpringBootTest
    
    Note over AI,SB: 🔴 Red 階段
    AI->>SB: 建立 Controller 測試
    SB-->>AI: 測試失敗 ✅
    
    Note over AI,SB: 🟢 Green 階段
    AI->>SB: 實作 Controller + Service
    SB->>DB: 測試用 H2 Database
    SB-->>AI: 測試通過 ✅
    
    Note over AI,SB: 🔵 Refactor 階段
    AI->>SB: 重構(抽取介面、加入 DTO)
    SB-->>AI: 測試仍通過 ✅
    
    Dev->>SP: commit + 下一個任務

Spring Boot 整合測試範例

package com.tutorial.ecommerce.controller;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.DisplayName;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.transaction.annotation.Transactional;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;

/**
 * 訂單 API 整合測試。
 * 使用 Superpowers TDD 技能——先於 Controller 實作。
 */
@SpringBootTest
@AutoConfigureMockMvc
@ActiveProfiles("test")
@Transactional
class OrderControllerIntegrationTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    @DisplayName("POST /api/orders/checkout — 正常結帳")
    void shouldCheckoutSuccessfully() throws Exception {
        String requestBody = """
            {
                "userId": "USR-001",
                "items": [
                    {"productId": "PRD-001", "quantity": 2},
                    {"productId": "PRD-002", "quantity": 1}
                ]
            }
            """;

        mockMvc.perform(post("/api/orders/checkout")
                .contentType(MediaType.APPLICATION_JSON)
                .content(requestBody))
            .andExpect(status().isCreated())
            .andExpect(jsonPath("$.success").value(true))
            .andExpect(jsonPath("$.orderId").exists())
            .andExpect(jsonPath("$.totalAmount").isNumber());
    }

    @Test
    @DisplayName("POST /api/orders/checkout — 購物車為空應回傳 400")
    void shouldReturn400WhenCartEmpty() throws Exception {
        String requestBody = """
            {
                "userId": "USR-001",
                "items": []
            }
            """;

        mockMvc.perform(post("/api/orders/checkout")
                .contentType(MediaType.APPLICATION_JSON)
                .content(requestBody))
            .andExpect(status().isBadRequest())
            .andExpect(jsonPath("$.errorCode").value("EMPTY_CART"));
    }
}

application-test.yml(測試環境配置)

# src/test/resources/application-test.yml
spring:
  datasource:
    url: jdbc:h2:mem:testdb
    driver-class-name: org.h2.Driver
    username: sa
    password:
  jpa:
    hibernate:
      ddl-auto: create-drop
    show-sql: true
  kafka:
    bootstrap-servers: ${spring.embedded.kafka.brokers:localhost:9092}

logging:
  level:
    com.tutorial: DEBUG
    org.springframework.test: INFO

6.3 與微服務架構整合

微服務中的 Superpowers 應用策略

層面Superpowers 建議說明
服務拆分Brainstorming用提問法釐清服務邊界(Bounded Context)
API 設計Writing Plans先定義 API Contract,再用 TDD 實作
服務間通訊TDDMock 外部服務,聚焦本服務邏輯
跨服務 DebugSystematic Debugging使用 Correlation ID 追蹤跨服務呼叫鏈
新服務開發Git Worktrees每個新微服務在獨立 Worktree 中開發

服務間通訊的 TDD 策略

/**
 * 訂單服務呼叫庫存服務的整合測試。
 * 使用 WireMock 模擬庫存服務。
 */
@SpringBootTest
@AutoConfigureWireMock(port = 0)
class OrderStockIntegrationTest {

    @Autowired
    private CheckoutService checkoutService;

    @Test
    @DisplayName("庫存服務不可用時應回傳友善錯誤")
    void shouldHandleStockServiceUnavailable() {
        // Given: 庫存服務回傳 503
        stubFor(post(urlEqualTo("/api/stock/lock"))
            .willReturn(aResponse()
                .withStatus(503)
                .withBody("{\"error\":\"Service Unavailable\"}")));

        // When
        OrderResult result = checkoutService.createOrder("USR-001");

        // Then
        assertFalse(result.isSuccess());
        assertEquals("STOCK_SERVICE_UNAVAILABLE", result.getErrorCode());
    }

    @Test
    @DisplayName("庫存服務超時應觸發 Circuit Breaker")
    void shouldTriggerCircuitBreakerOnTimeout() {
        // Given: 庫存服務延遲 10 秒
        stubFor(post(urlEqualTo("/api/stock/lock"))
            .willReturn(aResponse()
                .withFixedDelay(10000)
                .withStatus(200)));

        // When
        OrderResult result = checkoutService.createOrder("USR-001");

        // Then
        assertFalse(result.isSuccess());
        assertEquals("STOCK_SERVICE_TIMEOUT", result.getErrorCode());
    }
}

6.4 與資料庫整合

不同資料庫的 Superpowers TDD 策略

資料庫測試策略工具
PostgreSQLTestcontainers(真實 DB 測試)org.testcontainers:postgresql
OracleTestcontainers + Oracle Freeorg.testcontainers:oracle-free
H2In-memory(快速單元測試)內建
RedisEmbedded Redis / Testcontainersorg.testcontainers:redis
DB2Testcontainersorg.testcontainers:db2

Testcontainers 整合範例

@SpringBootTest
@Testcontainers
class OrderRepositoryTest {

    @Container
    static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:16-alpine")
        .withDatabaseName("testdb")
        .withUsername("test")
        .withPassword("test");

    @DynamicPropertySource
    static void configureProperties(DynamicPropertyRegistry registry) {
        registry.add("spring.datasource.url", postgres::getJdbcUrl);
        registry.add("spring.datasource.username", postgres::getUsername);
        registry.add("spring.datasource.password", postgres::getPassword);
    }

    @Autowired
    private OrderRepository orderRepository;

    @Test
    @DisplayName("應正確儲存並查詢訂單")
    void shouldSaveAndFindOrder() {
        // Given
        Order order = new Order("USR-001", List.of(), 2200.0, OrderStatus.PENDING);

        // When
        Order saved = orderRepository.save(order);
        Order found = orderRepository.findById(saved.getId()).orElseThrow();

        // Then
        assertEquals(saved.getId(), found.getId());
        assertEquals("USR-001", found.getUserId());
        assertEquals(2200.0, found.getTotalAmount());
    }
}

6.5 與訊息佇列整合(Kafka / RabbitMQ)

Kafka 事件驅動的 TDD 範例

@SpringBootTest
@EmbeddedKafka(partitions = 1, topics = {"order-events"})
class OrderEventPublisherTest {

    @Autowired
    private OrderEventPublisher publisher;

    @Autowired
    private KafkaTemplate<String, String> kafkaTemplate;

    @Autowired
    private EmbeddedKafkaBroker embeddedKafka;

    @Test
    @DisplayName("訂單建立時應發布 OrderCreated 事件")
    void shouldPublishOrderCreatedEvent() throws Exception {
        // Given
        Order order = new Order("ORD-001", "USR-001", 2200.0, OrderStatus.STOCK_LOCKED);

        // When
        publisher.publishOrderCreated(order);

        // Then
        ConsumerRecord<String, String> record = KafkaTestUtils.getSingleRecord(
            consumer, "order-events", Duration.ofSeconds(5));

        assertNotNull(record);
        assertTrue(record.value().contains("ORD-001"));
        assertTrue(record.value().contains("ORDER_CREATED"));
    }
}

6.6 與 API Gateway 整合

# Kong / Spring Cloud Gateway 路由配置
spring:
  cloud:
    gateway:
      routes:
        - id: order-service
          uri: lb://order-service
          predicates:
            - Path=/api/orders/**
          filters:
            - name: CircuitBreaker
              args:
                name: orderService
                fallbackUri: forward:/fallback/orders
            - name: RequestRateLimiter
              args:
                redis-rate-limiter.replenishRate: 100
                redis-rate-limiter.burstCapacity: 200

💡 提示:Superpowers 的 TDD 技能在微服務場景中特別重要——透過 Mock/Stub 隔離外部依賴,確保每個服務可以獨立測試。

Best Practices

  1. 每個微服務獨立配置:各服務有自己的 CLAUDE.md.cursorrules 客製化
  2. API Contract 先行:先用 OpenAPI Spec 定義介面,再 TDD 實作
  3. 使用 Testcontainers 取代 H2:確保測試環境與生產一致
  4. 跨服務問題使用 Systematic Debugging:搭配 Distributed Tracing
  5. 善用 Subagent-Driven Development:不同微服務的獨立任務可平行 dispatch

Anti-patterns

  • ❌ 跨微服務直接共用資料庫
  • ❌ 整合測試依賴外部服務而非 Mock
  • ❌ 不測試服務不可用的降級場景
  • ❌ 在微服務之間同步呼叫而不考慮超時

第 7 章:CI/CD 與 DevOps

章節摘要:本章說明如何將 Superpowers 的工程紀律融入 CI/CD Pipeline,包含自動測試、品質控管、強制 TDD 檢查等。

7.1 CI/CD Pipeline 架構

graph LR
    subgraph "開發者"
        DEV[Push Code]
    end
    
    subgraph "GitHub Actions Pipeline"
        T1[Stage 1<br/>Build]
        T2[Stage 2<br/>Unit Test]
        T3[Stage 3<br/>Integration Test]
        T4[Stage 4<br/>Coverage Check<br/>≥ 80%]
        T5[Stage 5<br/>SonarQube<br/>品質分析]
        T6[Stage 6<br/>ArchUnit<br/>架構檢查]
        T7[Stage 7<br/>TDD Compliance<br/>Superpowers 檢查]
        T8[Stage 8<br/>Docker Build]
        T9[Stage 9<br/>Deploy to Staging]
    end
    
    DEV --> T1
    T1 --> T2 --> T3 --> T4 --> T5 --> T6 --> T7 --> T8 --> T9
    
    style T7 fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#000

7.2 GitHub Actions Workflow

主要 CI Workflow

# .github/workflows/ci.yml
name: Superpowers CI Pipeline

on:
  push:
    branches: [main, 'sp/**']
  pull_request:
    branches: [main]

jobs:
  build-and-test:
    runs-on: ubuntu-latest

    services:
      postgres:
        image: postgres:16-alpine
        env:
          POSTGRES_DB: testdb
          POSTGRES_USER: test
          POSTGRES_PASSWORD: test
        ports:
          - 5432:5432
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5

    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0  # 完整歷史(用於分析 commit)

      - name: Set up JDK 21
        uses: actions/setup-java@v4
        with:
          java-version: '21'
          distribution: 'temurin'
          cache: maven

      # Stage 1: Build
      - name: Build
        run: mvn compile -DskipTests

      # Stage 2: Unit Tests
      - name: Run Unit Tests
        run: mvn test -Dtest='!*IntegrationTest'

      # Stage 3: Integration Tests
      - name: Run Integration Tests
        run: mvn test -Dtest='*IntegrationTest'
        env:
          SPRING_DATASOURCE_URL: jdbc:postgresql://localhost:5432/testdb
          SPRING_DATASOURCE_USERNAME: test
          SPRING_DATASOURCE_PASSWORD: test

      # Stage 4: Coverage Check
      - name: Check Test Coverage
        run: |
          mvn jacoco:report jacoco:check \
            -Djacoco.line.coverage=0.80 \
            -Djacoco.branch.coverage=0.70

      # Stage 5: SonarQube Analysis
      - name: SonarQube Scan
        env:
          SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
          SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}
        run: |
          mvn sonar:sonar \
            -Dsonar.projectKey=${{ github.repository }} \
            -Dsonar.qualitygate.wait=true

      # Stage 6: Architecture Test (ArchUnit)
      - name: Run Architecture Tests
        run: mvn test -Dtest='*ArchitectureTest'

      # Stage 7: Superpowers TDD Compliance Check
      - name: TDD Compliance Check
        run: |
          echo "🔍 檢查 Superpowers TDD 合規性..."

          # 檢查每個 src/main 下的類別是否有對應測試
          MISSING_TESTS=0
          for file in $(find src/main/java -name "*.java" -not -name "*Config*.java" -not -name "*Application.java"); do
            CLASS_NAME=$(basename "$file" .java)
            TEST_FILE=$(find src/test/java -name "${CLASS_NAME}Test.java" 2>/dev/null)
            if [ -z "$TEST_FILE" ]; then
              echo "⚠️ 缺少測試: $file"
              MISSING_TESTS=$((MISSING_TESTS + 1))
            fi
          done

          if [ $MISSING_TESTS -gt 0 ]; then
            echo "❌ 發現 $MISSING_TESTS 個類別缺少測試"
            exit 1
          else
            echo "✅ 所有類別都有對應測試"
          fi

  # Docker Build(僅 main 分支)
  docker-build:
    needs: build-and-test
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Build Docker Image
        run: |
          docker build -t ${{ github.repository }}:${{ github.sha }} .
          docker tag ${{ github.repository }}:${{ github.sha }} \
                     ${{ github.repository }}:latest

TDD 強制檢查 Workflow

# .github/workflows/tdd-check.yml
name: Superpowers TDD Gate

on:
  pull_request:
    types: [opened, synchronize]

jobs:
  tdd-compliance:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: 檢查 PR 是否包含測試
        run: |
          echo "🧪 Superpowers TDD Gate: 檢查 PR 變更..."

          # 取得 PR 中新增/修改的 Java 檔案
          CHANGED_FILES=$(git diff --name-only origin/${{ github.base_ref }}...HEAD \
            | grep 'src/main/java.*\.java$' || true)

          if [ -z "$CHANGED_FILES" ]; then
            echo "ℹ️ 沒有 Java 原始碼變更,跳過檢查"
            exit 0
          fi

          echo "📝 變更的原始碼檔案:"
          echo "$CHANGED_FILES"

          # 檢查是否有對應的測試檔案變更
          CHANGED_TESTS=$(git diff --name-only origin/${{ github.base_ref }}...HEAD \
            | grep 'src/test/java.*\.java$' || true)

          if [ -z "$CHANGED_TESTS" ]; then
            echo "❌ Superpowers TDD 違規:修改了原始碼但沒有新增/修改任何測試!"
            echo ""
            echo "📋 Superpowers 規範要求:"
            echo "   1. 每次程式碼變更必須包含對應的測試"
            echo "   2. 測試應先於實作(Red → Green → Refactor)"
            echo ""
            echo "💡 請使用 Superpowers TDD 技能重新開發此功能。"
            exit 1
          fi

          echo "✅ PR 包含測試檔案:"
          echo "$CHANGED_TESTS"

      - name: 檢查 commit 訊息格式
        run: |
          echo "📝 檢查 commit 訊息是否符合 Superpowers 規範..."

          COMMITS=$(git log --oneline origin/${{ github.base_ref }}...HEAD)
          echo "$COMMITS"

          # 檢查是否有 feat/fix/refactor 前綴
          INVALID=$(echo "$COMMITS" | grep -v -E '^[a-f0-9]+ (feat|fix|refactor|test|docs|chore)\(' || true)
          if [ -n "$INVALID" ]; then
            echo "⚠️ 以下 commit 不符合格式規範:"
            echo "$INVALID"
            echo ""
            echo "💡 建議格式:feat(module): 描述"
          fi

7.3 SonarQube 品質控管

Quality Gate 配置(符合 Superpowers 標準)

指標閾值Superpowers 要求
覆蓋率(新增程式碼)≥ 80%強制
重複率≤ 3%建議
程式碼異味(Code Smells)≤ 5建議
Bug0強制
安全漏洞0強制
可維護性評級A建議

SonarQube Maven 配置

<!-- pom.xml -->
<properties>
    <sonar.projectKey>com.tutorial:ecommerce</sonar.projectKey>
    <sonar.organization>your-org</sonar.organization>
    <sonar.host.url>https://sonarcloud.io</sonar.host.url>
    <sonar.coverage.jacoco.xmlReportPaths>
        ${project.build.directory}/site/jacoco/jacoco.xml
    </sonar.coverage.jacoco.xmlReportPaths>
    <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
</properties>

7.4 ArchUnit 架構測試

確保程式碼結構符合 Clean Architecture:

package com.tutorial.ecommerce;

import com.tngtech.archunit.core.importer.ImportOption;
import com.tngtech.archunit.junit.AnalyzeClasses;
import com.tngtech.archunit.junit.ArchTest;
import com.tngtech.archunit.lang.ArchRule;

import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.*;
import static com.tngtech.archunit.library.Architectures.layeredArchitecture;

@AnalyzeClasses(
    packages = "com.tutorial.ecommerce",
    importOptions = ImportOption.DoNotIncludeTests.class
)
class ArchitectureTest {

    @ArchTest
    static final ArchRule layered_architecture = layeredArchitecture()
        .consideringOnlyDependenciesInLayers()
        .layer("Controller").definedBy("..controller..")
        .layer("Service").definedBy("..service..")
        .layer("Repository").definedBy("..repository..")
        .layer("Model").definedBy("..model..")

        .whereLayer("Controller").mayNotBeAccessedByAnyLayer()
        .whereLayer("Service").mayOnlyBeAccessedByLayers("Controller")
        .whereLayer("Repository").mayOnlyBeAccessedByLayers("Service")
        .whereLayer("Model").mayOnlyBeAccessedByLayers("Service", "Repository", "Controller");

    @ArchTest
    static final ArchRule services_should_not_depend_on_controllers =
        noClasses().that().resideInAPackage("..service..")
            .should().dependOnClassesThat().resideInAPackage("..controller..");

    @ArchTest
    static final ArchRule repositories_should_be_interfaces =
        classes().that().resideInAPackage("..repository..")
            .and().haveSimpleNameEndingWith("Repository")
            .should().beInterfaces();
}

7.5 自動部署流程

graph TD
    A[PR 合併到 main] --> B[CI Pipeline 執行]
    B --> C{所有 Gate 通過?}
    C -->|否| D[❌ 通知開發者]
    C -->|是| E[Docker Build & Push]
    E --> F[部署到 Staging]
    F --> G[Smoke Test]
    G --> H{Smoke Test 通過?}
    H -->|否| I[❌ 自動回滾]
    H -->|是| J[等待手動核准]
    J --> K[部署到 Production]
    K --> L[健康檢查]
    L --> M[✅ 部署完成]
    
    style C fill:#fff3e0,stroke:#e65100,color:#000
    style H fill:#fff3e0,stroke:#e65100,color:#000

⚠️ 注意:Superpowers 強調自動化品質控管。CI/CD Pipeline 中的 TDD Compliance Check 是「強制」而非「建議」——不通過就不能合併。

Best Practices

  1. Pipeline as Code:所有 CI/CD 設定都在版控中
  2. 快速回饋:Pipeline 應在 10 分鐘內完成
  3. 分階段執行:先跑快速測試,再跑慢速測試
  4. 不要讓紅燈停留太久:Pipeline 失敗應在 1 小時內修復

Anti-patterns

  • ❌ CI 中跳過測試(-DskipTests
  • ❌ 人工部署而非自動化
  • ❌ 不同環境使用不同的 Pipeline
  • ❌ Pipeline 失敗但允許合併
  • ❌ 沒有監控 Pipeline 的執行時間趨勢

第 8 章:系統維運(Maintenance)

章節摘要:本章說明如何在系統上線後,持續運用 Superpowers 方法論維持 AI 產出品質、控制技術債、標準化 Debug 流程,以及建立有效的監控機制。

8.1 AI 產出品質維持

品質監控儀表板

graph TB
    subgraph "品質指標 Dashboard"
        M1[測試覆蓋率<br/>目標 ≥ 80%]
        M2[程式碼異味<br/>目標 ≤ 5/kloc]
        M3[Bug 密度<br/>目標 ≤ 0.5/kloc]
        M4[TDD 合規率<br/>目標 100%]
        M5[計畫覆蓋率<br/>目標 ≥ 90%]
        M6[平均 Debug 時間<br/>目標 ≤ 2hr]
    end
    
    subgraph "資料來源"
        S1[JaCoCo] --> M1
        S2[SonarQube] --> M2 & M3
        S3[CI Pipeline] --> M4
        S4[Git Commits] --> M5
        S5[Debug Reports] --> M6
    end
    
    style M1 fill:#c8e6c9,stroke:#2e7d32,color:#000
    style M4 fill:#fff3e0,stroke:#e65100,color:#000

週期性品質審查

頻率審查內容負責人Superpowers 技能
每日CI Pipeline 結果、失敗測試任何成員
每週測試覆蓋率趨勢、程式碼異味Tech Lead
每兩週TDD 合規率、計畫品質Tech Lead + PMBrainstorming
每月技術債評估、架構一致性架構師Writing Plans
每季Superpowers 技能回顧全團隊Brainstorming

AI 產出審查清單

## AI 程式碼審查 Checklist

### 功能性
- [ ] 所有測試通過
- [ ] 測試覆蓋率 ≥ 80%
- [ ] 邊界條件已處理
- [ ] 錯誤場景已覆蓋

### 可維護性
- [ ] 遵循 SOLID 原則
- [ ] 方法長度合理(≤ 30 行)
- [ ] 類別職責單一
- [ ] 命名清晰有意義
- [ ] JavaDoc 完整

### 安全性
- [ ] 無 SQL Injection 風險
- [ ] 無 XSS 風險
- [ ] 敏感資料已加密
- [ ] 輸入驗證完整

### Superpowers 合規
- [ ] 有 Brainstorming 記錄
- [ ] 有微步驟計畫
- [ ] 遵循 TDD 流程(Red → Green → Refactor)
- [ ] 在 Worktree 中開發
- [ ] commit 粒度適當

8.2 技術債控制

技術債分類與處理策略

quadrantChart
    title Tech Debt Priority Matrix
    x-axis Low Impact --> High Impact
    y-axis Low Cost --> High Cost
    quadrant-1 Plan to Fix
    quadrant-2 Fix Now
    quadrant-3 Monitor
    quadrant-4 Evaluate
    Missing Core Tests: [0.8, 0.3]
    Outdated Dependencies: [0.5, 0.2]
    Architecture Violation: [0.7, 0.6]
    Duplicated Code: [0.3, 0.2]
    Over-Complex Class: [0.6, 0.4]
    Missing API Docs: [0.4, 0.1]
    Hardcoded Config: [0.5, 0.15]
    Legacy Module: [0.9, 0.9]

圖表說明

英文標籤中文說明
Fix Now(右上)立即處理
Plan to Fix(左上)計畫性處理
Monitor(左下)持續監控
Evaluate(右下)評估後決定
Missing Core Tests缺少測試的核心模組
Outdated Dependencies過時的依賴版本
Architecture Violation不符合架構規範
Duplicated Code重複程式碼
Over-Complex Class過度複雜的類別
Missing API Docs缺少 API 文件
Hardcoded Config硬編碼的配置
Legacy Module遺留的舊架構模組

技術債管理流程

# 技術債管理流程(基於 Superpowers)

## 1. 識別(使用 Brainstorming)
- SonarQube 自動掃描
- ArchUnit 架構違規報告
- Code Review 中發現的問題
- 團隊成員主動回報

## 2. 評估(使用 Writing Plans)
- 分類:設計債 / 程式碼債 / 測試債 / 文件債
- 評估影響範圍(高/中/低)
- 評估修復成本(高/中/低)
- 排定優先級

## 3. 修復(使用 TDD + Git Worktrees)
- 為每個技術債修復項目建立 Worktree
- 先補測試,再修復
- 小步提交,確保每步都可驗證

## 4. 預防
- CI 中強制品質門檻
- 每個 Sprint 預留 20% 時間處理技術債
- 定期架構審查

技術債追蹤範本

# .superpowers/tech-debt/TD-001.yaml
id: TD-001
title: "OrderService 缺少單元測試"
category: test-debt
severity: high
impact: high
cost: low
created: 2026-03-15
reporter: "senior-dev"
status: open  # open | in-progress | resolved
description: |
  OrderService 有 12 個公開方法,但只有 3 個有單元測試。
  核心的 createOrder() 和 cancelOrder() 完全沒有測試。
resolution_plan: |
  1. 建立 Worktree: sp/tdd/fix-order-service-tests
  2. 為 createOrder() 寫 5 個測試案例
  3. 為 cancelOrder() 寫 3 個測試案例
  4. 為其餘方法補充基本測試
estimated_effort: "4 hours"

8.3 Debug 流程標準化

標準 Debug SOP(基於 Superpowers Systematic Debugging)

flowchart TD
    A[🚨 發現問題] --> B[Step 1<br/>建立 Debug Worktree]
    B --> C[Step 2<br/>收集證據<br/>日誌/指標/錯誤訊息]
    C --> D[Step 3<br/>填寫 Debug 報告<br/>使用範本]
    D --> E[Step 4<br/>建立假設<br/>至少 3 個]
    E --> F[Step 5<br/>設計驗證實驗]
    F --> G[Step 6<br/>逐一驗證]
    G --> H{找到根因?}
    H -->|否| I[修正假設<br/>收集更多證據]
    I --> E
    H -->|是| J[Step 7<br/>撰寫修復程式碼]
    J --> K[Step 8<br/>撰寫回歸測試]
    K --> L[Step 9<br/>合併 & 部署]
    L --> M[Step 10<br/>更新 Debug 報告<br/>知識庫]
    
    style D fill:#fff3e0,stroke:#e65100,color:#000
    style K fill:#c8e6c9,stroke:#2e7d32,color:#000

Debug 報告範本

# Debug Report: [問題標題]

## 基本資訊
- **報告日期**: 2026-03-23
- **嚴重程度**: Critical / High / Medium / Low
- **環境**: Production / Staging / Dev
- **影響範圍**: 約 15% 使用者受影響
- **Worktree**: sp/debug/[issue-name]

## 問題描述
[清楚描述問題現象]

## 重現步驟
1. [步驟 1]
2. [步驟 2]
3. [觀察到的錯誤]

## 證據收集
### 錯誤日誌

[貼上相關日誌]


### 監控指標
- CPU: 正常 / 異常
- Memory: 正常 / 異常
- DB Connection: 正常 / 異常

## 假設與驗證

| # | 假設 | 可能性 | 驗證方法 | 結果 |
|---|------|--------|---------|------|
| H1 | [假設描述] | 高/中/低 | [驗證方法] | ✅/❌/⏳ |
| H2 | [假設描述] | 高/中/低 | [驗證方法] | ✅/❌/⏳ |
| H3 | [假設描述] | 高/中/低 | [驗證方法] | ✅/❌/⏳ |

## 根因分析
[確認的根因描述]

## 修復方案
[修復程式碼或配置變更描述]

## 回歸測試
- [ ] 測試名稱:[TestClassName#testMethodName]
- [ ] 測試通過確認

## 預防措施
[如何避免類似問題再次發生]

## 知識庫更新
- [ ] 已更新團隊知識庫

8.4 Log / Monitoring

結構化日誌設計

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.ThreadContext;

/**
 * 日誌工具類別,支援結構化日誌與追蹤。
 */
public class LogHelper {

    /**
     * 設定追蹤上下文(於每個請求開始時呼叫)。
     */
    public static void setTraceContext(String correlationId, String userId) {
        ThreadContext.put("correlationId", correlationId);
        ThreadContext.put("userId", userId);
        ThreadContext.put("timestamp", java.time.Instant.now().toString());
    }

    /**
     * 清理追蹤上下文(於每個請求結束時呼叫)。
     */
    public static void clearTraceContext() {
        ThreadContext.clearAll();
    }
}
<!-- log4j2.xml — 結構化 JSON 日誌格式 -->
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <JsonTemplateLayout eventTemplateUri="classpath:LogstashJsonEventLayoutV1.json">
                <EventTemplateAdditionalField
                    key="correlationId"
                    value="${ctx:correlationId:-unknown}" />
                <EventTemplateAdditionalField
                    key="userId"
                    value="${ctx:userId:-anonymous}" />
            </JsonTemplateLayout>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="INFO">
            <AppenderRef ref="Console" />
        </Root>
    </Loggers>
</Configuration>

監控指標建議

指標類型指標名稱閾值告警方式
應用API 回應時間 P95< 2sSlack 通知
應用錯誤率 (5xx)< 1%PagerDuty
資料庫連線池使用率< 80%Slack 通知
資料庫慢查詢數量< 10/minDashboard
JVMHeap 使用率< 85%Slack 通知
JVMGC 暫停時間< 200msDashboard
基礎設施CPU 使用率< 70%Auto-scaling
基礎設施Disk 使用率< 80%Slack 通知

💡 提示:良好的 Log 與 Monitoring 是 Systematic Debugging 的基礎。沒有足夠的證據,就無法建立有效的假設。

Best Practices

  1. 每次 Debug 都產出報告,即使問題很簡單
  2. 技術債要量化追蹤,不要只放在腦中
  3. 預留 Sprint 時間處理技術債(建議 15-20%)
  4. 日誌必須結構化,方便機器解析與告警

Anti-patterns

  • ❌ Debug 完不寫報告(知識流失)
  • ❌ 技術債只記錄不處理(越積越多)
  • ❌ 日誌只有 System.out.println()
  • ❌ 監控只看而不設告警閾值
  • ❌ 忽視 AI 產出的品質退化趨勢

第 9 章:系統升級與版本管理

章節摘要:本章說明 Superpowers 框架本身的升級策略、Plugin Marketplace 版本管理,以及完整版本歷程(v2.0.0 → v5.0.5)。

9.1 Superpowers 升級策略

Plugin Marketplace 版本管理

# 檢查目前安裝的版本(Claude Code)
/plugin list | grep superpowers

# 檢查可用的最新版本
/plugin search superpowers

# 升級到最新版
/plugin update superpowers

# 安裝指定版本(企業環境建議鎖定版本)
/plugin install superpowers@5.0.5

手動安裝的版本管理

# 檢查目前版本
cd /path/to/superpowers-clone
git describe --tags

# 檢查遠端最新版本
git fetch origin --tags
git tag --sort=-v:refname | head -5

# 升級到最新穩定版
git checkout $(git describe --tags --abbrev=0 origin/main)

升級流程

graph TD
    A[發現新版本] --> B[閱讀 RELEASE-NOTES.md]
    B --> C{是否有 Breaking Changes?}
    C -->|是| D[建立升級計畫<br/>使用 Writing Plans]
    C -->|否| E[直接升級]
    D --> F[在 Worktree 中升級]
    E --> F
    F --> G[Plugin Update 或手動更新]
    G --> H[執行所有測試]
    H --> I{測試通過?}
    I -->|否| J[使用 Systematic Debugging<br/>修復相容性問題]
    J --> H
    I -->|是| K[通知團隊]
    
    style D fill:#fff3e0,stroke:#e65100,color:#000

9.2 Skills 版本控管(Plugin 架構)

Plugin 架構下的技能版本管理

在 v5.0+ 的 Plugin 架構下,技能定義檔內嵌於 Plugin 本體中,版本管理方式與舊版(手動複製 .superpowers/ 目錄)截然不同:

管理方式舊版(v4.x 以前)新版(v5.0+ Plugin)
技能來源手動複製到 .superpowers/skills/Plugin 自帶,自動載入
版本控制Git 子模組或手動複製Plugin 版本即技能版本
升級方式git pull + 手動複製/plugin update superpowers
降級方式git checkout <tag>/plugin install superpowers@<version>
自訂覆寫直接修改 .superpowers/skills/CLAUDE.md.cursorrules 局部覆寫

技能覆寫機制

Plugin 技能可透過專案配置檔進行局部覆寫(不建議完全覆蓋):

# CLAUDE.md — 技能覆寫範例

## Superpowers 技能調整

### brainstorming 技能補充
- 本專案為醫療系統,brainstorming 階段必須額外包含「法規合規性」提問
- 最少提問數從 5 個提升至 8 個

### test-driven-development 技能補充  
- 本專案覆蓋率門檻為 90%(高於預設 80%)
- Integration Test 必須使用 Testcontainers

查看目前技能版本

# Claude Code — 查看 Plugin 內含的技能清單與版本
/plugin info superpowers

# 手動安裝 — 查看技能定義的 frontmatter
head -5 skills/test-driven-development.md
# ---
# skill: test-driven-development
# version: 5.0.5
# triggers: ["write code", "implement", "add feature"]
# ---

CHANGELOG 追蹤

Superpowers 官方 CHANGELOG 以 RELEASE-NOTES.md 為準,每個版本包含:

  • Breaking Changes:必須調整專案配置的變更
  • New Features:新增技能或技能增強
  • Bug Fixes:行為修正
  • Platform Support:新平台支援或平台特定修復
# 查看最近的版本變更
# Plugin 安裝
/plugin changelog superpowers

# 手動安裝
cat RELEASE-NOTES.md | head -100

9.3 相容性矩陣

平台 × 版本 相容性

Superpowers 版本Claude CodeCursorCodex CLIOpenCodeGemini CLI
v3.x
v4.0–4.2⚠️ 部分
v4.3.x✅ (AGENTS.md)
v5.0.0–5.0.3⚠️ 部分
v5.0.4+

⚠️ = 可運作但缺少部分功能(如 Subagent 支援、Visual Companion 等)

功能 × 平台 相容性

功能Claude CodeCursorCodex CLIOpenCodeGemini CLI
Basic Workflow
Subagent-Driven Development✅ (multi_agent)❌ → fallback
Visual Brainstorming Companion
Document Review System
Hooks 系統✅ (Rules)
Two-Stage Code Review
Context Isolation⚠️ 部分

降級與回退

# Plugin 架構:降級至指定版本
/plugin install superpowers@5.0.4

# 手動安裝:降級至指定 tag
git checkout v5.0.4

# 驗證降級後功能正常
# 執行所有測試
mvn test

⚠️ 注意:跨大版本降級(如 v5.x → v4.x)可能導致 CLAUDE.md 中使用 v5.0 專屬語法的設定失效,請參考 RELEASE-NOTES.md 中的 Breaking Changes 段落。

9.4 完整版本歷程摘要

里程碑版本

timeline
    title Superpowers 版本演進
    section v2.x
        v2.0.0 (2025-10-12) : 初始公開版本
    section v3.x
        v3.0.1 : 技能精緻化
        v3.5.0 : 測試反模式文件
    section v4.x
        v4.0.0 : Two-Stage Review<br/>DOT flowcharts
        v4.2.0 : Worktree 強制化
        v4.3.0 : Hard Gates<br/>Brainstorming
        v4.3.1 : Cursor 平台支援
    section v5.x
        v5.0.0 : Visual Companion<br/>Document Review
        v5.0.2 : Context Isolation<br/>Zero-dep Server
        v5.0.4 : OpenCode 原生支援<br/>3-round Review Limit
        v5.0.5 : ESM/CJS 修復<br/>Windows PID 修復

詳細版本紀錄

版本日期類型重點變更
v5.0.52026-03-17PatchESM/CJS 雙模式相容修復;Windows process.pid 修復;依賴更新
v5.0.42026-03-10MinorOpenCode 原生一行安裝;Document Review 3 輪上限;效能優化
v5.0.22026-02-28MinorContext Isolation(Subagent 間隔離);Visual Server 零依賴化
v5.0.02026-02-15MajorVisual Brainstorming Companion;Document Review System;Plugin Marketplace 上架
v4.3.12026-01-30PatchCursor 平台適配(.cursorrules 生成)
v4.3.02026-01-20MinorBrainstorming Hard Gates(強制執行門檻)
v4.2.02026-01-05MinorGit Worktree 強制化(不再可選);sp/ 前綴命名規範
v4.0.02025-12-15MajorTwo-Stage Code Review;DOT/GraphViz 流程圖;Subagent-Driven Development
v3.5.02025-11-20Minortesting-anti-patterns.md 參考文件;Rationalization Detection 強化
v3.0.12025-11-01Patch技能定義精緻化;觸發條件細化
v2.0.02025-10-12Initial首次公開版本;5 大基礎技能;Claude Code 專屬

重大 Breaking Changes 摘要

v5.0.0 Breaking Changes

  • Visual Companion:brainstorming 技能觸發時自動啟動 WebSocket 服務(port 3000),需確保該 port 未被佔用
  • Document Review:writing-plans 完成後強制進入 Review Loop,最多 3 輪
  • Plugin 安裝:推薦安裝方式從 git clone 改為 Plugin Marketplace

v4.0.0 Breaking Changes

  • Two-Stage Review:code review 從單階段改為雙階段(Spec Compliance → Code Quality),review 時間增加
  • DOT Flowcharts:計畫輸出格式從純 Markdown 改為包含 DOT 流程圖
  • Subagent:新增 subagent-driven-development 技能,需要平台支援 subagent 功能

v4.2.0 Breaking Changes

  • Worktree 強制化using-git-worktrees 從建議改為強制,所有 feature 開發必須在 sp/ 前綴的 Worktree 中進行

Best Practices(升級相關)

  1. 每次升級都在 Worktree 中進行:安全隔離
  2. 先閱讀 RELEASE-NOTES.md:了解 Breaking Changes
  3. 企業環境鎖定版本/plugin install superpowers@5.0.5
  4. 升級後必須跑完所有測試
  5. 通知團隊升級內容與影響
  6. 善用 Plugin 的版本回退:降級只需一行指令

Anti-patterns(升級相關)

  • ❌ 直接在 main 上升級 Superpowers
  • ❌ 升級後不跑測試
  • ❌ 不閱讀 RELEASE-NOTES.md 就升級
  • ❌ 團隊成員使用不同版本
  • ❌ 跨大版本升級而不檢查 Breaking Changes

第 10 章:最佳實務(Best Practices)

章節摘要:本章彙整 Superpowers v5.0.5 的核心最佳實務,涵蓋 AI 使用規範、開發流程、架構設計、Subagent 協作、Document Review 等面向。

10.1 AI 不可跳過測試

原則

鐵律:沒有測試的程式碼,就不是完成的程式碼。

graph LR
    A[AI 產出程式碼] --> B{有對應測試?}
    B -->|是| C{測試通過?}
    B -->|否| D[❌ 退回<br/>必須先寫測試]
    C -->|是| E{覆蓋率 ≥ 80%?}
    C -->|否| F[🔴 修復程式碼]
    E -->|是| G[✅ 可以 commit]
    E -->|否| H[補充更多測試案例]
    F --> C
    H --> E
    D --> A
    
    style D fill:#ffcdd2,stroke:#c62828,color:#000
    style G fill:#c8e6c9,stroke:#2e7d32,color:#000

執行方式

## Superpowers 測試強制規則

1. CI Pipeline 中設定覆蓋率門檻(JaCoCo ≥ 80%)
2. PR 必須包含測試檔案的變更
3. Code Review 時優先檢查測試品質
4. Pre-commit hook 阻止無測試的 commit

## Git Hook 範例
#!/bin/bash
# .git/hooks/pre-commit
# Superpowers TDD Enforcement

# 檢查是否有 src/main 的變更
MAIN_CHANGES=$(git diff --cached --name-only | grep "src/main/java" || true)

if [ -n "$MAIN_CHANGES" ]; then
    # 檢查是否有對應 src/test 的變更
    TEST_CHANGES=$(git diff --cached --name-only | grep "src/test/java" || true)

    if [ -z "$TEST_CHANGES" ]; then
        echo "❌ Superpowers TDD Violation!"
        echo "   你修改了原始碼但沒有新增/修改測試。"
        echo "   請遵循 Red → Green → Refactor 流程。"
        echo ""
        echo "   修改的檔案:"
        echo "   $MAIN_CHANGES"
        echo ""
        echo "   使用 --no-verify 跳過(不建議)"
        exit 1
    fi
fi

echo "✅ Superpowers TDD Check passed"

10.2 強制 Planning

原則

鐵律:沒有計畫的開發,就不是工程。

計畫品質檢查表

檢查項目標準範例
每個任務 ≤ 5 分鐘「建立 User 實體」而非「建立整個認證模組」
任務可驗證「寫 login 的紅燈測試」而非「研究認證方案」
包含測試任務每個功能任務前都有對應的測試任務
依賴關係清楚Model → Repository → Service → Controller
有預估時間每個任務標注 2-5 分鐘

計畫審核 Prompt

我剛完成了以下的功能計畫,請幫我審核:

[貼上計畫內容]

請檢查以下要點:
1. 每個任務是否 ≤ 5 分鐘可完成?
2. 任務是否可獨立驗證?
3. 是否包含所有必要的測試任務?
4. 依賴關係是否正確?
5. 是否有遺漏的邊界條件或錯誤處理?

10.3 小步提交(Small Commits)

Commit 粒度指引

graph TD
    subgraph "✅ 正確的 Commit 粒度"
        G1["test(order): add createOrder failure test cases"]
        G2["feat(order): implement createOrder validation"]
        G3["refactor(order): extract validation to separate method"]
        G4["test(order): add concurrent stock update test"]
        G5["fix(order): handle concurrent stock update with optimistic lock"]
    end
    
    subgraph "❌ 錯誤的 Commit 粒度"
        B1["implement order module"]
        B2["fix bugs"]
        B3["update code"]
    end
    
    style G1 fill:#c8e6c9,stroke:#2e7d32,color:#000
    style G2 fill:#c8e6c9,stroke:#2e7d32,color:#000
    style G3 fill:#c8e6c9,stroke:#2e7d32,color:#000
    style G4 fill:#c8e6c9,stroke:#2e7d32,color:#000
    style G5 fill:#c8e6c9,stroke:#2e7d32,color:#000
    style B1 fill:#ffcdd2,stroke:#c62828,color:#000
    style B2 fill:#ffcdd2,stroke:#c62828,color:#000
    style B3 fill:#ffcdd2,stroke:#c62828,color:#000

Commit 訊息規範

<type>(<scope>): <description>

type:
  - feat:     新功能
  - fix:      Bug 修復
  - test:     新增/修改測試
  - refactor: 重構(不改變行為)
  - docs:     文件
  - chore:    雜項(設定、建構等)

scope: 模組名稱(order, auth, stock, ...)

範例:
  test(auth): add login failure test for locked account
  feat(auth): implement account lockout after 5 failed attempts
  refactor(auth): extract password validation to PasswordPolicy
  fix(stock): resolve concurrent update deadlock with optimistic lock
  docs(api): update checkout API documentation

10.4 Clean Architecture

架構層次

graph TB
    subgraph "Clean Architecture Layers"
        UI["Presentation Layer<br/>Controller / DTO / Validator"]
        APP["Application Layer<br/>Use Case / Service"]
        DOM["Domain Layer<br/>Entity / Value Object / Repository Interface"]
        INF["Infrastructure Layer<br/>Repository Impl / External API / Config"]
    end
    
    UI --> APP
    APP --> DOM
    INF --> DOM
    
    UI -.->|不可直接存取| DOM
    UI -.->|不可直接存取| INF
    APP -.->|不可直接存取| INF
    
    style DOM fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#000

ArchUnit 強制驗證

@AnalyzeClasses(packages = "com.tutorial.ecommerce")
class CleanArchitectureTest {

    @ArchTest
    static final ArchRule domain_should_not_depend_on_infrastructure =
        noClasses().that().resideInAPackage("..domain..")
            .should().dependOnClassesThat().resideInAPackage("..infrastructure..");

    @ArchTest
    static final ArchRule domain_should_not_depend_on_presentation =
        noClasses().that().resideInAPackage("..domain..")
            .should().dependOnClassesThat().resideInAPackage("..presentation..");

    @ArchTest
    static final ArchRule application_should_not_depend_on_infrastructure =
        noClasses().that().resideInAPackage("..application..")
            .should().dependOnClassesThat().resideInAPackage("..infrastructure..");

    @ArchTest
    static final ArchRule use_cases_should_be_suffixed =
        classes().that().resideInAPackage("..application.usecase..")
            .should().haveSimpleNameEndingWith("UseCase");
}

Superpowers 對 Clean Architecture 的 Prompt 指引

在實作 [功能名稱] 時,請遵循 Clean Architecture:

1. Domain Layer(先做):
   - 定義 Entity 和 Value Object
   - 定義 Repository Interface
   - 不依賴任何外部框架

2. Application Layer(再做):
   - 實作 Use Case
   - 只依賴 Domain Layer
   - 使用 Repository Interface(不是實作)

3. Infrastructure Layer(最後做):
   - 實作 Repository
   - 外部 API 整合
   - 框架配置

4. Presentation Layer:
   - Controller 和 DTO
   - 輸入驗證
   - 只呼叫 Application Layer

每層都要用 TDD 開發,並用 ArchUnit 驗證依賴方向。

💡 提示:最佳實務是「規則」而非「建議」。在 Superpowers 框架下,這些規則應透過 CI/CD 自動化強制執行,而非依靠人工自律。

最佳實務總結表

實務強制等級自動化方式違規成本
TDD🔴 強制CI TDD Gate + Pre-commit HookPR 無法合併
Planning + Document Review🟡 強制Document Review System(≤ 3 輪)審查不通過
小步提交🟡 強制Commit Message Lint提交被拒
Clean Architecture🔴 強制ArchUnit 自動測試Build 失敗
測試覆蓋率 ≥ 80%🔴 強制JaCoCo + CI GateBuild 失敗
Brainstorming🔴 強制Hard Gates(v4.3.0+)技能觸發阻攔
Git Worktrees🔴 強制Worktree 強制化(v4.2.0+)需在 sp/ 前綴開發
Subagent-Driven Development🟢 建議Two-Stage Code Review 自動觸發
Two-Stage Code Review🟡 強制requesting-code-review 技能強制審查不通過

10.5 Subagent-Driven Development 最佳實務

何時使用 Subagent

場景建議方式說明
單一簡單功能(< 30 分鐘)executing-plans主 Agent 直接執行即可
多個獨立功能subagent-driven-development各功能由獨立 Subagent 平行開發
大型功能(> 2 小時)subagent-driven-development主 Agent 做計畫,Subagent 做實作
跨模組重構subagent-driven-development每個模組由獨立 Subagent 處理

Subagent 任務拆分原則

## ✅ 好的 Subagent 任務拆分
- 每個 Subagent 任務有明確的 scope(一個 class/module)
- 任務之間無循環依賴
- 每個任務包含完整的 TDD 循環(測試 + 實作)
- Context Isolation:Subagent 不共享會話狀態

## ❌ 不好的 Subagent 任務拆分
- 一個 Subagent 負責寫測試,另一個負責寫實作(違反 TDD)
- Subagent A 的產出是 Subagent B 的輸入(有序列依賴)
- 單個 Subagent 任務過大(> 1 小時)

Two-Stage Review 實務

graph TD
    A[Subagent 完成開發] --> B[Stage 1:Spec Compliance Review]
    B --> C{規格符合?}
    C -->|否| D[退回 Subagent 修改]
    C -->|是| E[Stage 2:Code Quality Review]
    E --> F{程式碼品質?}
    F -->|不通過| G[退回修改]
    F -->|通過| H[✅ 合併到主分支]
    D --> A
    G --> A
    
    style D fill:#fff3e0,stroke:#e65100,color:#000
    style G fill:#fff3e0,stroke:#e65100,color:#000
    style H fill:#c8e6c9,stroke:#2e7d32,color:#000

10.6 Document Review System 最佳實務

規格文件審查要點

審查維度檢查項目通過標準
完整性是否涵蓋所有需求?每個需求都有對應的計畫步驟
可測試性每個步驟是否可驗證?有明確的 pass/fail 標準
粒度每個任務是否 ≤ 5 分鐘?無超過 5 分鐘的單一任務
依賴依賴關係是否清楚?無循環依賴、執行順序明確
TDD是否每個功能步驟前都有測試步驟?測試任務 ≥ 功能任務數

3 輪上限規則(v5.0.4+)

Round 1: 初始規格 → Reviewer 回饋
Round 2: 修訂規格 → Reviewer 回饋
Round 3: 最終修訂 → Reviewer 強制通過或升級至人類審查

⚠️ 企業建議:如果 3 輪仍無法通過,表示需求本身不夠清晰,應回到 Brainstorming 階段重新釐清。


第 11 章:反模式(Anti-patterns)

章節摘要:本章系統化列出使用 Superpowers v5.0.5 時最常見的反模式,涵蓋開發、流程、Subagent 協作與組織層面,並提供改正方法。每個反模式都包含具體的錯誤範例與正確做法對照。另可參考官方 testing-anti-patterns.md

11.1 反模式總覽

graph TB
    subgraph "開發反模式"
        AP1[🚫 AP-01<br/>AI 直接寫 Code]
        AP2[🚫 AP-02<br/>沒有測試]
        AP3[🚫 AP-03<br/>無計畫開發]
        AP4[🚫 AP-04<br/>Debug 憑感覺]
    end
    
    subgraph "流程反模式"
        AP5[🚫 AP-05<br/>跳過 Brainstorming]
        AP6[🚫 AP-06<br/>大步 Commit]
        AP7[🚫 AP-07<br/>不用 Worktree]
        AP8[🚫 AP-08<br/>Code Review 走過場]
    end
    
    subgraph "v5.0 新增反模式"
        AP13[🚫 AP-13<br/>跳過 Document Review]
        AP14[🚫 AP-14<br/>Subagent 任務拆分不當]
        AP15[🚫 AP-15<br/>忽略 Context Isolation]
    end
    
    subgraph "組織反模式"
        AP9[🚫 AP-09<br/>AI 使用無治理]
        AP10[🚫 AP-10<br/>技術債漠視]
        AP11[🚫 AP-11<br/>知識不共享]
        AP12[🚫 AP-12<br/>盲目信任 AI]
    end
    
    style AP1 fill:#ffcdd2,stroke:#c62828,color:#000
    style AP2 fill:#ffcdd2,stroke:#c62828,color:#000
    style AP3 fill:#ffcdd2,stroke:#c62828,color:#000
    style AP4 fill:#ffcdd2,stroke:#c62828,color:#000
    style AP13 fill:#ffe0b2,stroke:#e65100,color:#000
    style AP14 fill:#ffe0b2,stroke:#e65100,color:#000
    style AP15 fill:#ffe0b2,stroke:#e65100,color:#000

11.2 開發反模式詳解

AP-01:AI 直接寫 Code(最嚴重)

違反技能:Brainstorming + Writing Plans + TDD

面向說明
症狀直接告訴 AI「幫我寫一個 XX 功能」,不經過任何準備
後果程式碼品質低、不可測試、不符合架構
嚴重度🔴 Critical

❌ 錯誤做法:

Prompt: 「幫我寫一個用戶登入的 REST API,用 Spring Boot。」

AI 直接產出 500 行程式碼,包含 Controller、Service、Repository、Entity...
→ 沒有測試
→ 沒有釐清需求細節
→ 可能有安全漏洞
→ 不符合專案架構規範

✅ 正確做法(Superpowers 流程):

Step 1 - Brainstorming:
Prompt: 「我需要實作用戶登入功能。請使用 Superpowers Brainstorming 技能,
        先提出至少 5 個問題來釐清需求。」

Step 2 - Writing Plans:
Prompt: 「需求已釐清。請使用 Writing Plans 技能,
        將登入功能拆解成 2-5 分鐘的微任務。」

Step 3 - TDD:
Prompt: 「計畫已核准。請從任務 1.1 開始,
        先寫一個會失敗的測試。」

AP-02:沒有測試

違反技能:TDD

面向說明
症狀AI 產出沒有對應測試的程式碼;或先寫實作再補測試
後果無法保證正確性、重構風險高、回歸 Bug
嚴重度🔴 Critical

❌ 錯誤做法:

// AI 直接產出實作,沒有測試
public class OrderService {
    public Order createOrder(String userId, List<CartItem> items) {
        // 200 行業務邏輯...沒有任何測試
    }
}

✅ 正確做法:

// Step 1: 先寫測試(Red)
@Test
void shouldCreateOrderWithValidItems() {
    // Given
    // When
    OrderResult result = orderService.createOrder("USR-001", validItems);
    // Then
    assertTrue(result.isSuccess());
}

// Step 2: 再寫最少程式碼通過測試(Green)
// Step 3: 重構(Refactor)

AP-03:無計畫開發

違反技能:Writing Plans

面向說明
症狀拿到需求就開始寫程式碼,沒有任務拆解
後果工作量估算困難、進度不可控、容易遺漏功能
嚴重度🟡 High

❌ 錯誤: 直接開始實作一個「訂單管理」模組,沒有拆解步驟

✅ 正確: 先拆解為 15-20 個微任務,每個 2-5 分鐘,經審核後才開始

AP-04:Debug 憑感覺

違反技能:Systematic Debugging

面向說明
症狀發現 Bug 後隨機修改程式碼、到處加 print、搜尋 Stack Overflow 拼貼解法
後果修復時間長、引入新 Bug、不知道真正的根因
嚴重度🟡 High

❌ 錯誤做法:

// 到處加 print 來找問題
System.out.println("=== DEBUG 1 ===");
System.out.println("order: " + order);
System.out.println("=== DEBUG 2 ===");
System.out.println("items: " + items);
// 試了 3 小時,隨機改了幾個地方,問題「好像」解決了

✅ 正確做法:

1. 問題重現:明確記錄重現步驟與頻率
2. 假設建立:
   - H1: 購物車金額計算有浮點數精度問題(可能性:高)
   - H2: 並發下單導致資料不一致(可能性:中)
   - H3: 第三方 API 偶發超時(可能性:低)
3. 驗證 H1:用 BigDecimal 替換 double,執行測試 → 問題解決 ✅
4. 撰寫回歸測試確認

11.3 流程反模式詳解

AP-05:跳過 Brainstorming

症狀後果改正方法
假設需求很簡單就開始做做到一半發現需求理解錯誤任何功能都至少提 5 個問題

AP-06:大步 Commit

症狀後果改正方法
一個 commit 包含多個功能難以回退、難以 Code ReviewPre-commit hook 檢查 commit 大小

AP-07:不用 Worktree

症狀後果改正方法
直接在 main 分支上開發未完成的功能影響主分支穩定性團隊規範強制使用 Worktree

AP-08:Code Review 走過場

症狀後果改正方法
只看程式碼不看測試、不看 TDD 合規品質退化、AI 紀律鬆散使用 Superpowers Code Review Checklist

11.4 組織反模式詳解

AP-09:AI 使用無治理

graph LR
    A[每個人用 AI 的方式不同] --> B[程式碼風格不一致]
    A --> C[品質參差不齊]
    A --> D[安全風險不可控]
    B & C & D --> E[技術債快速累積]
    
    style E fill:#ffcdd2,stroke:#c62828,color:#000

改正方法:建立團隊 AI 使用政策(見第 12 章)

AP-10:技術債漠視

症狀指標改正方法
SonarQube 紅燈持續 > 1 週Technical Debt Ratio > 10%每 Sprint 預留 20% 時間處理
測試覆蓋率持續下降Coverage < 60%設定 CI 門檻阻止合併

AP-11:知識不共享

症狀後果改正方法
Debug 經驗不記錄相同問題重複發生強制 Debug Report + 知識庫
Prompt 技巧不分享團隊效率不一致建立共用 Prompt 範本庫

AP-12:盲目信任 AI

症狀後果改正方法
AI 產出不經審查直接合併安全漏洞、邏輯錯誤強制 Code Review + 測試
不理解 AI 產出的程式碼無法維護、無法 Debug要求 AI 逐行解釋

⚠️ 注意:AI 是強大的工具,但它會自信地產出錯誤的程式碼。Superpowers 的測試強制規則正是為了防止這一點。

11.5 v5.0 新增反模式

AP-13:跳過 Document Review

違反技能:writing-plans + Document Review System

面向說明
症狀計畫寫完就直接開始開發,不經過 Document Review Loop
後果計畫品質低、需求遺漏、開發中途需要大幅修改
嚴重度🟡 High

❌ 錯誤做法:

計畫完成 → 直接開始 TDD → 做到一半發現需求理解錯誤 → 砍掉重來

✅ 正確做法:

計畫完成 → Document Review(最多 3 輪)→ 通過 → 開始 TDD

AP-14:Subagent 任務拆分不當

違反技能:subagent-driven-development + Context Isolation

面向說明
症狀將有序列依賴的任務交給不同 Subagent,或單個 Subagent 任務範圍過大
後果Subagent 間衝突、合併困難、Context Isolation 失效
嚴重度🟡 High

❌ 錯誤做法:

Subagent A: 寫所有測試
Subagent B: 寫所有實作
→ 違反 TDD(測試與實作分離)
→ Subagent B 不了解測試的意圖

✅ 正確做法:

Subagent A: Module A 的完整 TDD(測試 + 實作 + 重構)
Subagent B: Module B 的完整 TDD(測試 + 實作 + 重構)
→ 各自獨立、Context Isolation
→ Two-Stage Review 分別審查

AP-15:忽略 Context Isolation

違反技能:subagent-driven-development(v5.0.2+)

面向說明
症狀在 Subagent 間傳遞大量上下文、共享會話狀態
後果Context Window 膨脹、Subagent 決策品質下降、不可重現
嚴重度🟡 High

正確做法:每個 Subagent 只接收必要的 spec + 相關程式碼,不接收其他 Subagent 的會話歷史。


第 12 章:企業導入策略

章節摘要:本章提供 Superpowers v5.0.5 在企業團隊中的導入路線圖,涵蓋 Plugin Marketplace 部署、多平台支援、試點策略、治理機制、Code Review 制度,以及 AI 使用規範。

12.1 團隊導入路線圖

graph LR
    subgraph "Phase 1(1-2 週)"
        P1A[選定試點團隊]
        P1B[安裝與環境建置]
        P1C[基礎培訓]
    end
    
    subgraph "Phase 2(3-4 週)"
        P2A[試點專案導入]
        P2B[TDD 強制執行]
        P2C[收集回饋]
    end
    
    subgraph "Phase 3(5-8 週)"
        P3A[擴大到其他團隊]
        P3B[CI/CD 整合]
        P3C[建立治理機制]
    end
    
    subgraph "Phase 4(持續)"
        P4A[全面推廣]
        P4B[定期回顧]
        P4C[持續優化]
    end
    
    P1A --> P1B --> P1C
    P1C --> P2A --> P2B --> P2C
    P2C --> P3A --> P3B --> P3C
    P3C --> P4A --> P4B --> P4C

Phase 1:準備(1-2 週)

步驟負責人產出
選定 2-3 人的試點團隊Tech Lead名單
完成環境安裝(第 3 章)DevOps安裝腳本
進行 2 小時基礎培訓架構師培訓教材
選定試點功能(中等複雜度)PM + Tech Lead功能清單

培訓大綱(2 小時):

1. Superpowers 概述(20 min)
   - 核心理念與價值(TDD first, Systematic over ad-hoc, Complexity reduction, Evidence over claims)
   - 14+ 技能簡介與 7-Step Basic Workflow

2. 實作示範(40 min)
   - 完整走過一個小功能的 Superpowers 流程
   - 展示 Brainstorming → Document Review → Planning → TDD → Two-Stage Review → Finish

3. 動手練習(40 min)
   - 每人用 Superpowers 實作一個小功能
   - 導師即時指導

4. Q&A + 規範說明(20 min)
   - 回答問題
   - 說明平台選擇(Claude Code / Cursor / Codex / OpenCode / Gemini CLI)
   - 說明接下來的試點計畫

Phase 2:試點(3-4 週)

## 試點專案執行計畫

### 週一:使用 Brainstorming 釐清試點功能需求
- 每位成員獨立使用 Brainstorming 提問
- 彙整所有問題,與 PM 確認

### 週二-週四:使用 Writing Plans + TDD 開發
- 每日站立會議回報 Superpowers 使用狀況
- Tech Lead 審核每個 PR 的 Superpowers 合規性

### 週五:回顧
- 收集團隊回饋
- 記錄問題與改善建議
- 更新 Superpowers 配置(如有需要)

Phase 3:擴大(5-8 週)

  • 將試點經驗撰寫成內部文件
  • 培訓其他團隊
  • 整合 CI/CD Pipeline(第 7 章)
  • 建立正式的治理機制

Phase 4:全面推廣(持續)

  • 每季回顧 Superpowers 使用成效
  • 更新技能定義
  • 分享最佳實務案例

12.2 Governance(治理)

AI 使用治理架構

graph TB
    subgraph "治理層級"
        GOV[AI 治理委員會<br/>制定政策]
        TL[Tech Lead<br/>執行監督]
        DEV[開發者<br/>遵守規範]
    end
    
    subgraph "治理文件"
        POL[AI 使用政策]
        STD[Superpowers 標準]
        CHK[Code Review Checklist]
        MET[品質指標定義]
    end
    
    GOV --> POL & STD
    TL --> CHK & MET
    DEV --> CHK
    
    POL -.->|指導| TL
    STD -.->|依據| DEV
    MET -.->|報告| GOV

AI 使用政策範本

# 團隊 AI 使用政策 v2.0(Superpowers v5.0.5)

## 1. 適用範圍
本政策適用於使用 AI 工具(Claude Code、Cursor、Codex CLI、OpenCode、Gemini CLI 等)進行開發的所有團隊成員。

## 2. 強制規則
- 2.1 所有 AI 輔助開發必須遵循 Superpowers 7-Step Basic Workflow
- 2.2 AI 產出的程式碼必須有完整的測試(TDD first)
- 2.3 AI 產出不得直接上生產環境,必須經過 Two-Stage Code Review
- 2.4 敏感資訊(密鑰、客戶資料)不得輸入 AI 工具
- 2.5 所有平台必須安裝 Superpowers Plugin 並鎖定統一版本

## 3. 品質標準
- 3.1 測試覆蓋率 ≥ 80%
- 3.2 SonarQube 品質門檻必須通過
- 3.3 ArchUnit 架構測試必須通過
- 3.4 每個 PR 必須通過 Two-Stage Review(Spec Compliance + Code Quality)
- 3.5 Document Review 不超過 3 輪

## 4. 安全規範
- 4.1 不得將公司內部程式碼上傳到公共 AI 服務
- 4.2 使用企業版 AI 工具(如有)
- 4.3 AI 產出的程式碼必須通過安全掃描
- 4.4 定期檢查 AI 工具的資料處理政策

## 5. 責任歸屬
- 5.1 最終程式碼品質由開發者負責,不是 AI
- 5.2 Code Reviewer 同樣需要對 AI 產出進行嚴格審查
- 5.3 違反政策將在績效回顧中記錄

## 6. 例外處理
- 6.1 緊急修復可跳過 Brainstorming(事後補文件)
- 6.2 PoC 專案可降低測試覆蓋率要求至 50%

12.3 Code Review 機制

Superpowers Code Review 流程

sequenceDiagram
    participant Dev as 開發者
    participant PR as Pull Request
    participant R1 as Reviewer 1(功能)
    participant R2 as Reviewer 2(品質)
    participant CI as CI Pipeline
    
    Dev->>PR: 提交 PR
    PR->>CI: 觸發自動檢查
    CI-->>PR: 檢查結果
    
    Note over CI,PR: 自動檢查<br/>✅ Build<br/>✅ Tests<br/>✅ Coverage ≥ 80%<br/>✅ TDD Compliance<br/>✅ ArchUnit
    
    PR->>R1: 功能審查
    Note over R1: 檢查:<br/>- 業務邏輯正確性<br/>- API 設計合理性<br/>- 安全性
    
    PR->>R2: 品質審查
    Note over R2: 檢查:<br/>- Superpowers 合規<br/>- 測試品質<br/>- 程式碼風格
    
    R1-->>PR: Approved ✅
    R2-->>PR: Approved ✅
    PR->>Dev: 合併

Code Review Checklist(完整版)

## Superpowers Code Review Checklist(v5.0.5)

### 📋 流程合規(必查)
- [ ] 有 Brainstorming 記錄或需求文件參考
- [ ] 有微步驟計畫(Writing Plans)且通過 Document Review
- [ ] commit 歷史顯示 TDD 流程(test → impl → refactor)
- [ ] 在 Worktree 分支上開發(`sp/*` 前綴)

### 🧪 測試品質(必查)
- [ ] 新增測試覆蓋所有公開方法
- [ ] 包含正常路徑測試
- [ ] 包含錯誤路徑測試
- [ ] 包含邊界條件測試
- [ ] 測試命名清晰描述行為
- [ ] 使用 AAA(Arrange-Act-Assert)模式
- [ ] 無 `testing-anti-patterns.md` 中列舉的反模式

### 🏗️ 程式碼品質(必查)
- [ ] 遵循 SOLID 原則
- [ ] 方法長度合理(≤ 30 行)
- [ ] 類別職責單一
- [ ] 命名有意義且一致
- [ ] 無硬編碼的設定值

### 🔒 安全性(必查)
- [ ] 無 SQL Injection 風險
- [ ] 輸入驗證完整
- [ ] 敏感資料不在日誌中
- [ ] 權限檢查到位

### 📝 文件(建議)
- [ ] JavaDoc 完整
- [ ] API 文件已更新
- [ ] README 已更新(如有)

### 💡 Two-Stage Review 簽名
- Stage 1 Spec Compliance:[ ] 通過 — by @reviewer1
- Stage 2 Code Quality:[ ] 通過 — by @reviewer2

12.4 AI 使用規範

規範層級

層級範圍內容執行方式
L1 — 組織全公司哪些專案可以用 AI管理層審核
L2 — 專案單一專案AI 使用的具體規則CLAUDE.md / .cursorrules
L3 — 個人開發者Prompt 技巧、工具偏好培訓 + 自主學習

培訓計畫建議

## Superpowers 培訓計畫

### 新人(第 1 週)
- 閱讀本教學手冊第 1-4 章
- 安裝 Superpowers Plugin(Plugin Marketplace 或手動)
- 完成 1 個小功能的 Superpowers 全流程(7-Step Basic Workflow)
- 由 Mentor 提供一對一指導

### 一般成員(每季)
- 回顧最佳實務與反模式(第 10-11 章)
- 分享個人的 Prompt 技巧與 Subagent 使用經驗
- 檢查是否有新版本可升級(RELEASE-NOTES.md)
- 更新團隊的 CLAUDE.md / .cursorrules 配置

### Tech Lead(每月)
- 審查品質指標趨勢
- 評估新版本功能(如 Visual Companion、Context Isolation 等)
- 更新 Superpowers Plugin 版本(鎖定版本策略)
- 撰寫改善提案

💡 提示:企業導入 Superpowers 最大的阻力通常不是技術,而是「習慣改變」。建議從小團隊試點開始,用數據證明成效後再推廣。


第 13 章:完整範例專案

章節摘要:本章提供一個完整的範例專案,從專案架構到程式碼、測試、開發流程示範,展示 Superpowers v5.0.5 的 7-Step Basic Workflow 在實際專案中的全面應用(含 Subagent-Driven Development 與 Document Review)。

13.1 專案概述

範例:銀行轉帳微服務

項目說明
專案名稱bank-transfer-service
類型微服務(REST API)
語言Java 21
框架Spring Boot 3.x
架構Clean Architecture
資料庫PostgreSQL 16
測試JUnit 5 + Mockito + Testcontainers
品質SonarQube + JaCoCo + ArchUnit

13.2 專案架構

bank-transfer-service/
├── CLAUDE.md                          # Superpowers 專案配置(Plugin 自動讀取)
├── .cursorrules                       # Cursor 平台配置(如使用 Cursor)
├── .github/
│   ├── copilot-instructions.md        # GitHub Copilot 方法論注入
│   └── workflows/
│       ├── ci.yml
│       └── tdd-check.yml
├── docs/
│   └── plans/
│       └── transfer-feature-plan.md   # Document Review 通過的計畫
├── src/
│   ├── main/java/com/bank/transfer/
│   │   ├── TransferApplication.java
│   │   ├── domain/
│   │   │   ├── model/
│   │   │   │   ├── Account.java
│   │   │   │   ├── TransferRequest.java
│   │   │   │   └── TransferResult.java
│   │   │   ├── repository/
│   │   │   │   └── AccountRepository.java
│   │   │   └── service/
│   │   │       └── TransferDomainService.java
│   │   ├── application/
│   │   │   └── usecase/
│   │   │       └── TransferUseCase.java
│   │   ├── infrastructure/
│   │   │   ├── persistence/
│   │   │   │   └── JpaAccountRepository.java
│   │   │   └── config/
│   │   │       └── AppConfig.java
│   │   └── presentation/
│   │       ├── controller/
│   │       │   └── TransferController.java
│   │       └── dto/
│   │           ├── TransferRequestDto.java
│   │           └── TransferResponseDto.java
│   └── test/java/com/bank/transfer/
│       ├── domain/
│       │   ├── model/
│       │   │   └── AccountTest.java
│       │   └── service/
│       │       └── TransferDomainServiceTest.java
│       ├── application/
│       │   └── usecase/
│       │       └── TransferUseCaseTest.java
│       ├── infrastructure/
│       │   └── persistence/
│       │       └── JpaAccountRepositoryTest.java
│       ├── presentation/
│       │   └── controller/
│       │       └── TransferControllerTest.java
│       └── architecture/
│           └── ArchitectureTest.java
└── pom.xml

13.3 範例程式碼

Domain Layer

package com.bank.transfer.domain.model;

import java.math.BigDecimal;
import java.util.Objects;

/**
 * 銀行帳戶領域模型。
 * 封裝帳戶業務邏輯,不依賴任何外部框架。
 */
public class Account {

    private final String accountId;
    private BigDecimal balance;

    public Account(String accountId, BigDecimal balance) {
        Objects.requireNonNull(accountId, "帳戶 ID 不可為 null");
        Objects.requireNonNull(balance, "餘額不可為 null");
        if (balance.compareTo(BigDecimal.ZERO) < 0) {
            throw new IllegalArgumentException("初始餘額不可為負數");
        }
        this.accountId = accountId;
        this.balance = balance;
    }

    /**
     * 扣款。
     *
     * @param amount 扣款金額(必須 > 0)
     * @throws IllegalArgumentException 金額無效或餘額不足
     */
    public void debit(BigDecimal amount) {
        validatePositiveAmount(amount);
        if (this.balance.compareTo(amount) < 0) {
            throw new IllegalArgumentException(
                String.format("餘額不足:目前 %s,需要 %s", this.balance, amount));
        }
        this.balance = this.balance.subtract(amount);
    }

    /**
     * 入款。
     *
     * @param amount 入款金額(必須 > 0)
     */
    public void credit(BigDecimal amount) {
        validatePositiveAmount(amount);
        this.balance = this.balance.add(amount);
    }

    private void validatePositiveAmount(BigDecimal amount) {
        if (amount == null || amount.compareTo(BigDecimal.ZERO) <= 0) {
            throw new IllegalArgumentException("金額必須大於零");
        }
    }

    public String getAccountId() { return accountId; }
    public BigDecimal getBalance() { return balance; }
}
package com.bank.transfer.domain.repository;

import com.bank.transfer.domain.model.Account;
import java.util.Optional;

/**
 * 帳戶 Repository 介面(Domain Layer 定義,Infrastructure 實作)。
 */
public interface AccountRepository {
    Optional<Account> findById(String accountId);
    Account save(Account account);
}
package com.bank.transfer.domain.service;

import com.bank.transfer.domain.model.Account;
import com.bank.transfer.domain.model.TransferResult;

import java.math.BigDecimal;

/**
 * 轉帳領域服務。
 * 處理跨帳戶的業務邏輯。
 */
public class TransferDomainService {

    /**
     * 執行轉帳。
     */
    public TransferResult execute(Account source, Account target, BigDecimal amount) {
        if (source.getAccountId().equals(target.getAccountId())) {
            return TransferResult.failure("SELF_TRANSFER", "不可轉帳給自己");
        }

        try {
            source.debit(amount);
            target.credit(amount);
            return TransferResult.success(
                source.getAccountId(), target.getAccountId(), amount);
        } catch (IllegalArgumentException e) {
            return TransferResult.failure("TRANSFER_FAILED", e.getMessage());
        }
    }
}

Application Layer

package com.bank.transfer.application.usecase;

import com.bank.transfer.domain.model.Account;
import com.bank.transfer.domain.model.TransferResult;
import com.bank.transfer.domain.repository.AccountRepository;
import com.bank.transfer.domain.service.TransferDomainService;

import java.math.BigDecimal;

/**
 * 轉帳 Use Case。
 * 編排領域服務與 Repository 完成轉帳業務流程。
 */
public class TransferUseCase {

    private final AccountRepository accountRepository;
    private final TransferDomainService transferDomainService;

    public TransferUseCase(AccountRepository accountRepository,
                           TransferDomainService transferDomainService) {
        this.accountRepository = accountRepository;
        this.transferDomainService = transferDomainService;
    }

    /**
     * 執行帳戶間轉帳。
     *
     * @param sourceAccountId 來源帳戶 ID
     * @param targetAccountId 目標帳戶 ID
     * @param amount 轉帳金額
     * @return 轉帳結果
     */
    public TransferResult execute(String sourceAccountId, String targetAccountId,
                                  BigDecimal amount) {
        Account source = accountRepository.findById(sourceAccountId)
            .orElseThrow(() -> new IllegalArgumentException(
                "來源帳戶不存在:" + sourceAccountId));

        Account target = accountRepository.findById(targetAccountId)
            .orElseThrow(() -> new IllegalArgumentException(
                "目標帳戶不存在:" + targetAccountId));

        TransferResult result = transferDomainService.execute(source, target, amount);

        if (result.isSuccess()) {
            accountRepository.save(source);
            accountRepository.save(target);
        }

        return result;
    }
}

Presentation Layer

package com.bank.transfer.presentation.controller;

import com.bank.transfer.application.usecase.TransferUseCase;
import com.bank.transfer.domain.model.TransferResult;
import com.bank.transfer.presentation.dto.TransferRequestDto;
import com.bank.transfer.presentation.dto.TransferResponseDto;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import jakarta.validation.Valid;

/**
 * 轉帳 API Controller。
 */
@RestController
@RequestMapping("/api/transfers")
public class TransferController {

    private final TransferUseCase transferUseCase;

    public TransferController(TransferUseCase transferUseCase) {
        this.transferUseCase = transferUseCase;
    }

    @PostMapping
    public ResponseEntity<TransferResponseDto> transfer(
            @Valid @RequestBody TransferRequestDto request) {

        TransferResult result = transferUseCase.execute(
            request.getSourceAccountId(),
            request.getTargetAccountId(),
            request.getAmount()
        );

        TransferResponseDto response = TransferResponseDto.from(result);

        if (result.isSuccess()) {
            return ResponseEntity.ok(response);
        } else {
            return ResponseEntity.badRequest().body(response);
        }
    }
}

13.4 測試案例

Domain 測試

package com.bank.transfer.domain.model;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.DisplayName;
import java.math.BigDecimal;

import static org.junit.jupiter.api.Assertions.*;

class AccountTest {

    @Test
    @DisplayName("建立帳戶:初始餘額正確")
    void shouldCreateAccountWithBalance() {
        Account account = new Account("ACC-001", new BigDecimal("10000.00"));
        assertEquals("ACC-001", account.getAccountId());
        assertEquals(new BigDecimal("10000.00"), account.getBalance());
    }

    @Test
    @DisplayName("扣款:餘額正確減少")
    void shouldDebitCorrectly() {
        Account account = new Account("ACC-001", new BigDecimal("10000.00"));
        account.debit(new BigDecimal("3000.00"));
        assertEquals(new BigDecimal("7000.00"), account.getBalance());
    }

    @Test
    @DisplayName("扣款:餘額不足應拋出例外")
    void shouldThrowWhenInsufficientBalance() {
        Account account = new Account("ACC-001", new BigDecimal("1000.00"));
        assertThrows(IllegalArgumentException.class,
            () -> account.debit(new BigDecimal("5000.00")));
    }

    @Test
    @DisplayName("入款:餘額正確增加")
    void shouldCreditCorrectly() {
        Account account = new Account("ACC-001", new BigDecimal("5000.00"));
        account.credit(new BigDecimal("2000.00"));
        assertEquals(new BigDecimal("7000.00"), account.getBalance());
    }

    @Test
    @DisplayName("金額為零或負數時應拋出例外")
    void shouldRejectNonPositiveAmount() {
        Account account = new Account("ACC-001", new BigDecimal("10000.00"));
        assertAll(
            () -> assertThrows(IllegalArgumentException.class,
                () -> account.debit(BigDecimal.ZERO)),
            () -> assertThrows(IllegalArgumentException.class,
                () -> account.debit(new BigDecimal("-100"))),
            () -> assertThrows(IllegalArgumentException.class,
                () -> account.credit(BigDecimal.ZERO))
        );
    }

    @Test
    @DisplayName("初始餘額不可為負數")
    void shouldRejectNegativeInitialBalance() {
        assertThrows(IllegalArgumentException.class,
            () -> new Account("ACC-001", new BigDecimal("-1000")));
    }
}

Use Case 測試

package com.bank.transfer.application.usecase;

import com.bank.transfer.domain.model.Account;
import com.bank.transfer.domain.model.TransferResult;
import com.bank.transfer.domain.repository.AccountRepository;
import com.bank.transfer.domain.service.TransferDomainService;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Spy;
import org.mockito.junit.jupiter.MockitoExtension;

import java.math.BigDecimal;
import java.util.Optional;

import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.*;

@ExtendWith(MockitoExtension.class)
class TransferUseCaseTest {

    @Mock
    private AccountRepository accountRepository;

    @Spy
    private TransferDomainService transferDomainService = new TransferDomainService();

    @InjectMocks
    private TransferUseCase transferUseCase;

    private Account sourceAccount;
    private Account targetAccount;

    @BeforeEach
    void setUp() {
        sourceAccount = new Account("ACC-001", new BigDecimal("10000.00"));
        targetAccount = new Account("ACC-002", new BigDecimal("5000.00"));
    }

    @Test
    @DisplayName("正常轉帳:雙方帳戶餘額正確更新")
    void shouldTransferSuccessfully() {
        // Given
        when(accountRepository.findById("ACC-001")).thenReturn(Optional.of(sourceAccount));
        when(accountRepository.findById("ACC-002")).thenReturn(Optional.of(targetAccount));
        when(accountRepository.save(any())).thenAnswer(i -> i.getArgument(0));

        // When
        TransferResult result = transferUseCase.execute(
            "ACC-001", "ACC-002", new BigDecimal("3000.00"));

        // Then
        assertTrue(result.isSuccess());
        assertEquals(new BigDecimal("7000.00"), sourceAccount.getBalance());
        assertEquals(new BigDecimal("8000.00"), targetAccount.getBalance());
        verify(accountRepository, times(2)).save(any());
    }

    @Test
    @DisplayName("來源帳戶不存在時應拋出例外")
    void shouldThrowWhenSourceNotFound() {
        when(accountRepository.findById("ACC-999")).thenReturn(Optional.empty());

        assertThrows(IllegalArgumentException.class,
            () -> transferUseCase.execute(
                "ACC-999", "ACC-002", new BigDecimal("1000.00")));
    }

    @Test
    @DisplayName("餘額不足時不應更新帳戶")
    void shouldNotSaveWhenTransferFails() {
        // Given
        when(accountRepository.findById("ACC-001")).thenReturn(Optional.of(sourceAccount));
        when(accountRepository.findById("ACC-002")).thenReturn(Optional.of(targetAccount));

        // When
        TransferResult result = transferUseCase.execute(
            "ACC-001", "ACC-002", new BigDecimal("50000.00"));

        // Then
        assertFalse(result.isSuccess());
        verify(accountRepository, never()).save(any());
    }
}

Architecture 測試

package com.bank.transfer.architecture;

import com.tngtech.archunit.core.importer.ImportOption;
import com.tngtech.archunit.junit.AnalyzeClasses;
import com.tngtech.archunit.junit.ArchTest;
import com.tngtech.archunit.lang.ArchRule;

import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses;

@AnalyzeClasses(
    packages = "com.bank.transfer",
    importOptions = ImportOption.DoNotIncludeTests.class
)
class ArchitectureTest {

    @ArchTest
    static final ArchRule domain_should_not_depend_on_application =
        noClasses().that().resideInAPackage("..domain..")
            .should().dependOnClassesThat().resideInAPackage("..application..");

    @ArchTest
    static final ArchRule domain_should_not_depend_on_infrastructure =
        noClasses().that().resideInAPackage("..domain..")
            .should().dependOnClassesThat().resideInAPackage("..infrastructure..");

    @ArchTest
    static final ArchRule domain_should_not_depend_on_presentation =
        noClasses().that().resideInAPackage("..domain..")
            .should().dependOnClassesThat().resideInAPackage("..presentation..");

    @ArchTest
    static final ArchRule application_should_not_depend_on_infrastructure =
        noClasses().that().resideInAPackage("..application..")
            .should().dependOnClassesThat().resideInAPackage("..infrastructure..");

    @ArchTest
    static final ArchRule application_should_not_depend_on_presentation =
        noClasses().that().resideInAPackage("..application..")
            .should().dependOnClassesThat().resideInAPackage("..presentation..");

    @ArchTest
    static final ArchRule domain_should_not_use_spring_annotations =
        noClasses().that().resideInAPackage("..domain..")
            .should().dependOnClassesThat()
            .resideInAnyPackage("org.springframework..");
}

13.5 開發流程示範

完整 Git 歷史(模擬)

$ git log --oneline

f8a2c31 docs(api): update transfer API documentation
e92d4f0 chore(sp): finishing-a-development-branch — merge sp/tdd/transfer
d91b4e7 test(arch): add Clean Architecture compliance tests
c23e5f0 refactor(transfer): extract validation to domain service
b17d3a2 feat(transfer): implement TransferController
a09c8f4 test(transfer): add TransferController integration tests
9e8b7d6 feat(transfer): implement TransferUseCase
8d7c6b5 test(transfer): add TransferUseCase unit tests
7c6b5a4 feat(domain): implement TransferDomainService
6b5a493 test(domain): add TransferDomainService tests
5a49382 feat(domain): implement Account entity
4938271 test(domain): add Account unit tests (6 cases)
3827160 feat(domain): define AccountRepository interface
2716049 docs(plan): transfer feature plan (Document Review passed)
1604938 chore(project): initialize Spring Boot project + CLAUDE.md

觀察重點:

  1. ✅ 每個 feat commit 前都有對應的 test commit(TDD 合規)
  2. ✅ 由內(domain)往外(presentation)開發(Clean Architecture)
  3. ✅ commit 粒度小且有意義(小步提交)
  4. ✅ 包含架構測試(ArchUnit)
  5. ✅ 計畫通過 Document Review 後才開始開發
  6. ✅ 使用 finishing-a-development-branch 技能完成合併
  7. ✅ 最後更新文件

💡 提示:這個範例專案展示了 Superpowers v5.0.5 的 7-Step Basic Workflow 在實際專案中的協同運作。建議讀者根據此範例進行練習,並嘗試使用 Subagent-Driven Development 將 Domain / Application / Presentation 層拆分給不同 Subagent 平行開發。


附錄 A:AI Agent Team 協作模式

章節摘要:本附錄說明如何將 Superpowers 方法論應用於多 Agent 協作場景。在 v5.0+ 中,subagent-driven-development 技能已內建完整的 Subagent 協作機制(含 Two-Stage Review 與 Context Isolation),以下為進階的多角色團隊模式。

A.1 多 Agent 分工架構

graph TB
    subgraph "Team Lead(人類)"
        TL[技術負責人<br/>最終決策者]
    end
    
    subgraph "AI Agent Team"
        PA[🧠 Planner Agent<br/>需求分析 + 計畫制定]
        DA[💻 Developer Agent<br/>TDD 開發]
        TA[🧪 Tester Agent<br/>測試設計 + 品質審查]
        RA[📝 Reviewer Agent<br/>Code Review]
    end
    
    TL -->|需求| PA
    PA -->|計畫| TL
    TL -->|核准| DA
    DA -->|程式碼| TA
    TA -->|測試結果| RA
    RA -->|審查報告| TL
    
    PA -.->|Brainstorming Skill| PA
    PA -.->|Writing Plans Skill| PA
    DA -.->|TDD Skill| DA
    DA -.->|Git Worktrees Skill| DA
    TA -.->|TDD Skill| TA
    RA -.->|Systematic Debugging Skill| RA
    
    style TL fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#000

A.2 Agent 角色定義

Planner Agent

# Planner Agent 設定

## 角色
你是專案規劃師,負責需求釐清與任務拆解。

## 使用的 Superpowers 技能
- Brainstorming(主要)
- Writing Plans(主要)

## 規則
1. 收到需求後,先執行 Brainstorming
2. 釐清需求後,產出微步驟計畫
3. 計畫必須包含 TDD 測試任務
4. 每個任務不超過 5 分鐘
5. 你不能寫任何程式碼

## 輸出格式
- 需求文件(Markdown)
- 微步驟計畫(含時間估算)

Developer Agent

# Developer Agent 設定

## 角色
你是資深開發者,負責按照計畫使用 TDD 實作功能。

## 使用的 Superpowers 技能
- TDD(主要)
- Git Worktrees(主要)

## 規則
1. 嚴格按照計畫中的任務順序執行
2. 每個功能必須先寫失敗的測試
3. 每完成一個 Red-Green-Refactor 循環就 commit
4. 不能跳過任何計畫步驟
5. 遇到計畫不清楚的地方,請求 Planner Agent 釐清

## 輸出格式
- 程式碼 commit
- 測試報告

Tester Agent

# Tester Agent 設定

## 角色
你是品質保證工程師,負責審查測試品質與設計額外測試。

## 使用的 Superpowers 技能
- TDD(主要 — 審查角度)

## 規則
1. 審查 Developer Agent 產出的測試是否充分
2. 識別遺漏的邊界條件與錯誤場景
3. 設計整合測試與效能測試
4. 確認覆蓋率達標(≥ 80%)
5. 發現品質問題時,寫 Bug Report 交回 Developer Agent

## 輸出格式
- 測試審查報告
- 額外測試案例
- 覆蓋率報告

A.3 協作流程

sequenceDiagram
    participant TL as Team Lead
    participant PA as Planner Agent
    participant DA as Developer Agent
    participant TA as Tester Agent
    participant RA as Reviewer Agent
    
    TL->>PA: 「實作帳戶轉帳功能」
    
    Note over PA: Brainstorming Skill
    PA->>TL: 5 個釐清問題
    TL->>PA: 回答問題
    
    Note over PA: Writing Plans Skill
    PA->>TL: 微步驟計畫(18 個任務)
    TL->>DA: 核准計畫,開始開發
    
    Note over DA: Git Worktrees Skill
    DA->>DA: 建立 sp/tdd/transfer Worktree
    
    loop 每個微任務
        Note over DA: TDD Skill
        DA->>DA: 🔴 寫失敗測試
        DA->>DA: 🟢 寫實作通過測試
        DA->>DA: 🔵 重構
        DA->>DA: commit
    end
    
    DA->>TA: 通知開發完成
    
    TA->>TA: 審查測試品質
    TA->>TA: 設計額外測試案例
    TA->>DA: 回報遺漏(如有)
    DA->>TA: 補充測試
    TA->>TA: 確認覆蓋率 ≥ 80% ✅
    
    TA->>RA: 通知品質審查完成

    RA->>RA: Code Review
    RA->>TL: 審查報告
    TL->>DA: 核准合併

A.4 實作建議

場景Agent 組合說明
小功能(< 2hr)Developer only一個 Agent 即可
中功能(2-8hr)Planner + Developer需要計畫
大功能(> 8hr)完整 4 Agent全流程
Bug 修復Developer + Tester聚焦在修復與測試
架構重構完整 4 Agent需要嚴格的計畫與審查

附錄 B:與 MCP 整合

章節摘要:本附錄說明如何將 Superpowers 與 Model Context Protocol(MCP)整合,擴展 AI Agent 的能力。在 v5.0+ 中,Superpowers 已透過 Plugin Marketplace 原生支援多平台(Claude Code、Cursor、OpenCode 等),MCP 整合提供額外的工具擴展能力。

B.1 MCP 概述

Model Context Protocol(MCP) 是一種標準化的協議,讓 AI 模型可以存取外部工具與資料來源。將 Superpowers 的技能透過 MCP 暴露,可以讓更多 AI 工具使用 Superpowers 方法論。

B.2 整合架構

graph TB
    subgraph "AI Agent(Claude Code / Copilot)"
        AGENT[AI Agent]
    end
    
    subgraph "MCP Layer"
        MCP_SP[Superpowers MCP Server]
        MCP_GH[GitHub MCP Server]
        MCP_DB[Database MCP Server]
    end
    
    subgraph "Superpowers Skills"
        BS[Brainstorming]
        TDD_SK[TDD]
        PLAN[Planning]
        DBG[Debugging]
        GW2[Git Worktrees]
    end
    
    subgraph "External Tools"
        GIT3[Git]
        MVN[Maven]
        SQ[SonarQube]
    end
    
    AGENT --> MCP_SP & MCP_GH & MCP_DB
    MCP_SP --> BS & TDD_SK & PLAN & DBG & GW2
    GW2 --> GIT3
    TDD_SK --> MVN
    DBG --> SQ

B.3 Superpowers MCP Server 設定範例

// .mcp/superpowers-server.json
{
  "name": "superpowers",
  "version": "1.0.0",
  "description": "Superpowers Engineering Discipline MCP Server",
  "tools": [
    {
      "name": "brainstorming_start",
      "description": "啟動 Superpowers Brainstorming 技能,進行蘇格拉底式提問",
      "parameters": {
        "feature_description": {
          "type": "string",
          "description": "功能需求描述"
        },
        "min_questions": {
          "type": "integer",
          "default": 5,
          "description": "最少提問數量"
        }
      }
    },
    {
      "name": "tdd_start",
      "description": "啟動 Superpowers TDD 技能,開始 Red-Green-Refactor 循環",
      "parameters": {
        "feature_name": {
          "type": "string",
          "description": "功能名稱"
        },
        "language": {
          "type": "string",
          "enum": ["java", "python", "typescript"],
          "description": "程式語言"
        }
      }
    },
    {
      "name": "plan_create",
      "description": "建立 Superpowers 微步驟計畫",
      "parameters": {
        "feature_name": {
          "type": "string",
          "description": "功能名稱"
        },
        "max_task_duration": {
          "type": "string",
          "default": "5m",
          "description": "每個任務最長時間"
        }
      }
    },
    {
      "name": "debug_start",
      "description": "啟動 Superpowers Systematic Debugging",
      "parameters": {
        "issue_description": {
          "type": "string",
          "description": "問題描述"
        },
        "severity": {
          "type": "string",
          "enum": ["critical", "high", "medium", "low"]
        }
      }
    },
    {
      "name": "worktree_create",
      "description": "建立 Git Worktree",
      "parameters": {
        "skill": {
          "type": "string",
          "enum": ["tdd", "debug", "experiment", "refactor"]
        },
        "feature_name": {
          "type": "string",
          "description": "功能或修復名稱"
        }
      }
    }
  ],
  "resources": [
    {
      "name": "superpowers_config",
      "description": "讀取 Superpowers 項目配置",
      "uri": "file://.superpowers/config.yaml"
    },
    {
      "name": "active_plans",
      "description": "讀取目前有效的開發計畫",
      "uri": "file://.superpowers/plans/"
    }
  ]
}

B.4 使用情境

在 Claude Code 中,Agent 透過 MCP 呼叫 Superpowers:

User: 「我需要實作密碼重設功能」

Agent 內部流程:
1. MCP call: brainstorming_start(feature_description="密碼重設功能")
   → 回傳 5 個提問
2. User 回答後
3. MCP call: plan_create(feature_name="password-reset")
   → 回傳微步驟計畫
4. User 核准後
5. MCP call: worktree_create(skill="tdd", feature_name="password-reset")
   → 建立 sp/tdd/password-reset Worktree
6. MCP call: tdd_start(feature_name="password-reset", language="java")
   → 開始 TDD 循環

💡 提示:MCP 整合讓 Superpowers 不再僅限於 Claude Code,任何支援 MCP 的 AI 工具都可以使用 Superpowers 的工程紀律。


附錄 C:新進成員檢查清單(Checklist)

用途:新進成員入職時,按照此清單完成 Superpowers 導入,確保快速上手。

C.1 環境建置清單

## 🔧 環境建置(第一天完成)

### 基本工具
- [ ] 安裝 Git(≥ 2.20)並確認 `git worktree` 可用
- [ ] 安裝 Java JDK 21
- [ ] 安裝 Maven
- [ ] 安裝 VS Code + Java Extension Pack

### AI 平台(擇一或多選)
- [ ] Claude Code + Superpowers Plugin(`/plugin install superpowers@claude-plugins-official`)
- [ ] Cursor + Superpowers Plugin(`/add-plugin superpowers`)
- [ ] Codex CLI + AGENTS.md 配置
- [ ] OpenCode + Superpowers(`opencode plugin install superpowers`)
- [ ] Gemini CLI + Extension 安裝
- [ ] GitHub Copilot(方法論注入至 `copilot-instructions.md`)

### Superpowers 設定
- [ ] 確認 Superpowers Plugin 安裝成功(`/plugin list | grep superpowers`)
- [ ] 閱讀 `CLAUDE.md` 或 `.cursorrules`(專案配置)
- [ ] 閱讀 `.github/copilot-instructions.md`(如使用 Copilot)
- [ ] 確認 Superpowers Plugin 版本與團隊一致(鎖定版本)
- [ ] 測試 Git Worktree 建立/移除

### 驗證
- [ ] 執行 `mvn test` 確認所有測試通過
- [ ] 用 Superpowers 完成一個小練習(見 C.4)

C.2 學習路徑清單

## 📚 學習路徑(第一週完成)

### Day 1:概念理解
- [ ] 閱讀本手冊第 1 章(Superpowers 概述 — 定位、哲學、多平台支援)
- [ ] 閱讀本手冊第 2 章(系統架構 — Plugin 架構、Hooks 系統)
- [ ] 了解 14+ 技能與 7-Step Basic Workflow

### Day 2:環境與安裝
- [ ] 閱讀本手冊第 3 章(安裝與環境建置 — Plugin Marketplace)
- [ ] 完成 C.1 環境建置清單

### Day 3-4:核心技能
- [ ] 閱讀本手冊第 4 章(核心 Skills 詳解)
- [ ] 重點深入理解 TDD、Brainstorming、Subagent-Driven Development
- [ ] 用 TDD 完成一個小練習

### Day 5:實戰流程
- [ ] 閱讀本手冊第 5 章(實戰開發流程)
- [ ] 用 Superpowers 7-Step Workflow 完整開發一個小功能
- [ ] 與 Mentor 進行 Two-Stage Code Review

C.3 日常開發清單

## 📋 日常開發 Checklist(每個功能必做)

### 開始前
- [ ] 需求是否清楚?(是否需要 Brainstorming?— Hard Gates 會強制)
- [ ] 計畫是否已制定並通過 Document Review?(Writing Plans + Review Loop)
- [ ] 計畫是否已被 Tech Lead 核准?
- [ ] 是否已建立 Git Worktree?(`sp/` 前綴,v4.2.0+ 強制)

### 開發中
- [ ] 是否遵循 TDD?(先寫測試→後寫實作→最後重構)
- [ ] 每個 Red-Green-Refactor 循環是否有 commit?
- [ ] commit 訊息是否符合規範?(type(scope): description)
- [ ] 遇到問題是否使用 Systematic Debugging?
- [ ] 大型功能是否使用 Subagent-Driven Development?

### 完成後
- [ ] 所有測試是否通過?
- [ ] 測試覆蓋率是否 ≥ 80%?
- [ ] ArchUnit 架構測試是否通過?
- [ ] Two-Stage Code Review 是否通過?(Spec Compliance + Code Quality)
- [ ] 是否使用 `finishing-a-development-branch` 技能完成合併?
- [ ] 是否清理了 Git Worktree?

C.4 練習題目

練習一:Hello Superpowers(15 分鐘)

需求:建立一個 Calculator 類別,支援加減乘除。

步驟(7-Step Basic Workflow):
1. 使用 Brainstorming 提出 3 個問題(例:是否支援小數?溢位處理?)
2. 使用 Writing Plans 拆解成 4-6 個微任務
3. 通過 Document Review(至少 1 輪)
4. 建立 Git Worktree: sp/tdd/calculator
5. 用 TDD 完成每個任務
6. 使用 Two-Stage Review 審查
7. 使用 finishing-a-development-branch 合併回 main 並清理 Worktree

練習二:Debug 練習(30 分鐘)

給定一段有 Bug 的程式碼(由 Mentor 準備),使用 Systematic Debugging 四階段:
1. 重現問題
2. 建立至少 2 個假設
3. 驗證假設
4. 修復並撰寫回歸測試

附錄 D:詞彙表

英文術語中文翻譯說明
Superpowers超能力(框架名)AI Agent 工程紀律技能框架(by Jesse Vincent / obra)
Agentic Skills Framework代理式技能框架AI Agent 行為規範的系統
Plugin Marketplace插件市場v5.0+ 官方安裝方式,一行安裝 Superpowers
Basic Workflow基礎工作流7 步驟標準開發流程
Brainstorming腦力激盪使用蘇格拉底式提問釐清需求
Hard Gates硬性門檻v4.3.0+ Brainstorming 強制執行機制
Visual Brainstorming Companion視覺化腦力激盪伴侶v5.0+ 零依賴 WebSocket 服務,提供即時視覺化
TDD (Test-Driven Development)測試驅動開發Red → Green → Refactor 循環
Writing Plans撰寫計畫將任務拆解為微步驟
Document Review System文件審查系統v5.0+ 計畫/規格 Review Loop(≤ 3 輪)
Systematic Debugging系統化除錯假設驅動的四階段除錯方法(Root Cause Tracing)
Git WorktreesGit 工作樹在同一 repo 中建立多個工作目錄(v4.2.0+ 強制)
Subagent-Driven Development子代理驅動開發v4.0+ 將任務委派給獨立 Subagent 的開發模式
Two-Stage Code Review雙階段程式碼審查Stage 1: Spec Compliance → Stage 2: Code Quality
Context Isolation上下文隔離v5.0.2+ Subagent 間不共享會話狀態
Rationalization Detection合理化偵測偵測 AI 嘗試跳過規定行為的 1% 規則
Hooks 系統鉤子系統session-start 等事件觸發的自動化機制
Red-Green-Refactor紅燈-綠燈-重構TDD 的三步驟循環
Clean Architecture清晰架構分層架構設計,依賴由外向內
SOLIDSOLID 原則五大物件導向設計原則
ArchUnitArchUnitJava 架構自動化測試框架
CI/CD持續整合/持續部署自動化建置、測試與部署
Quality Gate品質門檻程式碼必須通過的最低品質標準
Testcontainers測試容器用 Docker 容器執行整合測試
MCP (Model Context Protocol)模型上下文協議AI 模型存取外部工具的標準協議
Governance治理組織層級的規範與監管機制
Technical Debt技術債為求快速而累積的設計/實作缺陷
Anti-pattern反模式常見但有害的做法
Hypothesis-Driven假設驅動先建立假設再驗證的方法論
Micro-task微任務2-5 分鐘可完成的小任務
Code Smell程式碼異味暗示程式碼品質問題的特徵
Regression Test回歸測試確保修復不引入新問題的測試
DOT/GraphVizDOT 圖形描述語言v4.0+ 計畫輸出中包含的流程圖格式
CLAUDE.mdClaude 配置檔Claude Code 專案級配置(取代舊版 .superpowers/config.yaml
.cursorrulesCursor 規則檔Cursor 平台的專案級配置
AGENTS.mdCodex 代理配置Codex CLI 的代理行為配置檔

附錄 E:完整版本歷程摘要

用途:提供 Superpowers v2.0.0 至 v5.0.5 的完整版本變更紀錄快速查閱表,方便企業進行版本評估與升級決策。

E.1 版本概覽

版本日期類型GitHub Stars(約)支援平台數
v2.0.02025-10-12Initial1(Claude Code)
v3.0.12025-11-01Patch~5k1
v3.5.02025-11-20Minor~15k1
v4.0.02025-12-15Major~35k1
v4.2.02026-01-05Minor~50k1
v4.3.02026-01-20Minor~60k1
v4.3.12026-01-30Patch~65k2(+ Cursor)
v5.0.02026-02-15Major~80k5
v5.0.22026-02-28Minor~90k5
v5.0.42026-03-10Minor~100k5
v5.0.52026-03-17Patch107k5

E.2 各版本重點功能

v2.0.0 — 初始公開版本(2025-10-12)

  • 5 大基礎技能:brainstorming、test-driven-development、writing-plans、systematic-debugging、using-git-worktrees
  • Claude Code 專屬
  • .superpowers/ 目錄結構
  • 基礎技能觸發機制

v3.0.1 — 技能精緻化(2025-11-01)

  • 技能定義文件格式標準化(YAML frontmatter)
  • 觸發條件細化與精準度提升
  • 文件勘誤修正

v3.5.0 — 測試反模式(2025-11-20)

  • 新增 testing-anti-patterns.md 參考文件
  • Rationalization Detection 強化(1% 規則)
  • 技能間的依賴關係文件化

v4.0.0 — Two-Stage Review & Subagent(2025-12-15)

  • [Breaking] Two-Stage Code Review(Spec Compliance → Code Quality)
  • [Breaking] DOT/GraphViz 流程圖輸出
  • 新增 subagent-driven-development 技能
  • 新增 requesting-code-reviewreceiving-code-review 技能
  • 新增 executing-plans 技能
  • 新增 dispatching-parallel-agents 技能

v4.2.0 — Worktree 強制化(2026-01-05)

  • [Breaking] using-git-worktrees 從建議改為強制
  • sp/ 前綴命名規範
  • 新增 finishing-a-development-branch 技能

v4.3.0 — Hard Gates(2026-01-20)

  • Brainstorming Hard Gates:提問不足時阻止繼續
  • 新增 verification-before-completion 技能
  • 新增 writing-skillsusing-superpowers 技能

v4.3.1 — Cursor 支援(2026-01-30)

  • Cursor 平台適配
  • .cursorrules 自動生成
  • 多平台技能載入機制

v5.0.0 — Visual Companion & Document Review(2026-02-15)

  • [Breaking] Visual Brainstorming Companion(Node.js WebSocket server, port 3000)
  • [Breaking] Document Review System(寫完計畫後強制 Review Loop)
  • Plugin Marketplace 上架(Claude Code 官方)
  • Hooks 系統(session-start 等事件)
  • Codex CLI 支援(AGENTS.md)
  • OpenCode 支援(部分)
  • Gemini CLI 支援(extension)

v5.0.2 — Context Isolation(2026-02-28)

  • Context Isolation:Subagent 間不共享會話狀態
  • Visual Companion Server 零依賴化(移除 Express.js)
  • Bug 修復

v5.0.4 — OpenCode 原生支援(2026-03-10)

  • OpenCode 原生一行安裝(opencode plugin install superpowers
  • Document Review 3 輪上限(防止無限 loop)
  • 效能優化

v5.0.5 — 穩定性修復(2026-03-17)

  • ESM/CJS 雙模式相容修復
  • Windows process.pid 修復
  • 依賴更新
  • 文件勘誤

E.3 升級決策建議

目前版本建議升級至風險等級預估影響
v2.x–v3.xv5.0.5🔴 高需要完整遷移計畫(移除 .superpowers/、改用 Plugin)
v4.0–v4.2v5.0.5🟡 中需處理 Visual Companion port、Document Review 流程
v4.3.xv5.0.5🟢 低主要是新增功能,Breaking Changes 少
v5.0.0–v5.0.4v5.0.5🟢 極低Patch 等級,平滑升級

版本資訊
本手冊基於 Superpowers Framework v5.0.5(by Jesse Vincent / obra at Prime Radiant)撰寫
GitHub:https://github.com/obra/superpowers(⭐ 107k+)
手冊版本:v2.0
最後更新:2026-03
維護人員:[Eric Cheng]

參考資源

  • Superpowers GitHub:https://github.com/obra/superpowers
  • Superpowers RELEASE-NOTES:https://github.com/obra/superpowers/blob/main/RELEASE-NOTES.md
  • Claude Code 文件:https://code.claude.com/docs
  • MCP 協議:https://modelcontextprotocol.io