mirror of
https://github.com/obra/superpowers.git
synced 2026-07-10 12:09:04 +08:00
Compare commits
7 Commits
writing-pl
...
60f617489c
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
60f617489c | ||
|
|
a6ce936ac1 | ||
|
|
3c9870febe | ||
|
|
81874ec5b1 | ||
|
|
49a91fd404 | ||
|
|
64d194a08e | ||
|
|
fa07663322 |
2
evals
2
evals
Submodule evals updated: f8e5a9949f...ff3ee83f94
@@ -11,6 +11,8 @@ Execute plan by dispatching fresh subagent per task, with two-stage review after
|
|||||||
|
|
||||||
**Core principle:** Fresh subagent per task + two-stage review (spec then quality) = high quality, fast iteration
|
**Core principle:** Fresh subagent per task + two-stage review (spec then quality) = high quality, fast iteration
|
||||||
|
|
||||||
|
**Proportionality:** Review fanout scales with the change. When the entire plan is one trivial, fully-specified mechanical change — a log statement, a typo fix, a constant bump with no security or behavioral consequences — implement it directly (or with a single implementer subagent), verify per superpowers:verification-before-completion (run the relevant command, confirm output), commit, and skip all review subagents, including the final reviewer: three review dispatches cost more than a one-line diff. Trivial is a property of the diff — it changes no logic, no control flow, and nothing security-relevant — not of the plan's self-description. Any doubt means not trivial: run the full pipeline. Within a multi-task plan, never skip reviews, regardless of task size.
|
||||||
|
|
||||||
**Continuous execution:** Do not pause to check in with your human partner between tasks. Execute all tasks from the plan without stopping. The only reasons to stop are: BLOCKED status you cannot resolve, ambiguity that genuinely prevents progress, or all tasks complete. "Should I continue?" prompts and progress summaries waste their time — they asked you to execute the plan, so execute it.
|
**Continuous execution:** Do not pause to check in with your human partner between tasks. Execute all tasks from the plan without stopping. The only reasons to stop are: BLOCKED status you cannot resolve, ambiguity that genuinely prevents progress, or all tasks complete. "Should I continue?" prompts and progress summaries waste their time — they asked you to execute the plan, so execute it.
|
||||||
|
|
||||||
## When to Use
|
## When to Use
|
||||||
@@ -61,11 +63,16 @@ digraph process {
|
|||||||
}
|
}
|
||||||
|
|
||||||
"Read plan, extract all tasks with full text, note context, create todos" [shape=box];
|
"Read plan, extract all tasks with full text, note context, create todos" [shape=box];
|
||||||
|
"Entire plan = one trivial, fully-specified mechanical change? (any doubt = no)" [shape=diamond];
|
||||||
|
"Implement directly, verify, commit (no review fanout)" [shape=box];
|
||||||
"More tasks remain?" [shape=diamond];
|
"More tasks remain?" [shape=diamond];
|
||||||
"Dispatch final code reviewer subagent for entire implementation" [shape=box];
|
"Dispatch final code reviewer subagent for entire implementation" [shape=box];
|
||||||
"Use superpowers:finishing-a-development-branch" [shape=box style=filled fillcolor=lightgreen];
|
"Use superpowers:finishing-a-development-branch" [shape=box style=filled fillcolor=lightgreen];
|
||||||
|
|
||||||
"Read plan, extract all tasks with full text, note context, create todos" -> "Dispatch implementer subagent (./implementer-prompt.md)";
|
"Read plan, extract all tasks with full text, note context, create todos" -> "Entire plan = one trivial, fully-specified mechanical change? (any doubt = no)";
|
||||||
|
"Entire plan = one trivial, fully-specified mechanical change? (any doubt = no)" -> "Implement directly, verify, commit (no review fanout)" [label="yes — see Proportionality"];
|
||||||
|
"Implement directly, verify, commit (no review fanout)" -> "Use superpowers:finishing-a-development-branch";
|
||||||
|
"Entire plan = one trivial, fully-specified mechanical change? (any doubt = no)" -> "Dispatch implementer subagent (./implementer-prompt.md)" [label="no"];
|
||||||
"Dispatch implementer subagent (./implementer-prompt.md)" -> "Implementer subagent asks questions?";
|
"Dispatch implementer subagent (./implementer-prompt.md)" -> "Implementer subagent asks questions?";
|
||||||
"Implementer subagent asks questions?" -> "Answer questions, provide context" [label="yes"];
|
"Implementer subagent asks questions?" -> "Answer questions, provide context" [label="yes"];
|
||||||
"Answer questions, provide context" -> "Dispatch implementer subagent (./implementer-prompt.md)";
|
"Answer questions, provide context" -> "Dispatch implementer subagent (./implementer-prompt.md)";
|
||||||
@@ -241,7 +248,7 @@ Done!
|
|||||||
|
|
||||||
**Never:**
|
**Never:**
|
||||||
- Start implementation on main/master branch without explicit user consent
|
- Start implementation on main/master branch without explicit user consent
|
||||||
- Skip reviews (spec compliance OR code quality)
|
- Skip reviews — sole exception: a plan that is entirely one trivial change (see Proportionality)
|
||||||
- Proceed with unfixed issues
|
- Proceed with unfixed issues
|
||||||
- Dispatch multiple implementation subagents in parallel (conflicts)
|
- Dispatch multiple implementation subagents in parallel (conflicts)
|
||||||
- Make subagent read plan file (provide full text instead)
|
- Make subagent read plan file (provide full text instead)
|
||||||
|
|||||||
@@ -13,8 +13,6 @@ Assume they are a skilled developer, but know almost nothing about our toolset o
|
|||||||
|
|
||||||
**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.
|
**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."
|
**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.
|
**Context:** If working in an isolated worktree, it should have been created via the `superpowers:using-git-worktrees` skill at execution time.
|
||||||
@@ -37,15 +35,6 @@ 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.
|
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
|
## Bite-Sized Task Granularity
|
||||||
|
|
||||||
**Each step is one action (2-5 minutes):**
|
**Each step is one action (2-5 minutes):**
|
||||||
@@ -72,13 +61,6 @@ independently testable deliverable.
|
|||||||
|
|
||||||
**Tech Stack:** [Key technologies/libraries]
|
**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.]
|
|
||||||
|
|
||||||
---
|
---
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -92,12 +74,6 @@ include this section.]
|
|||||||
- Modify: `exact/path/to/existing.py:123-145`
|
- Modify: `exact/path/to/existing.py:123-145`
|
||||||
- Test: `tests/exact/path/to/test.py`
|
- 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**
|
- [ ] **Step 1: Write the failing test**
|
||||||
|
|
||||||
```python
|
```python
|
||||||
@@ -173,7 +149,7 @@ After saving the plan, offer execution choice:
|
|||||||
|
|
||||||
**If Subagent-Driven chosen:**
|
**If Subagent-Driven chosen:**
|
||||||
- **REQUIRED SUB-SKILL:** Use superpowers:subagent-driven-development
|
- **REQUIRED SUB-SKILL:** Use superpowers:subagent-driven-development
|
||||||
- Fresh subagent per task + two-stage review
|
- Fresh subagent per task + two-stage review (review fanout scales with the change — see that skill's Proportionality rule)
|
||||||
|
|
||||||
**If Inline Execution chosen:**
|
**If Inline Execution chosen:**
|
||||||
- **REQUIRED SUB-SKILL:** Use superpowers:executing-plans
|
- **REQUIRED SUB-SKILL:** Use superpowers:executing-plans
|
||||||
|
|||||||
Reference in New Issue
Block a user