writing-plans

writing-plans

熱門

當你有多步驟任務的規格或需求時使用,在碰觸程式碼之前

23萬星標
2.2萬分支
更新於 2026/5/4
SKILL.md
readonlyread-only
name
writing-plans
description

當你有多步驟任務的規格或需求時使用,在碰觸程式碼之前

撰寫計畫

概述

撰寫全面的實作計畫,假設工程師對我們的程式碼庫一無所知且品味可疑。記錄他們需要知道的一切:每個任務要碰觸哪些檔案、程式碼、測試、可能需要查看的文件、如何測試。把整個計畫拆成一口大小的任務。DRY。YAGNI。TDD。頻繁提交。

假設他們是熟練的開發者,但對我們的工具集或問題領域幾乎一無所知。假設他們不太擅長設計好的測試。

開始時宣告:「我正在使用 writing-plans 技能來建立實作計畫。」

上下文: 如果在隔離的工作樹中工作,該工作樹應已在執行時透過 superpowers:using-git-worktrees 技能建立。

儲存計畫至: docs/superpowers/plans/YYYY-MM-DD-<feature-name>.md

  • (使用者對計畫位置的偏好會覆蓋此預設值)

範圍檢查

如果規格涵蓋多個獨立子系統,則應在腦力激盪期間將其拆分為子專案規格。如果沒有,建議將其拆分為多個計畫——每個子系統一個。每個計畫應能獨立產出可運作、可測試的軟體。

檔案結構

在定義任務之前,先規劃哪些檔案將被建立或修改,以及每個檔案的職責。這是分解決策被鎖定的地方。

  • 設計邊界清晰、介面定義良好的單元。每個檔案應有一個明確的職責。
  • 你對能一次掌握在上下文中的程式碼推理最佳,當檔案專注時,你的編輯更可靠。偏好較小、專注的檔案,而非過於龐大的檔案。
  • 一起變更的檔案應放在一起。按職責拆分,而非按技術層。
  • 在現有程式碼庫中,遵循既有模式。如果程式碼庫使用大型檔案,不要單方面重構——但如果正在修改的檔案變得難以管理,在計畫中包含拆分是合理的。

此結構會影響任務分解。每個任務應產生獨立有意義的、自包含的變更。

一口大小的任務粒度

每個步驟是一個動作(2-5 分鐘):

  • 「撰寫會失敗的測試」- 步驟
  • 「執行它以確認它失敗」- 步驟
  • 「實作讓測試通過的最小程式碼」- 步驟
  • 「執行測試並確認它們通過」- 步驟
  • 「提交」- 步驟

計畫文件標頭

每個計畫必須以此標頭開頭:

# [功能名稱] 實作計畫

> **給代理工作者:** 必備子技能:使用 superpowers:subagent-driven-development(建議)或 superpowers:executing-plans 來逐步實作此計畫。步驟使用核取方塊(`- [ ]`)語法來追蹤。

**目標:** [一句話描述此功能建構的內容]

**架構:** [2-3 句關於方法]

**技術棧:** [關鍵技術/函式庫]

---

任務結構

### 任務 N:[元件名稱]

**檔案:**
- 建立:`exact/path/to/file.py`
- 修改:`exact/path/to/existing.py:123-145`
- 測試:`tests/exact/path/to/test.py`

- [ ] **步驟 1:撰寫會失敗的測試**

```python
def test_specific_behavior():
    result = function(input)
    assert result == expected
```

- [ ] **步驟 2:執行測試以確認它失敗**

執行:`pytest tests/path/test.py::test_name -v`
預期:FAIL 並顯示「function not defined」

- [ ] **步驟 3:撰寫最小實作**

```python
def function(input):
    return expected
```

- [ ] **步驟 4:執行測試以確認它通過**

執行:`pytest tests/path/test.py::test_name -v`
預期:PASS

- [ ] **步驟 5:提交**

```bash
git add tests/path/test.py src/path/file.py
git commit -m "feat: add specific feature"
```

無佔位符

每個步驟必須包含工程師實際需要的內容。以下是計畫失敗——永遠不要寫它們:

  • 「待定」、「待辦」、「稍後實作」、「填寫細節」
  • 「加入適當的錯誤處理」/「加入驗證」/「處理邊界情況」
  • 「為上述內容撰寫測試」(沒有實際測試程式碼)
  • 「類似於任務 N」(重複程式碼——工程師可能不按順序閱讀任務)
  • 描述要做什麼但未展示如何做的步驟(程式碼步驟需要程式碼區塊)
  • 引用任何任務中未定義的型別、函式或方法

記住

  • 永遠使用確切檔案路徑
  • 每個步驟中的完整程式碼——如果步驟變更程式碼,顯示程式碼
  • 確切命令與預期輸出
  • DRY、YAGNI、TDD、頻繁提交

自我審查

撰寫完整計畫後,以全新眼光檢視規格,並檢查計畫是否符合。這是你自己執行的檢查清單——不是子代理分派。

1. 規格覆蓋率: 瀏覽規格中的每個章節/需求。你能指出哪個任務實作了它?列出任何缺口。

2. 佔位符掃描: 搜尋計畫中的紅旗——上述「無佔位符」章節中的任何模式。修正它們。

3. 型別一致性: 你在後續任務中使用的型別、方法簽名和屬性名稱是否與先前任務中定義的一致?在任務 3 中叫 clearLayers() 但在任務 7 中叫 clearFullLayers() 的函式就是一個錯誤。

如果發現問題,就地修正。無需重新審查——只需修正並繼續。如果發現規格需求沒有對應任務,則加入該任務。

執行交接

儲存計畫後,提供執行選擇:

「計畫完成並儲存至 docs/superpowers/plans/<filename>.md。兩個執行選項:

1. 子代理驅動(建議) - 我為每個任務分派一個全新的子代理,在任務之間進行審查,快速迭代

2. 內聯執行 - 在此對話中執行任務,使用 executing-plans,批次執行並設有檢查點

選擇哪種方式?」

如果選擇子代理驅動:

  • 必備子技能: 使用 superpowers:subagent-driven-development
  • 每個任務使用全新子代理 + 兩階段審查

如果選擇內聯執行:

  • 必備子技能: 使用 superpowers:executing-plans
  • 批次執行並設有檢查點以供審查