|
|
|
|
@@ -11,14 +11,16 @@ Write comprehensive implementation plans assuming the engineer has zero context
|
|
|
|
|
|
|
|
|
|
Assume they are a skilled developer, but know almost nothing about our toolset or problem domain. Assume they don't know good test design very well.
|
|
|
|
|
|
|
|
|
|
**Plans reference the spec; they never restate it.** The spec owns the WHAT and WHY — requirements, acceptance criteria, design decisions. The plan owns the HOW — tasks, files, code, commands. Cite the spec by path in the header and by section where a task needs context. Re-deriving spec content inline doubles the documents and lets them drift apart. "Zero context" means the engineer can execute each step mechanically; it does not mean the plan repeats what the spec already says — they can read the spec at the cited path.
|
|
|
|
|
**Plans reference the spec; they never restate, paraphrase, or summarize it.** The spec owns the WHAT and WHY — requirements, acceptance criteria, design decisions; the plan owns the HOW — tasks, files, code, commands. Cite it by path in the header and by section where a task needs context. Reference discipline never means skipping the spec: if brainstorming produced one, it exists and the plan cites it. No Placeholders still requires repeating code and commands WITHIN the plan; copying FROM the spec is different: a step that needs a requirement's prose is under-specified — turn it into a concrete action. Snapshotting spec text into the plan hides drift, not prevents it. "Zero context" means each step is mechanically executable, not that the plan repeats the spec.
|
|
|
|
|
|
|
|
|
|
**Two narrow exceptions to reference discipline** — subagents executing the plan see the plan (or a single task of it), never the spec, so two kinds of spec content travel in the plan itself: the `## Global Constraints` section (the spec's project-wide requirements, exact values copied verbatim) and each task's `**Interfaces:**` block (exact signatures). Copy those values exactly; everything else stays referenced, never restated.
|
|
|
|
|
|
|
|
|
|
**Announce at start:** "I'm using the writing-plans skill to create the implementation plan."
|
|
|
|
|
|
|
|
|
|
**Context:** If working in an isolated worktree, it should have been created via the `superpowers:using-git-worktrees` skill at execution time.
|
|
|
|
|
|
|
|
|
|
**Save plans to:** `docs/superpowers/plans/YYYY-MM-DD-<feature-name>.md`
|
|
|
|
|
- (User preferences for plan location override this default)
|
|
|
|
|
- (An explicit user instruction overrides this default; an existing differently-named docs directory does not)
|
|
|
|
|
|
|
|
|
|
## Scope Check
|
|
|
|
|
|
|
|
|
|
@@ -35,6 +37,15 @@ Before defining tasks, map out which files will be created or modified and what
|
|
|
|
|
|
|
|
|
|
This structure informs the task decomposition. Each task should produce self-contained changes that make sense independently.
|
|
|
|
|
|
|
|
|
|
## Task Right-Sizing
|
|
|
|
|
|
|
|
|
|
A task is the smallest unit that carries its own test cycle and is worth a
|
|
|
|
|
fresh reviewer's gate. When drawing task boundaries: fold setup,
|
|
|
|
|
configuration, scaffolding, and documentation steps into the task whose
|
|
|
|
|
deliverable needs them; split only where a reviewer could meaningfully
|
|
|
|
|
reject one task while approving its neighbor. Each task ends with an
|
|
|
|
|
independently testable deliverable.
|
|
|
|
|
|
|
|
|
|
## Bite-Sized Task Granularity
|
|
|
|
|
|
|
|
|
|
**Each step is one action (2-5 minutes):**
|
|
|
|
|
@@ -55,12 +66,19 @@ This structure informs the task decomposition. Each task should produce self-con
|
|
|
|
|
|
|
|
|
|
**Goal:** [One sentence describing what this builds]
|
|
|
|
|
|
|
|
|
|
**Spec:** [Path to the spec doc, e.g. `docs/superpowers/specs/YYYY-MM-DD-<topic>-design.md` — requirements and design decisions live there; do not restate them here]
|
|
|
|
|
**Spec:** [Path to the spec doc, e.g. `docs/superpowers/specs/YYYY-MM-DD-<topic>-design.md` — requirements and design decisions live there; do not restate them here. Only if no spec doc exists (requirements arrived conversationally; brainstorming never ran): write "none — requirements:" and state them once here, not per task]
|
|
|
|
|
|
|
|
|
|
**Architecture:** [2-3 sentences about approach]
|
|
|
|
|
|
|
|
|
|
**Tech Stack:** [Key technologies/libraries]
|
|
|
|
|
|
|
|
|
|
## Global Constraints
|
|
|
|
|
|
|
|
|
|
[The spec's project-wide requirements — version floors, dependency limits,
|
|
|
|
|
naming and copy rules, platform requirements — one line each, with exact
|
|
|
|
|
values copied verbatim from the spec. Every task's requirements implicitly
|
|
|
|
|
include this section.]
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
@@ -74,6 +92,12 @@ This structure informs the task decomposition. Each task should produce self-con
|
|
|
|
|
- Modify: `exact/path/to/existing.py:123-145`
|
|
|
|
|
- Test: `tests/exact/path/to/test.py`
|
|
|
|
|
|
|
|
|
|
**Interfaces:**
|
|
|
|
|
- Consumes: [what this task uses from earlier tasks — exact signatures]
|
|
|
|
|
- Produces: [what later tasks rely on — exact function names, parameter
|
|
|
|
|
and return types. A task's implementer sees only their own task; this
|
|
|
|
|
block is how they learn the names and types neighboring tasks use.]
|
|
|
|
|
|
|
|
|
|
- [ ] **Step 1: Write the failing test**
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
|