task-pipeline-skill 0.12.0 → 0.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/CHANGELOG.md +316 -0
  2. package/LICENSE +47 -0
  3. package/README.md +155 -83
  4. package/cursor/rules/task-pipeline.mdc +88 -15
  5. package/package.json +3 -3
  6. package/plugins/task-pipeline/.claude-plugin/plugin.json +15 -4
  7. package/plugins/task-pipeline/commands/task-pipeline.md +8 -6
  8. package/plugins/task-pipeline/skills/task-pipeline/SKILL.md +80 -33
  9. package/plugins/task-pipeline/skills/task-pipeline/pipeline.example.json +30 -15
  10. package/plugins/task-pipeline/skills/task-pipeline/references/acceptance.md +118 -0
  11. package/plugins/task-pipeline/skills/task-pipeline/references/artifacts.md +29 -7
  12. package/plugins/task-pipeline/skills/task-pipeline/references/brainstorm.md +106 -0
  13. package/plugins/task-pipeline/skills/task-pipeline/references/build.md +364 -0
  14. package/plugins/task-pipeline/skills/task-pipeline/references/companion-skills.md +61 -29
  15. package/plugins/task-pipeline/skills/task-pipeline/references/conventions.md +11 -1
  16. package/plugins/task-pipeline/skills/task-pipeline/references/decomposition.md +139 -0
  17. package/plugins/task-pipeline/skills/task-pipeline/references/grill.md +44 -6
  18. package/plugins/task-pipeline/skills/task-pipeline/references/loop-guard.md +100 -0
  19. package/plugins/task-pipeline/skills/task-pipeline/references/planning.md +193 -0
  20. package/plugins/task-pipeline/skills/task-pipeline/references/review.md +173 -0
  21. package/plugins/task-pipeline/skills/task-pipeline/references/spec.md +144 -0
  22. package/plugins/task-pipeline/skills/task-pipeline/references/stages.md +151 -26
  23. package/plugins/task-pipeline/skills/task-pipeline/references/tdd.md +110 -0
  24. package/plugins/task-pipeline/skills/task-pipeline/templates/README.md +5 -3
  25. package/plugins/task-pipeline/skills/task-pipeline/templates/brief.md +26 -1
  26. package/plugins/task-pipeline/skills/task-pipeline/templates/carryover.md +36 -0
@@ -1,18 +1,19 @@
1
1
  ---
2
2
  name: task-pipeline
3
- description: "Use when running a substantial task through the full end-to-end delivery pipeline — an up-front intake grill that expands the request into a complete brief, then docs study, brainstorm, spec, plan, subagent-driven build, test suite, lint/deploy, post-deploy log check, and docs/wiki sync — as gated stages built on the superpowers skills. Use when the user wants to run a task through the pipeline, asks for the full cycle / полный цикл / прогони по конвейеру, invokes /task-pipeline, or starts any substantial feature, fix, or build that should follow the disciplined cycle rather than ad-hoc coding. The intake grill is mandatory — it front-loads every decision, including the per-stage autonomy sweep, so stages 1→9 run without mid-flight questions; recommends super-ux for any user-facing task; confirms one model up front (most capable available, never a hardcoded id); reads host-project conventions for deploy/docs/wiki so it stays project-agnostic."
3
+ description: "Use when running a substantial task through the full end-to-end delivery pipeline — an up-front intake grill that expands the request into a complete brief, then docs study, brainstorm, spec, plan, subagent-driven build, tests, lint/deploy, post-deploy log check, docs/wiki sync and acceptance — as gated stages whose doctrine is built entirely into this skill (no required companion skills). Triggers - 'run this through the pipeline' / 'прогони по конвейеру', 'the full cycle' / 'полный цикл', /task-pipeline, or any substantial feature, fix, or build that should follow the disciplined cycle rather than ad-hoc coding. The intake grill is mandatory - it front-loads every decision, including the per-stage autonomy sweep, so stages 1→10 run without mid-flight questions; recommends super-ux for user-facing work; confirms one model up front (most capable available, never a hardcoded id); reads host-project conventions for deploy/docs/wiki so it stays project-agnostic."
4
4
  ---
5
5
 
6
6
  # task-pipeline
7
7
 
8
- Thin orchestrator. Runs a task through **gated stages**, each built on an
9
- existing skill. Keeps the main thread disciplined: no stage advances until its
10
- gate passes; the whole run uses one model, confirmed before it starts.
8
+ Self-contained orchestrator. Runs a task through **gated stages**, each carrying its
9
+ own built-in doctrine — no companion plugin required. Keeps the main thread
10
+ disciplined: no stage advances until its gate passes; the whole run uses one model,
11
+ confirmed before it starts.
11
12
 
12
13
  **Grill first, then run autonomously.** A one-line task ("make me feature X") is
13
14
  never enough to finish without a human in the loop. Stage 0 is **mandatory**: a
14
15
  relentless, one-question-at-a-time interview that resolves every decision branch
15
- *and* sweeps stages 1→9 for anything that would stop the run later — then locks
16
+ *and* sweeps stages 1→10 for anything that would stop the run later — then locks
16
17
  the answers into a brief. Autonomy is bought there or not at all; every question
17
18
  skipped at stage 0 comes back as an interruption at stage 6.
18
19
 
@@ -21,21 +22,38 @@ a machine-readable config — an ordered list of stages, each with `skills[]` (t
21
22
  skills/agents that run it) and a `gate {type, check}`. The schema is the universal
22
23
  contract; it imposes **no** specific stages, skills, or gate assignments.
23
24
  [`pipeline.example.json`](pipeline.example.json) is a **copy-and-rewrite example**
24
- that encodes this plugin's own default flow (stage 0 intake + the 1→9 stages
25
+ that encodes this plugin's own default flow (stage 0 intake + the 1→10 stages
25
26
  tabled below) and an optional, toggleable `release` block. Any project replaces it
26
27
  wholesale — any number of stages, run by its own skills/agents, with its own gate
27
28
  types (see *Bring your own skills*). Each gate has a **type**: `auto` (the
28
29
  orchestrator verifies the `check` itself, pass/fail) or `manual` (wait for an
29
30
  explicit operator go); which stages are manual is the operator's call.
30
31
 
31
- ## Prerequisite
32
-
33
- Requires the **superpowers** skills. Preflight: confirm `superpowers:brainstorming`,
34
- `superpowers:writing-plans`, `superpowers:subagent-driven-development`,
35
- `superpowers:using-git-worktrees`, `superpowers:test-driven-development` resolve.
36
- If missing → tell the operator to install from **https://github.com/obra/superpowers**
37
- (`/plugin marketplace add obra/superpowers` → `/plugin install superpowers@superpowers`)
38
- and stop.
32
+ ## Prerequisites — none required
33
+
34
+ **Every stage's doctrine ships inside this skill.** There is no required companion
35
+ plugin, nothing to resolve at preflight, no version skew with someone else's repo,
36
+ and no stage that can fail because a dependency is missing:
37
+
38
+ | Stage | Built-in doctrine |
39
+ |---|---|
40
+ | 0 Intake grill | [`references/grill.md`](references/grill.md) |
41
+ | 2 Brainstorm | [`references/brainstorm.md`](references/brainstorm.md) |
42
+ | 2 Decompose (platforms only) | [`references/decomposition.md`](references/decomposition.md) |
43
+ | 3 Spec | [`references/spec.md`](references/spec.md) |
44
+ | 4 Plan | [`references/planning.md`](references/planning.md) |
45
+ | 5 Build (worktree, subagents, fix loop) | [`references/build.md`](references/build.md) + [`references/review.md`](references/review.md) |
46
+ | 5–6 TDD + suite gate | [`references/tdd.md`](references/tdd.md) |
47
+ | 10 Acceptance (REQ close-out) | [`references/acceptance.md`](references/acceptance.md) |
48
+ | any repeating loop | [`references/loop-guard.md`](references/loop-guard.md) |
49
+
50
+ **Optional bridge.** If the operator already runs an equivalent skill set (e.g.
51
+ `superpowers:brainstorming` / `writing-plans` / `subagent-driven-development` /
52
+ `using-git-worktrees` / `test-driven-development`), it can be mapped onto stages
53
+ 2/4/5/6 in `pipeline.json` → `skills[]`. That is a **substitution, never a
54
+ requirement**: the built-in doctrine is normative, the gates in
55
+ `references/stages.md` still govern, and nothing detects, recommends or waits for
56
+ an external provider.
39
57
 
40
58
  **super-ux — recommended for ANY user-facing task.** The moment a task implies a
41
59
  user interface (web / mobile / CLI / TUI — a screen, a command, a visible
@@ -63,6 +81,11 @@ no "clear enough task" exemption, no starting stage 1 without a committed,
63
81
  operator-confirmed brief. The one sanctioned bypass is the entry-from-super-ux
64
82
  short-circuit, and even that demands a scope confirmation.
65
83
 
84
+ It also produces the **REQ spine**: the request as an addressable list of
85
+ requirements, each naming how it will be verified. Stages 3–5 trace to those ids,
86
+ stage 4's gate is a mechanical set-comparison against them, and **stage 10 accounts
87
+ for every one** — which is what turns the pipeline from a funnel into a circle.
88
+
66
89
  Two things the grill does beyond clarifying the request:
67
90
  - **Domain awareness.** It reads the project's own `CONTEXT.md` / `docs/adr/` and
68
91
  holds the operator to them — challenging terms that conflict with the glossary,
@@ -70,7 +93,7 @@ Two things the grill does beyond clarifying the request:
70
93
  flagging where the code contradicts what was just said. Resolved terms are
71
94
  written to `CONTEXT.md` as they land; genuinely hard-to-reverse decisions get an
72
95
  ADR.
73
- - **The autonomy sweep.** It pre-resolves what would otherwise stop stages 1→9
96
+ - **The autonomy sweep.** It pre-resolves what would otherwise stop stages 1→10
74
97
  mid-flight (test/lint/deploy commands, branch policy, log locations, docs
75
98
  targets, the model decision, deploy authorization). Autonomy is bought here or
76
99
  not at all — an unasked question is a scheduled interruption.
@@ -79,33 +102,49 @@ Two things the grill does beyond clarifying the request:
79
102
 
80
103
  1. Restate the task in one line. Create a **TaskList: one task per stage, starting
81
104
  with stage 0** (survives context loss; lets you resume). Then run the
82
- **companion preflight** (`references/companion-skills.md`): detect which
83
- companion skills resolve and emit ONE block covering both the companions —
84
- install the required/recommended ones (superpowers always; super-ux for UI
85
- tasks) — **and the model decision** (`references/model-tiering.md`): recommend
105
+ **companion preflight** (`references/companion-skills.md`): the stage doctrine
106
+ is built in, so this only checks the *optional* companions (super-ux for UI
107
+ tasks, context7, wiki-update) and emits ONE block covering them
108
+ **and the model decision** (`references/model-tiering.md`): recommend
86
109
  the most capable model available, let the operator confirm or override, record
87
110
  it. Ask once, here.
88
111
  2. **Run stage 0 (Intake grill) — always, no exceptions.** Grill until shared
89
- understanding is reached, the autonomy sweep is covered and the brief is locked
112
+ understanding is reached, the autonomy sweep is covered, **the REQ table is
113
+ written (one row per independently verifiable deliverable, each naming its
114
+ check)** and the brief is locked
90
115
  (`references/stages.md` → 0). Do not touch stage 1 before the brief is
91
116
  committed and confirmed. **Entered from super-ux?**
92
117
  (a validated `docs/ux/` chain and/or a `docs/ux/plans/…` fix plan already
93
118
  exists — super-ux's `/ux` hands off here) → don't re-grill or rebuild the UX
94
119
  chain: just check it's OK (`/ux-lint` green), confirm scope in one line, and
95
120
  skip ahead to the first stage with real work (see `references/stages.md` → 0).
96
- 3. Walk stages 1→9 on the model confirmed at preflight. **Don't re-ask about the
121
+ 3. Walk stages 1→10 on the model confirmed at preflight. **Don't re-ask about the
97
122
  model at every boundary** — only when the operator recorded a per-stage override
98
123
  map and the next stage's entry differs (`references/model-tiering.md`).
124
+ **Is the brief a platform rather than a change?** Then stage 2 also cuts it into
125
+ modules (`references/decomposition.md`) and stages 3→10 run **per module** in
126
+ build order, one brick at a time — stages 0–2 run once, and the module map's
127
+ status column is the resume point (`references/stages.md` → *The program loop*).
99
128
  4. Do **not** advance until the stage **gate** passes (`references/stages.md`).
100
129
  Honor the gate **type**: for `auto`, verify the gate's `check` yourself and
101
130
  stop/return on fail; for `manual`, present the result and **wait for the
102
131
  operator's explicit "continue"/go** — an auto gate never substitutes for a
103
132
  required manual approval.
104
133
  5. Cross-cutting, every stage: **answer from the brief's autonomy section rather
105
- than asking again** — it was grilled precisely so you wouldn't have to; task
134
+ than asking again** — it was grilled precisely so you wouldn't have to;
135
+ **anything deferred, dropped or left half-done goes into the carry-over ledger
136
+ the moment it's said** — deferred out loud is forgotten; **never narrow the task
137
+ silently** — the REQ list is frozen, adding is free, removing needs the
138
+ operator's explicit agreement; **when a loop starts undoing an earlier pass —
139
+ the same file edited twice for the same reason, a closed finding coming back, a
140
+ third entry into one stage — stop and run the loop guard**
141
+ (`references/loop-guard.md`): name the two shapes, escalate to the layer that
142
+ owns the conflict, re-plan the check as an ordered list, then go through it one
143
+ item at a time; task
106
144
  tracker + conventional commits per host conventions; worktree isolation for the
107
- build; honest degradation (never claim a failed/skipped step succeeded);
108
- outward/irreversible actions (deploy, publish, repo create) need explicit
145
+ build, integrated back per the brief's branch policy before stage 7; honest
146
+ degradation (never claim a failed/skipped step succeeded);
147
+ outward/irreversible actions (deploy, publish, repo create, opening a PR) need explicit
109
148
  operator go — or a **specific** standing authorization recorded in the brief
110
149
  (named target + preconditions; a vague "do everything" is not one).
111
150
 
@@ -118,14 +157,15 @@ capable available — see `references/model-tiering.md`).
118
157
  |---|---|---|---|---|
119
158
  | 0 | Intake grill — **mandatory** | built in: [`references/grill.md`](references/grill.md) | shared understanding reached; autonomy sweep covered; brief locked + confirmed | manual |
120
159
  | 1 | Docs study | `context7` (resolve-library-id → get-library-docs) / `context7-docs` | contracts grounded on fetched docs | auto |
121
- | 2 | Brainstorm | `superpowers:brainstorming` + **UI detection** | design approved; UI verdict recorded | manual |
122
- | 3 | Spec | **UI → super-ux chain first** (`/ux` → `ux-foundation` CJM → `ux-flows` screens → `ux-scenarios` → `/ux-lint`), then spec `docs/superpowers/specs/…-design.md` | committed + reviewed; UI: chain validated, linter green, scenarios/`SCR-` traced | manual |
123
- | 4 | Plan | `superpowers:writing-plans` → `docs/superpowers/plans/…md` | parallel-ready, DoD per task | auto |
124
- | 5 | Dev | `superpowers:using-git-worktrees` + `superpowers:subagent-driven-development` (TDD) | tasks DONE, TDD green per task | auto |
125
- | 6 | Tests | host test runner + `superpowers:test-driven-development` | full suite green; new/changed code covered | auto |
160
+ | 2 | Brainstorm + decompose | built in: [`references/brainstorm.md`](references/brainstorm.md) + **UI detection** + [`references/decomposition.md`](references/decomposition.md) for platforms | design approved; UI verdict recorded; every REQ answered; platform: module map approved | manual |
161
+ | 3 | Spec | built in: [`references/spec.md`](references/spec.md) — **UI → super-ux chain first** (`/ux` → `ux-foundation` CJM → `ux-flows` screens → `ux-scenarios` → `/ux-lint`), then spec `docs/superpowers/specs/…-design.md` | committed + reviewed; UI: chain validated, linter green, scenarios/`SCR-` traced | manual |
162
+ | 4 | Plan | built in: [`references/planning.md`](references/planning.md) → `docs/superpowers/plans/…md` | parallel-ready, DoD per task | auto |
163
+ | 5 | Dev | built in: [`references/build.md`](references/build.md) (worktree → subagent per task → review loop → integrate) + [`references/tdd.md`](references/tdd.md) | tasks DONE, TDD green per task, branch integrated per the brief | auto |
164
+ | 6 | Tests | host test runner + built-in [`references/tdd.md`](references/tdd.md) | full suite green; new/changed code covered | auto |
126
165
  | 7 | Lint + deploy | host lint → deploy per host convention | lint clean + suite green before deploy; deploy needs a go (or the brief's specific standing authorization) | manual |
127
166
  | 8 | Post-deploy | tail deploy logs / health-check | clean boot or honest degradation report | auto |
128
167
  | 9 | Docs + wiki | host module docs/runbook rules → `wiki-update` | docs synced, wiki synced | auto |
168
+ | 10 | **Acceptance** | built in: [`references/acceptance.md`](references/acceptance.md) | every REQ accounted for with evidence; ledger has no unresolved row; operator signs off | manual |
129
169
 
130
170
  ## Model — ask once, at preflight
131
171
 
@@ -145,8 +185,8 @@ pinned to the confirmed model automatically. Detail: `references/model-tiering.m
145
185
 
146
186
  ## Bring your own skills
147
187
 
148
- The stages above (stage 0 intake + 1→9) are the **example** flow (grill +
149
- superpowers + a super-ux UX track for user-facing tasks + host conventions). A
188
+ The stages above (stage 0 intake + 1→10) are the **example** flow (this skill's
189
+ built-in doctrine + a super-ux UX track for user-facing tasks + host conventions). A
150
190
  host project owns its pipeline: copy `pipeline.example.json` → `pipeline.json`,
151
191
  then define its **own** stages (any count), point each stage's `skills[]` at the
152
192
  skills/agents its environment resolves, set each `gate.type` (`auto`/`manual`) to
@@ -157,10 +197,17 @@ automation is on — `pipeline.schema.json` is the only contract.
157
197
  ## References
158
198
 
159
199
  - `pipeline.schema.json` — the universal pipeline config contract (stages + release)
160
- - `pipeline.example.json` — this plugin's default flow (stage 0 + 1→9) + release, as config
200
+ - `pipeline.example.json` — this plugin's default flow (stage 0 + 1→10) + release, as config
161
201
  - `references/grill.md` — the built-in stage-0 grill: loop, domain awareness, autonomy sweep
202
+ - `references/acceptance.md` — the built-in stage-10 close-out: REQ coverage, evidence, sign-off
203
+ - `references/brainstorm.md` — stage 2: design dialogue, approaches, UI detection, hard gate
204
+ - `references/spec.md` — stage 3: UX track order, the spec contract, self-review, review gate
205
+ - `references/planning.md` — stage 4: zero-context plan format, parallel groups, no placeholders
206
+ - `references/build.md` — stage 5: isolation, ledger, subagent task loop, fix loop, final review
207
+ - `references/review.md` — the review rubric, diff packages and the three reviewer prompts
208
+ - `references/tdd.md` — stages 5–6: the iron law, red/green/refactor, the suite gate
162
209
  - `references/stages.md` — per-stage detail + exact gate criteria + gate types
163
210
  - `references/model-tiering.md` — model map, ids, the `/model` reminder mechanic, override
164
- - `references/conventions.md` — how stages 6–9 read the host project's CLAUDE.md
211
+ - `references/conventions.md` — how stages 6–10 read the host project's CLAUDE.md
165
212
  - `references/companion-skills.md` — companion skills, install lines, preflight recommendation
166
213
  - `references/artifacts.md` — the canonical document/artifact layout per stage
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "./pipeline.schema.json",
3
3
  "version": 1,
4
- "_note": "EXAMPLE ONLY — copy this file, rename to pipeline.json in your project, and rewrite it. This particular example encodes the plugin's own default flow (an up-front intake grill + superpowers + a super-ux UX track for user-facing tasks); it is NOT a fixed contract. Your project defines its own stages (any count), each executed by your own skills/agents, with your own gate types. Stage models use provider-agnostic tokens ('default' = the model confirmed for the run, 'inherit' = whatever the operator is on) — never hardcode a vendor model id, it goes stale. The universal contract is pipeline.schema.json; test/validate.py checks this example against it. gate.type: auto = orchestrator verifies the check itself (pass/fail); manual = wait for an explicit operator go. Which stages are manual vs auto is the operator's decision, not the plugin's.",
4
+ "_note": "EXAMPLE ONLY — copy this file, rename to pipeline.json in your project, and rewrite it. This particular example encodes the plugin's own default flow (an up-front intake grill + this skill's own built-in stage doctrine + a super-ux UX track for user-facing tasks); it is NOT a fixed contract. Your project defines its own stages (any count), each executed by your own skills/agents, with your own gate types. Stage models use provider-agnostic tokens ('default' = the model confirmed for the run, 'inherit' = whatever the operator is on) — never hardcode a vendor model id, it goes stale. The universal contract is pipeline.schema.json; test/validate.py checks this example against it. gate.type: auto = orchestrator verifies the check itself (pass/fail); manual = wait for an explicit operator go. Which stages are manual vs auto is the operator's decision, not the plugin's. Any repeating loop in a run (fix loop, a re-entered stage, the per-module program loop) is bound by the loop guard: log every repeat touch, stop on oscillation, escalate to the layer that owns the conflict, then re-check in a planned order.",
5
5
  "stages": [
6
6
  {
7
7
  "id": 0,
@@ -13,7 +13,7 @@
13
13
  ],
14
14
  "gate": {
15
15
  "type": "manual",
16
- "check": "MANDATORY stage — never skipped (only sanctioned bypass: the entry-from-super-ux short-circuit). The grill is built into the skill (references/grill.md) — no companion to install. Per its contract: one question at a time, a recommended answer with each, explore the codebase/docs before asking, depth-first, contradictions reconciled; domain awareness applied (terms challenged against CONTEXT.md, ADRs recorded for hard-to-reverse calls). The autonomy sweep is covered — every stage 1-9 has its blockers pre-resolved (docs sources, branch/tracker policy, test + lint commands, deploy target and authorization, log/health locations, docs+wiki targets) or is explicitly marked 'stop and ask here'. UI verdict recorded (arms super-ux); model decision recorded. All of it locked into a committed task brief the operator confirms before stage 1."
16
+ "check": "MANDATORY stage — never skipped (only sanctioned bypass: the entry-from-super-ux short-circuit). The grill is built into the skill (references/grill.md) — no companion to install. Per its contract: one question at a time, a recommended answer with each, explore the codebase/docs before asking, depth-first, contradictions reconciled; domain awareness applied (terms challenged against CONTEXT.md, ADRs recorded for hard-to-reverse calls). The autonomy sweep is covered — every stage 1-10 has its blockers pre-resolved (docs sources, branch/tracker policy, test + lint commands, deploy target and authorization, log/health locations, docs+wiki targets) or is explicitly marked 'stop and ask here'. UI verdict recorded (arms super-ux); model decision recorded. All of it locked into a committed task brief the operator confirms before stage 1. The REQ table is written — one row per independently verifiable deliverable, each naming how it is verified — and frozen: adding later is free, removing or narrowing needs the operator's explicit agreement. The carry-over ledger is seeded."
17
17
  }
18
18
  },
19
19
  {
@@ -33,14 +33,15 @@
33
33
  {
34
34
  "id": 2,
35
35
  "state": "brainstorm",
36
- "name": "Brainstorm",
36
+ "name": "Brainstorm + decompose",
37
37
  "model": "default",
38
38
  "skills": [
39
- "superpowers:brainstorming"
39
+ "task-pipeline:brainstorm",
40
+ "task-pipeline:decompose"
40
41
  ],
41
42
  "gate": {
42
43
  "type": "manual",
43
- "check": "the user approves the design AND the UI verdict is recorded (does the task touch a user-facing surface — web/mobile/CLI/TUI? this arms the stage-3 UX track)"
44
+ "check": "the user approves the design AND the UI verdict is recorded (does the task touch a user-facing surface — web/mobile/CLI/TUI? this arms the stage-3 UX track). Every REQ is answered by the design, or explicitly dropped by the operator into the carry-over ledger. For a platform (several independent capabilities or shippable surfaces): the module map specs/<topic>-modules.md is committed and approved — brick criteria met or excepted in writing, dependency graph acyclic, build order topological with the walking skeleton first, every REQ mapped to exactly one module, cross-module contracts named with their owner. Single-module work records 'single module: <name>' instead — a skipped decomposition is a recorded decision, never an omission"
44
45
  }
45
46
  },
46
47
  {
@@ -52,11 +53,11 @@
52
53
  "super-ux:ux-foundation",
53
54
  "super-ux:ux-flows",
54
55
  "super-ux:ux-scenarios",
55
- "superpowers:brainstorming"
56
+ "task-pipeline:spec"
56
57
  ],
57
58
  "gate": {
58
59
  "type": "manual",
59
- "check": "UX track ran FIRST for user-facing tasks (/ux -> ux-foundation CJM -> ux-flows screens -> ux-scenarios -> /ux-lint green); spec committed and user-reviewed; every user-facing requirement traces to a scenario ID"
60
+ "check": "UX track ran FIRST for user-facing tasks (/ux -> ux-foundation CJM -> ux-flows screens -> ux-scenarios -> /ux-lint green); spec committed and user-reviewed; every user-facing requirement traces to a scenario ID. Every spec section carries covers: REQ-... and every REQ appears in at least one section."
60
61
  }
61
62
  },
62
63
  {
@@ -65,11 +66,11 @@
65
66
  "name": "Plan",
66
67
  "model": "default",
67
68
  "skills": [
68
- "superpowers:writing-plans"
69
+ "task-pipeline:plan"
69
70
  ],
70
71
  "gate": {
71
72
  "type": "auto",
72
- "check": "every spec requirement maps to a task; no placeholders; parallel-group tasks share no files; UI tasks name the scenario ID(s) and SCR- screen(s) they implement in their DoD"
73
+ "check": "SET EQUALITY: the REQ ids in the brief equal the union of Implements: across plan tasks — a non-empty difference fails the gate and is reported as the explicit list of dropped requirements. Plus: every spec requirement maps to a task; no placeholders; names and types consistent across tasks; every task carries a verifiable DoD; parallel-group tasks share no files; UI tasks name the scenario ID(s) and SCR- screen(s) they implement in their DoD"
73
74
  }
74
75
  },
75
76
  {
@@ -78,12 +79,12 @@
78
79
  "name": "Dev",
79
80
  "model": "default",
80
81
  "skills": [
81
- "superpowers:using-git-worktrees",
82
- "superpowers:subagent-driven-development"
82
+ "task-pipeline:build",
83
+ "task-pipeline:review"
83
84
  ],
84
85
  "gate": {
85
86
  "type": "auto",
86
- "check": "all plan tasks DONE (two-stage review: spec compliance, then code quality); full test suite green"
87
+ "check": "all plan tasks DONE — the per-task review returns three verdicts (spec compliance, REQ satisfied, code quality); every finding fixed or parked with a written ruling; no task left BLOCKED; full test suite green; the branch integrated per the brief's branch policy (base synced, suite green on the result, worktree removed) — or the operator's explicit 'leave it unmerged' recorded. Every parked finding and implementer concern is harvested into the carry-over ledger before the scratch workspace is deleted."
87
88
  }
88
89
  },
89
90
  {
@@ -92,11 +93,12 @@
92
93
  "name": "Tests",
93
94
  "model": "default",
94
95
  "skills": [
95
- "superpowers:test-driven-development"
96
+ "host:test-runner",
97
+ "task-pipeline:tdd"
96
98
  ],
97
99
  "gate": {
98
100
  "type": "auto",
99
- "check": "full suite green (not just new tests); new/changed code covered; no skip/xfail smuggling a red suite past the gate"
101
+ "check": "full suite green (not just new tests); new/changed code covered including failure paths; no skip/xfail smuggling a red suite past the gate; tests assert real behavior, not mock behavior"
100
102
  }
101
103
  },
102
104
  {
@@ -110,7 +112,7 @@
110
112
  ],
111
113
  "gate": {
112
114
  "type": "manual",
113
- "check": "lint clean and full suite green before deploy; deploy is outward and needs explicit operator go — or the specific standing authorization recorded in the stage-0 brief (named target + named preconditions; a vague 'do everything' is not one)"
115
+ "check": "lint clean and full suite green before deploy; deploy is outward and needs explicit operator go — or the specific standing authorization recorded in the stage-0 brief (named target + named preconditions; a vague 'do everything' is not one). No REQ is still open; a partial ships only with the operator's explicit acceptance."
114
116
  }
115
117
  },
116
118
  {
@@ -139,6 +141,19 @@
139
141
  "type": "auto",
140
142
  "check": "docs in sync with code in the same change; wiki synced; dangling links fixed"
141
143
  }
144
+ },
145
+ {
146
+ "id": 10,
147
+ "state": "acceptance",
148
+ "name": "Acceptance",
149
+ "model": "default",
150
+ "skills": [
151
+ "task-pipeline:acceptance"
152
+ ],
153
+ "gate": {
154
+ "type": "manual",
155
+ "check": "Close the circle: every REQ in the brief has a status (verified / partial / deferred / dropped) — none unknown; every verified carries evidence (a passing test name, file:line, a command and its output, or a scenario ID) — 'done' without evidence is downgraded to partial, not upgraded; every partial names what is missing and where it is tracked; every deferred/dropped has the operator's agreement and, for deferred, a tracker entry; no carry-over row is left unresolved; and the operator answers the closing question — here is what you asked for, here is what shipped, here is what is deferred, what is missing? — and signs off"
156
+ }
142
157
  }
143
158
  ],
144
159
  "release": {
@@ -0,0 +1,118 @@
1
+ # Acceptance — stage 10, built in
2
+
3
+ The pipeline is a funnel: every gate before this one asks *"is this artifact
4
+ good?"* — is the spec committed, does the plan parallelize, is the suite green.
5
+ None of them asks *"does this still contain everything that was asked for?"*
6
+
7
+ That is this stage's only job: **go back to the brief and account for every
8
+ requirement.** It is what turns the pipeline from a funnel into a circle.
9
+
10
+ ## Why a stage and not a gate
11
+
12
+ The loss this catches doesn't happen inside a stage — it happens **on the seams**.
13
+ Brief → spec → plan → task briefs is four rewrites by a model, and anything not
14
+ carried forward disappears silently because nothing compares the lists. Stage 4's
15
+ gate catches the brief→plan seam mechanically; stage 10 catches everything the
16
+ run itself decided, deferred, or quietly dropped along the way.
17
+
18
+ It runs **last** — after docs and wiki (stage 9), because those are deliverables
19
+ too and a requirement may name them.
20
+
21
+ ## Inputs
22
+
23
+ Read all of them before writing anything:
24
+
25
+ - the brief's **REQ table** (`docs/superpowers/specs/<topic>-brief.md`)
26
+ - the **carry-over ledger** (`…-carryover.md`) — in full, every row
27
+ - the plan and its task statuses
28
+ - git log for the run's branch; the test suite's final output
29
+ - stage 8's post-deploy notes; stage 9's doc/wiki changes
30
+ - for UI tasks: `docs/ux/scenarios.md` statuses and the `/ux-lint` result
31
+
32
+ ## Output — the coverage table
33
+
34
+ Write `docs/superpowers/specs/YYYY-MM-DD-<topic>-acceptance.md`:
35
+
36
+ ```markdown
37
+ # Acceptance — <topic>
38
+
39
+ Run: <branch/commit range> · Date: YYYY-MM-DD
40
+
41
+ | REQ | Requirement | Status | Evidence |
42
+ |---|---|---|---|
43
+ | REQ-001 | CSV export from a report | verified | `test_export_csv` ✓ · `api/export.ts:88` |
44
+ | REQ-002 | Export respects active filters | verified | `test_export_respects_filters` ✓ · SCN-014 PASS |
45
+ | REQ-003 | Button disabled on an empty report | deferred | agreed 2026-07-28 → LIN-482 |
46
+ | REQ-004 | XLSX export | partial | CSV path done; XLSX missing → LIN-483 |
47
+
48
+ ## Carry-over still open
49
+
50
+ - (rows from the ledger whose home is not an issue/backlog/`dropped`)
51
+
52
+ ## What the operator should look at
53
+
54
+ - <anything the run judged, guessed, or deferred that deserves a second opinion>
55
+ ```
56
+
57
+ ### The four statuses
58
+
59
+ | Status | Means | Requires |
60
+ |---|---|---|
61
+ | `verified` | done and demonstrated | **evidence** — a passing test name, `file:line`, command output, or a scenario ID with PASS |
62
+ | `partial` | works for some of what was asked | an explicit list of what's missing + where it's tracked |
63
+ | `deferred` | agreed not to do it now | the operator's agreement **and** a tracker entry |
64
+ | `dropped` | agreed it isn't wanted | the operator's agreement + the reason |
65
+
66
+ There is no fifth status. A requirement nobody can classify is `unknown`, and
67
+ `unknown` fails the gate — that is the whole mechanism.
68
+
69
+ ## Evidence, not assertion
70
+
71
+ **"Done" without evidence is not done.** This is the same rule the review rubric
72
+ and the test-honesty rules apply one level down, raised to the level of intent:
73
+
74
+ - A passing test **name**, not "tests pass".
75
+ - A `file:line`, not "implemented in the export module".
76
+ - A command **and its output**, not "verified manually".
77
+ - For user-facing behavior, the scenario ID and its status.
78
+
79
+ If the evidence for a requirement is "I read the code and it looks right", the
80
+ status is `partial`, not `verified` — say so plainly rather than upgrading it.
81
+
82
+ ## The closing question
83
+
84
+ The table is preparation. The stage exists for the question that follows it, asked
85
+ out loud, with the list in front of the operator:
86
+
87
+ > Here's what you asked for, here's what shipped, here's what's deferred and where
88
+ > it lives. **What's missing?**
89
+
90
+ Ask it even when the table is all green. The operator holds context the brief
91
+ never captured, and this is the cheapest moment in the whole run to hear it. An
92
+ answer here becomes new REQ rows or new ledger entries — not a new argument about
93
+ whether the run was finished.
94
+
95
+ ## GATE (manual)
96
+
97
+ All of:
98
+
99
+ 1. **Every REQ has a status** — none `unknown`, none blank.
100
+ 2. **Every `verified` carries evidence** of the kind above.
101
+ 3. **Every `partial` names what's missing** and where it's tracked.
102
+ 4. **Every `deferred` / `dropped` has the operator's agreement** recorded (in the
103
+ ledger or here) and, for `deferred`, a tracker entry.
104
+ 5. **No carry-over row is left `unresolved`** — every one has a home.
105
+ 6. **The operator answers the closing question** and signs off.
106
+
107
+ Manual by design. An automated check can prove the table is *well-formed*; only
108
+ the person who asked can confirm it is *what they asked for*. Do not let a green
109
+ table substitute for that answer.
110
+
111
+ ## When the answer is "something's missing"
112
+
113
+ Don't argue and don't re-litigate the gates. Add the missing thing as a new REQ
114
+ row (with its check) or a ledger entry, then say plainly what it costs: a fix now,
115
+ or a tracked follow-up. Both are legitimate outcomes of this stage. Closing the
116
+ run with a known gap is fine **if the gap is written down** — closing it with the
117
+ gap only in someone's memory is the failure mode this whole spine exists to
118
+ prevent.
@@ -15,7 +15,10 @@ docs/
15
15
  superpowers/
16
16
  specs/
17
17
  YYYY-MM-DD-<topic>-brief.md # stage 0 — locked intake brief (grill output)
18
- YYYY-MM-DD-<topic>-design.md # stage 3 — the spec (locks shared contracts)
18
+ YYYY-MM-DD-<topic>-carryover.md # stage 0 seeds it; EVERY stage appends; stage 10 reads it
19
+ YYYY-MM-DD-<topic>-modules.md # stage 2 — module map + build order (platforms only)
20
+ YYYY-MM-DD-<topic>-design.md # stage 3 — the spec / module dossier (locks shared contracts)
21
+ YYYY-MM-DD-<topic>-acceptance.md # stage 10 — REQ coverage table + evidence
19
22
  plans/
20
23
  YYYY-MM-DD-<topic>.md # stage 4 — the implementation plan
21
24
  ux/ # super-ux, UI tasks only (see companion-skills.md)
@@ -29,16 +32,33 @@ docs/
29
32
  ```
30
33
 
31
34
  Naming: date-prefixed `YYYY-MM-DD-<topic>` slugs, one topic per file, kebab-case.
32
- The three superpowers artifacts share the **same `<topic>` slug** so brief →
33
- design → plan is traceable at a glance.
35
+ Brief, carry-over, design, plan and acceptance share the **same `<topic>` slug**, so the chain is traceable
36
+ at a glance.
37
+
38
+ > The `docs/superpowers/` directory name is this pipeline's historical convention
39
+ > (kept so existing projects don't have to migrate) — **not a dependency on any
40
+ > external skill**. A host project may relocate the root via its `CLAUDE.md`; keep
41
+ > the shape, keep the slugs.
42
+
43
+ Loop-bearing runs also keep a **git-ignored** run ledger at `.task-pipeline/run.md` —
44
+ stage-level and program-level repeat touches, one line each, so the loop guard can
45
+ detect churn after a lost context (see [`loop-guard.md`](loop-guard.md)).
46
+
47
+ Stage 5 also creates a **git-ignored** scratch workspace per plan at
48
+ `.task-pipeline/build/<plan-basename>/` — ledger, task briefs, implementer reports,
49
+ review packages. It is deleted when the final review is clean; git history is the
50
+ record (see `build.md`).
34
51
 
35
52
  ## Stage → artifact map
36
53
 
37
54
  | Stage | Writes | Consumed by |
38
55
  |---|---|---|
39
- | 0 Intake | `specs/<topic>-brief.md` (seed from the skill's `templates/brief.md`) | stages 2–4 |
56
+ | 0 Intake | `specs/<topic>-brief.md` — incl. the **REQ table** (seed from `templates/brief.md`) | stages 2–5, 7, 10 |
57
+ | 0→10 all | `specs/<topic>-carryover.md` — append-only ledger (seed from `templates/carryover.md`) | stage 10, in full |
58
+ | 10 Acceptance | `specs/<topic>-acceptance.md` — every REQ with a status and evidence | the operator |
40
59
  | 0 Grill (domain) | `CONTEXT.md`, `docs/adr/NNNN-<slug>.md` — created **lazily**, only when a term resolves or a decision qualifies | stages 2–4 + the repo |
41
- | 3 Spec | `specs/<topic>-design.md` (+ links `docs/ux/*` for UI) | stage 4 |
60
+ | 2 Decompose | `specs/<topic>-modules.md` — module map, build order, contracts, per-module status (platforms only) | stages 3–10, every module's run |
61
+ | 3 Spec | `specs/<topic>-design.md` — module dossier for a decomposed platform (+ links `docs/ux/*` for UI) | stage 4 |
42
62
  | 4 Plan | `plans/<topic>.md` | stage 5 |
43
63
  | 3 UX track | `docs/ux/{foundation,flows,screens,scenarios}.md` | stages 4–9 + `/ux-lint` |
44
64
  | 8 Post-deploy | log/health notes (in the run, not a committed file) | stage 9 |
@@ -55,9 +75,11 @@ plugins/task-pipeline/
55
75
  SKILL.md
56
76
  pipeline.schema.json # generic pipeline contract
57
77
  pipeline.example.json # this plugin's own flow, as config
58
- references/{grill,stages,model-tiering,conventions,artifacts,companion-skills}.md
78
+ references/{grill,brainstorm,decomposition,spec,planning,build,review,tdd,acceptance}.md # built-in stage doctrine
79
+ references/loop-guard.md # cross-cutting: churn detection + break protocol
80
+ references/{stages,model-tiering,conventions,artifacts,companion-skills}.md
59
81
  cursor/rules/task-pipeline.mdc # Cursor channel (self-contained rule)
60
- plugins/task-pipeline/skills/task-pipeline/templates/{brief,context,adr}.md # stage-0 skeletons (ship on every channel)
82
+ plugins/task-pipeline/skills/task-pipeline/templates/{brief,carryover,context,adr}.md # stage-0 skeletons (ship on every channel)
61
83
  bin/task-pipeline.js # npx installer (package task-pipeline-skill)
62
84
  package.json
63
85
  install.sh # POSIX installer
@@ -0,0 +1,106 @@
1
+ # Brainstorm — stage 2, built in
2
+
3
+ The design conversation is **part of this skill**. No companion to install, no
4
+ provider to resolve, nothing to fall back to: this file is the implementation.
5
+
6
+ Stage 0 locked *what* is being built. Stage 2 decides *how*, and stops at an
7
+ approved design — not at code.
8
+
9
+ > Ported, with thanks, from the `brainstorming` skill in
10
+ > [obra/superpowers](https://github.com/obra/superpowers) (MIT — see this repo's
11
+ > `LICENSE` → *Third-party*), rewritten for this pipeline: the brief is the input,
12
+ > the UI verdict is a required output, and the spec write-up moved to stage 3
13
+ > ([`spec.md`](spec.md)).
14
+
15
+ ## The hard gate
16
+
17
+ **No implementation action before the operator approves a design.** No code, no
18
+ scaffolding, no file creation "to see how it'd look", no invoking a
19
+ frontend/backend/build skill. This holds for every task regardless of how simple it
20
+ looks.
21
+
22
+ **"Too simple to need a design" is the trap, not the exception.** A one-function
23
+ utility, a config flip, a copy change — all of them go through this stage. Simple
24
+ tasks are where unexamined assumptions survive longest. The design may be three
25
+ sentences; it still gets presented and approved.
26
+
27
+ ## Input: the brief, not a blank page
28
+
29
+ Read the stage-0 brief first (`…-brief.md`). Everything it locked — scope, users,
30
+ constraints, done-criteria, the autonomy sweep — is **settled**. Re-asking a
31
+ question the grill already answered is the single most common way to waste this
32
+ stage. If the brief and the codebase disagree, that's a contradiction to surface,
33
+ not a question to re-open from scratch.
34
+
35
+ ## The loop
36
+
37
+ 1. **Explore the current state.** Files, module docs, recent commits, the
38
+ conventions the repo already follows. Do this before asking anything.
39
+ 2. **Scope check, early.** If the task actually describes several independent
40
+ subsystems, say so immediately and help decompose it into sub-projects: what the
41
+ independent pieces are, how they relate, what order they get built in. Then
42
+ brainstorm the first one. Each sub-project gets its own spec → plan → build
43
+ cycle. Don't refine details of something that needs splitting first.
44
+ 3. **Questions one at a time.** Never bundle. Multiple choice where it fits, open
45
+ where it doesn't. Purpose, constraints, success criteria — anything the brief
46
+ left at design level.
47
+ 4. **Propose 2–3 approaches with trade-offs**, lead with your recommendation and
48
+ the reason for it. **YAGNI ruthlessly** — strip anything the task doesn't need
49
+ from every option before presenting.
50
+ 5. **Present the design in sections**, each scaled to its complexity (a couple of
51
+ sentences when it's straightforward, up to a few hundred words when it's
52
+ genuinely nuanced). Ask after each section whether it holds. Cover:
53
+ architecture, components, data flow, error handling and degradation, testing.
54
+ 6. **Go back when something doesn't fit.** A revised section beats a design that
55
+ was approved because it was hard to argue with.
56
+
57
+ ## Design for isolation and clarity
58
+
59
+ - Break the system into units with **one clear purpose each**, communicating
60
+ through well-defined interfaces, understandable and testable on their own.
61
+ - For every unit you should be able to answer: what does it do, how is it used,
62
+ what does it depend on?
63
+ - Can a reader understand a unit without reading its internals? Can the internals
64
+ change without breaking consumers? If not, the boundaries need work.
65
+ - Smaller focused files are also what the *implementer* (often a subagent with a
66
+ narrow context) handles reliably. A file growing large is usually a signal it
67
+ does too much.
68
+
69
+ ## Working in an existing codebase
70
+
71
+ - Explore the structure before proposing changes; follow the patterns already
72
+ there.
73
+ - Where existing code genuinely blocks the work — a file that's grown unwieldy,
74
+ tangled responsibilities, an unclear boundary the change has to cross — include
75
+ the targeted improvement in the design, the way a careful developer improves code
76
+ they're working in.
77
+ - Don't propose unrelated refactoring. Anything out of scope goes to the backlog,
78
+ not into this design.
79
+
80
+ ## UI detection — a required output
81
+
82
+ One branch is always: **does this touch a user-facing surface** (web, mobile, CLI,
83
+ TUI — a screen, a command, a visible behavior)? Stage 0 usually answered it; this
84
+ stage confirms it against the design that actually emerged. Record the verdict —
85
+ it arms the stage-3 UX track ([`spec.md`](spec.md) → *UX track*). When it's
86
+ genuinely borderline, record "yes": a false positive costs one extra chain, a false
87
+ negative ships an unspecified interface.
88
+
89
+ ## GATE (manual)
90
+
91
+ The operator approves the design **and** the UI verdict is recorded **and every REQ
92
+ in the brief is answered by the design** — a requirement the design doesn't address
93
+ is either covered now or explicitly dropped by the operator, with the drop written
94
+ into the carry-over ledger. For a platform, the module map
95
+ ([`decomposition.md`](decomposition.md)) is committed and approved as part of this
96
+ same gate. Then, and only then, stage 3 writes it up.
97
+
98
+ ## Rationalizations
99
+
100
+ | Excuse | Reality |
101
+ |---|---|
102
+ | "The brief already says everything" | The brief locks *what*. If it also locked *how*, say so in one line and get the approval anyway — the gate is the point. |
103
+ | "It's a one-line change, design is ceremony" | Then the design is one line. Present it. |
104
+ | "I'll scaffold while they think" | Scaffolding is implementation. The gate is before it, not around it. |
105
+ | "Both approaches are fine, let them pick" | You read the codebase, they didn't. Recommend, then let them override. |
106
+ | "I'll add the extra option now, it's cheap" | YAGNI. Every unused branch is code someone maintains and a test someone writes. |