{"slug":"writing-plans-8","title":"writing-plans","summary":"当你有规格说明或需求用于多步骤任务时使用，在动手写代码之前","platform":"Claude","tags":["planning"],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-09-07T18:38:27.533975Z","repo":{"url":"https://github.com/jnMetaCode/superpowers-zh","stars":8205,"forks":767,"license":"MIT","updatedAt":"2026-09-17T09:11:21Z"},"bodyHtml":"<hr>\n<h2>name: writing-plans\ndescription: 当你有规格说明或需求用于多步骤任务时使用，在动手写代码之前\nversion: \"1.0.0\"\nlicense: MIT\nmetadata:\nhermes:\ntags: [planning, documentation]</h2>\n<h1>编写计划</h1>\n<h2>概述</h2>\n<p>编写全面的实现计划，假设工程师对我们的代码库零上下文，且品味存疑。记录他们需要知道的一切：每个任务要修改哪些文件、代码、测试、可能需要查阅的文档、如何测试。将整个计划拆成小步骤任务。DRY。YAGNI。TDD。频繁 commit。</p>\n<p>假设他们是有经验的开发者，但对我们的工具链和问题领域几乎一无所知。假设他们不太擅长测试设计。</p>\n<p><strong>开始时宣布：</strong> \"我正在使用 writing-plans 技能创建实现计划。\"</p>\n<p><strong>上下文：</strong> 此技能应在专用 worktree 中运行（由 brainstorming 技能创建）。</p>\n<p><strong>计划保存位置：</strong> <code>docs/superpowers/plans/YYYY-MM-DD-&lt;feature-name&gt;.md</code></p>\n<ul>\n<li>（用户对计划位置的偏好优先于此默认值）</li>\n</ul>\n<h2>范围检查</h2>\n<p>如果规格涵盖了多个独立子系统，它应该在头脑风暴阶段就被拆分为子项目规格。如果没有，建议将其拆分为独立的计划——每个子系统一个。每个计划应该能独立产出可工作、可测试的软件。</p>\n<h2>文件结构</h2>\n<p>在定义任务之前，先列出将要创建或修改的文件以及每个文件的职责。这是锁定分解决策的地方。</p>\n<ul>\n<li>设计边界清晰、接口定义良好的单元。每个文件应有一个明确的职责。</li>\n<li>你对能一次放入上下文的代码推理得最好，文件越专注你的编辑越可靠。优先选择小而专注的文件，而非承担过多功能的大文件。</li>\n<li>一起变更的文件应放在一起。按职责拆分，而非按技术层级拆分。</li>\n<li>在现有代码库中，遵循已有模式。如果代码库使用大文件，不要单方面重构——但如果你正在修改的文件已经变得难以管理，在计划中包含拆分是合理的。</li>\n</ul>\n<p>此结构决定了任务分解。每个任务应产出独立的、有意义的变更。</p>\n<h2>任务粒度定界</h2>\n<p>一个任务是<strong>能独立承载自己那一轮测试循环、且值得一个全新审查者把关</strong>的最小单元。划任务边界时：把搭建、配置、脚手架和文档这些步骤，折进那个真正需要它们的交付物所在的任务里；只在「审查者有可能否掉这个任务、同时批准它旁边那个」的地方才拆开。每个任务都以一个<strong>可独立测试的交付物</strong>结束。</p>\n<h2>小步骤任务粒度</h2>\n<p><strong>每步是一个操作（2-5 分钟）：</strong></p>\n<ul>\n<li>\"编写失败的测试\" - 一步</li>\n<li>\"运行它确认失败\" - 一步</li>\n<li>\"实现最少代码让测试通过\" - 一步</li>\n<li>\"运行测试确认通过\" - 一步</li>\n<li>\"Commit\" - 一步</li>\n</ul>\n<h2>计划文档头部</h2>\n<p><strong>每个计划必须以此头部开始：</strong></p>\n<pre><code># [功能名称] 实现计划\n\n&gt; **面向 AI 代理的工作者：** 必需子技能：使用 subagent-driven-development（推荐）或 executing-plans 逐任务实现此计划。步骤使用复选框（`- [ ]`）语法来跟踪进度。\n\n**目标：** [一句话描述要构建什么]\n\n**架构：** [2-3 句话描述方案]\n\n**技术栈：** [关键技术/库]\n\n**规格：** [本计划所实现的规格 / 设计文档路径 —— 计划的论证依据来自规格，所以规格要跟着计划一起走；执行者两份都读]\n\n\n## 全局约束\n\n[来自规格的项目级要求 —— 版本下限、依赖限制、命名与文案规则、平台要求 —— 每条一行，数值从规格里逐字照抄。每个任务的要求都隐含包含本节。]\n\n---\n</code></pre>\n<h2>任务结构</h2>\n<pre><code>### 任务 N：[组件名称]\n\n**文件：**\n- 创建：`exact/path/to/file.py`\n- 修改：`exact/path/to/existing.py:123-145`\n- 测试：`tests/exact/path/to/test.py`\n\n- [ ] **步骤 1：编写失败的测试**\n\n```python\ndef test_specific_behavior():\n    result = function(input)\n    assert result == expected\n```\n\n- [ ] **步骤 2：运行测试验证失败**\n\n运行：`pytest tests/path/test.py::test_name -v`\n预期：FAIL，报错 \"function not defined\"\n\n- [ ] **步骤 3：编写最少实现代码**\n\n```python\ndef function(input):\n    return expected\n```\n\n- [ ] **步骤 4：运行测试验证通过**\n\n运行：`pytest tests/path/test.py::test_name -v`\n预期：PASS\n\n- [ ] **步骤 5：Commit**\n\n```bash\ngit add tests/path/test.py src/path/file.py\ngit commit -m \"feat: add specific feature\"\n```\n</code></pre>\n<h2>禁止占位符</h2>\n<p>每个步骤都必须包含工程师需要的实际内容。以下是<strong>计划缺陷</strong>——绝不要写出来：</p>\n<ul>\n<li>\"待定\"、\"TODO\"、\"后续实现\"、\"补充细节\"</li>\n<li>\"添加适当的错误处理\" / \"添加验证\" / \"处理边界情况\"</li>\n<li>\"为上述代码编写测试\"（没有实际测试代码）</li>\n<li>\"类似任务 N\"（重复代码——工程师可能不按顺序阅读任务）</li>\n<li>只描述做什么而不展示怎么做的步骤（代码步骤必须有代码块）</li>\n<li>引用了未在任何任务中定义的类型、函数或方法</li>\n</ul>\n<h2>自检</h2>\n<p>编写完整计划后，以全新视角审视规格并对照检查计划。这是你自己执行的检查清单——不是子代理调度。</p>\n<p><strong>1. 规格覆盖度：</strong> 浏览规格中的每个章节/需求。你能指出实现它的任务吗？列出所有遗漏。</p>\n<p><strong>2. 占位符扫描：</strong> 搜索计划中的红旗——上方\"禁止占位符\"章节中的任何模式。修复它们。</p>\n<p><strong>3. 类型一致性：</strong> 后续任务中使用的类型、方法签名和属性名是否与前面任务中定义的一致？任务 3 中叫 <code>clearLayers()</code> 但任务 7 中叫 <code>clearFullLayers()</code> 就是 bug。</p>\n<p>如果发现问题，直接内联修复。无需重新审查——修好继续推进。如果发现规格中的需求没有对应任务，就添加任务。</p>\n<h2>执行交接</h2>\n<p>保存计划后，提供执行选项：</p>\n<p><strong>\"计划已完成并保存到 <code>docs/superpowers/plans/&lt;filename&gt;.md</code>。两种执行方式：</strong></p>\n<p><strong>1. 子代理驱动（推荐）</strong> - 每个任务调度一个新的子代理，任务间进行审查，快速迭代</p>\n<p><strong>2. 内联执行</strong> - 在当前会话中使用 executing-plans 执行任务，批量执行并设有检查点</p>\n<p><strong>选哪种方式？\"</strong></p>\n<p><strong>如果选择子代理驱动：</strong></p>\n<ul>\n<li><strong>必需子技能：</strong> 使用 subagent-driven-development</li>\n<li>每个任务一个新子代理 + 两阶段审查</li>\n</ul>\n<p><strong>如果选择内联执行：</strong></p>\n<ul>\n<li><strong>必需子技能：</strong> 使用 executing-plans</li>\n<li>批量执行并设有检查点供审查</li>\n</ul>\n","files":[{"path":"plan-document-reviewer-prompt.md","sizeBytes":1603,"isText":true},{"path":"SKILL.md","sizeBytes":6484,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-09-07T18:39:02.004398Z","sha256":"538596D818CC3340658749C50C9A5FC895911B37594AB2B44D4E89B172D4D2B3","sizeBytes":4751},"review":null,"source":{"repositoryUrl":"https://github.com/jnMetaCode/superpowers-zh","path":"skills/writing-plans","license":"MIT","commit":"78cb4f68d691d516eb7216897053ea574212cdf6","subtreeSha":"DF78D8C5A65DC67145E74F78D24B7AC5E8C171A77BCB0EAF2FCC0B00CEEE66F7","lastSyncedAt":"2026-09-25T06:49:13.086723Z"},"reviewedAt":"2026-09-07T18:40:02.995875Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/jnMetaCode/superpowers-zh/tree/main/skills/writing-plans"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install jnmetacode-superpowers-zh@llmmart"},{"target":"git","command":"git clone https://github.com/jnMetaCode/superpowers-zh.git"}]}