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
package/README.md CHANGED
@@ -5,17 +5,17 @@
5
5
  [![license](https://img.shields.io/badge/license-MIT-blue)](LICENSE)
6
6
 
7
7
  Full-cycle task delivery pipeline orchestrator for **Claude Code**. One skill that
8
- runs any substantial task through an up-front **intake grill** + **9 gated stages** —
9
- built on the [superpowers](https://github.com/obra/superpowers) skills.
8
+ runs any substantial task through an up-front **intake grill** + **10 gated stages** —
9
+ with every stage's doctrine **built in**: no companion plugin required.
10
10
 
11
11
  ## What it does
12
12
 
13
- `intake grill → docs study → brainstorm → spec → plan → subagent build → tests →
14
- lint/deploy → post-deploy log check → docs/wiki sync`
13
+ `intake grill → docs study → brainstorm + decompose → spec → plan → subagent build →
14
+ tests → lint/deploy → post-deploy log check → docs/wiki sync → acceptance`
15
15
 
16
16
  It **grills you first, always**: stage 0 is mandatory — a one-line task ("make me
17
17
  feature X") is expanded, one question at a time, into a locked brief, and the grill
18
- also sweeps stages 1→9 for anything that would stop the run later. Each stage gates
18
+ also sweeps stages 1→10 for anything that would stop the run later. Each stage gates
19
19
  the next. Every gate is typed — **auto** (the orchestrator verifies it, pass/fail)
20
20
  or **manual** (waits for your go). One model, confirmed before the run starts.
21
21
 
@@ -23,16 +23,17 @@ or **manual** (waits for your go). One model, confirmed before the run starts.
23
23
  |---|---|---|---|
24
24
  | 0 | Intake grill — **mandatory** | shared understanding + autonomy sweep; brief locked | manual |
25
25
  | 1 | Docs study | contracts grounded on current docs | auto |
26
- | 2 | Brainstorm | design approved; UI verdict recorded | manual |
26
+ | 2 | Brainstorm + decompose | design approved; UI verdict recorded; every REQ answered; platform: module map approved | manual |
27
27
  | 3 | Spec | committed + reviewed; UI: super-ux chain validated, linter green | manual |
28
28
  | 4 | Plan | parallel-ready, DoD per task | auto |
29
- | 5 | Dev | tasks DONE, TDD green per task | auto |
29
+ | 5 | Dev | tasks DONE (three review verdicts each), TDD green per task | auto |
30
30
  | 6 | Tests | full suite green, new code covered | auto |
31
31
  | 7 | Lint + deploy | lint clean + suite green before deploy | manual |
32
32
  | 8 | Post-deploy | clean boot / honest degradation | auto |
33
33
  | 9 | Docs + wiki | docs + wiki synced | auto |
34
+ | 10 | **Acceptance** | every REQ accounted for with evidence; operator signs off | manual |
34
35
 
35
- These stages (0 intake + 1→9) are the plugin's **example** flow. It's a machine-readable config
36
+ These stages (0 intake + 1→10) are the plugin's **example** flow. It's a machine-readable config
36
37
  ([`pipeline.example.json`](plugins/task-pipeline/skills/task-pipeline/pipeline.example.json))
37
38
  against a universal contract
38
39
  ([`pipeline.schema.json`](plugins/task-pipeline/skills/task-pipeline/pipeline.schema.json)):
@@ -40,6 +41,35 @@ a host project copies the example to `pipeline.json` and rewrites it with its ow
40
41
  stages (any count), its own `skills[]`, and its own `auto`/`manual` gate types —
41
42
  "bring your own skills". The framework bakes in no fixed stages.
42
43
 
44
+ ## Everything is built in — zero required dependencies
45
+
46
+ The doctrine each stage runs on ships inside the skill. Nothing to install for it,
47
+ nothing to resolve at preflight, no version skew with someone else's repo, and no
48
+ stage that can fail because a plugin is missing:
49
+
50
+ | Stage | Built-in doctrine |
51
+ |---|---|
52
+ | 0 Intake grill | [`references/grill.md`](plugins/task-pipeline/skills/task-pipeline/references/grill.md) — interview loop, domain awareness, autonomy sweep |
53
+ | 2 Brainstorm | [`references/brainstorm.md`](plugins/task-pipeline/skills/task-pipeline/references/brainstorm.md) — approaches, YAGNI, the no-code-before-approval gate |
54
+ | 2 Decompose | [`references/decomposition.md`](plugins/task-pipeline/skills/task-pipeline/references/decomposition.md) — platforms only: brick criteria, module map, build order |
55
+ | 3 Spec | [`references/spec.md`](plugins/task-pipeline/skills/task-pipeline/references/spec.md) — UX-track order, locked contracts, global constraints, self-review |
56
+ | 4 Plan | [`references/planning.md`](plugins/task-pipeline/skills/task-pipeline/references/planning.md) — zero-context tasks, parallel groups, no placeholders |
57
+ | 5 Build | [`references/build.md`](plugins/task-pipeline/skills/task-pipeline/references/build.md) + [`review.md`](plugins/task-pipeline/skills/task-pipeline/references/review.md) — isolation, ledger, subagent loop, review rubric, fix loop |
58
+ | 5–6 TDD | [`references/tdd.md`](plugins/task-pipeline/skills/task-pipeline/references/tdd.md) — the iron law, red/green/refactor, the suite gate |
59
+ | 10 Acceptance | [`references/acceptance.md`](plugins/task-pipeline/skills/task-pipeline/references/acceptance.md) — REQ coverage table, evidence rules, the closing question |
60
+ | any loop | [`references/loop-guard.md`](plugins/task-pipeline/skills/task-pipeline/references/loop-guard.md) — churn detection, caps, the break protocol |
61
+
62
+ **Ported, not depended on.** Stage 0 is adapted from
63
+ [Matt Pocock's `grilling` / `grill-with-docs`](https://github.com/mattpocock/skills)
64
+ and stages 2–6 from the corresponding skills in
65
+ [obra/superpowers](https://github.com/obra/superpowers) — both MIT, both credited in
66
+ [LICENSE](LICENSE) → *Third-party*. Nothing at runtime reaches for either.
67
+
68
+ **Optional bridge:** if you already run an equivalent skill set, map it onto stages
69
+ 2/4/5/6 in your `pipeline.json` → `skills[]`. That's a substitution, never a
70
+ requirement — the gates still govern, and nothing detects, recommends or waits for
71
+ an external provider.
72
+
43
73
  ## Intake grill (stage 0) — mandatory
44
74
 
45
75
  Inspired by [Matt Pocock's grill-me](https://github.com/mattpocock/skills). Before
@@ -64,7 +94,7 @@ decisions that are hard to reverse, surprising without context **and** the resul
64
94
  a real trade-off get an ADR. Both files are created lazily.
65
95
 
66
96
  **Autonomy comes from the sweep.** Beyond the task itself, the grill pre-resolves
67
- everything that would otherwise interrupt stages 1→9: which external libs need docs,
97
+ everything that would otherwise interrupt stages 1→10: which external libs need docs,
68
98
  branch and task-tracker policy, the test command and what "green" means, the lint
69
99
  command, the deploy target and its **authorization**, where logs and health live,
70
100
  which docs and runbooks to update, and the model. Each gets an answer or an explicit
@@ -72,6 +102,80 @@ which docs and runbooks to update, and the model. Each gets an answer or an expl
72
102
  authorization has a hard floor: a standing go counts only if it names the target and
73
103
  the preconditions.
74
104
 
105
+ ## The REQ spine — why nothing falls out the back
106
+
107
+ Every gate before the last one asks *"is this artifact good?"* — none asks *"does
108
+ this still contain everything that was asked for?"* Scope doesn't leak inside a
109
+ stage; it leaks on the **seams**, because brief → spec → plan → task briefs is four
110
+ rewrites and nothing compares the lists.
111
+
112
+ So the grill's second hard output is an addressable **requirement table**: one row
113
+ per independently verifiable deliverable, each naming how it will be verified. A
114
+ requirement you can't say how to verify is a badly-stated requirement — it gets
115
+ split during the grill, not discovered at the end.
116
+
117
+ From there the ids thread through everything:
118
+
119
+ | Where | What it does |
120
+ |---|---|
121
+ | Spec | every section carries `covers: REQ-…` |
122
+ | Plan | every task carries `Implements: REQ-…`; **the gate is set equality** against the brief — a difference is printed as the explicit list of dropped requirements |
123
+ | Build | the implementer's brief quotes the REQ statement verbatim, so it optimises the requirement and not just the instruction |
124
+ | Review | a third verdict beside spec-compliance and code-quality: **does this satisfy its REQ?** |
125
+ | Deploy | no REQ may still be `open`; a `partial` ships only with explicit acceptance |
126
+ | **Acceptance** | every REQ gets `verified` / `partial` / `deferred` / `dropped` — and `verified` requires **evidence**: a passing test name, a `file:line`, a command and its output |
127
+
128
+ Two rules keep it honest. **The list is frozen** — adding mid-run is free, removing
129
+ or narrowing needs your explicit agreement, because silently restating the task
130
+ smaller makes every later gate pass honestly on a shrunken task. And **deferred out
131
+ loud is forgotten** — anything postponed, dropped or half-done goes into an
132
+ append-only carry-over ledger the moment it's said, including implementer concerns
133
+ and non-blocking review findings.
134
+
135
+ Stage 10 closes the circle with the question the pipeline exists to be able to
136
+ answer from a list rather than from memory: *here's what you asked for, here's what
137
+ shipped, here's what's deferred and where it lives — what's missing?*
138
+
139
+ ## Platforms — decomposed into bricks, built one at a time
140
+
141
+ A one-feature task runs the pipeline once. A **platform** — several independent
142
+ capabilities, several separately shippable surfaces, requirements no single
143
+ deliverable satisfies — gets cut into modules at stage 2, before any spec is
144
+ written ([`references/decomposition.md`](plugins/task-pipeline/skills/task-pipeline/references/decomposition.md)).
145
+
146
+ Modules are cut **by capability, never by layer** ("Ordering", "Billing" — not
147
+ "Controllers", "Services"), and a candidate is only a brick when it is
148
+ independently specifiable, buildable and testable, owns its own entities, talks to
149
+ its neighbours through declared contracts only, and can land while leaving the
150
+ system working. The committed module map fixes the build order — **walking skeleton
151
+ first**, then topological, no cycles — and every requirement maps to exactly one
152
+ module.
153
+
154
+ Then stages 3→10 run **per module**: dossier → plan → build → tests → deploy →
155
+ post-deploy → docs → acceptance → next brick. Stages 0–2 run once for the platform,
156
+ and the map's status column is what a resumed session reads to know where it
157
+ stopped. Each module's spec is a full dossier: architecture, entities and
158
+ ownership, contracts in and out with their failure behavior, business rules, edge
159
+ and failure cases, UI/Figma chain, limits, open questions.
160
+
161
+ ## Loop guard — churn is detected, not endured
162
+
163
+ Any repeating pass can start undoing the previous one: two shapes alternating, the
164
+ same file rewritten round after round, a finding that was closed coming back. That
165
+ looks like progress and consumes a run, so it is
166
+ [detected mechanically](plugins/task-pipeline/skills/task-pipeline/references/loop-guard.md):
167
+ every repeat pass logs one line per touched file with **the reason that forced it**
168
+ — a finding id, a failed gate item. "Cleanup" is not a reason.
169
+
170
+ It trips on revert-oscillation, a file edited twice for the same reason, a
171
+ resurrected finding, a third entry into one stage, or two loops editing one file —
172
+ plus hard caps (5 fix rounds per task, 2 re-entries per stage, 3 passes per module).
173
+ On a trip the run **stops editing**, names shape A and shape B with their evidence,
174
+ escalates to the layer that owns the conflict (rubric → operator → plan → spec →
175
+ module map), re-plans the check as an ordered checklist with one verification
176
+ command per item, and goes through it one at a time. A higher-layer conflict is
177
+ never settled inside a lower loop.
178
+
75
179
  ## UX track (user-facing tasks) — super-ux recommended
76
180
 
77
181
  The moment a task touches any user-facing surface (web / mobile / CLI / TUI — a
@@ -88,12 +192,8 @@ before interface.
88
192
 
89
193
  ## Prerequisites
90
194
 
91
- **superpowers** — https://github.com/obra/superpowers
92
-
93
- ```
94
- /plugin marketplace add obra/superpowers
95
- /plugin install superpowers@superpowers
96
- ```
195
+ **None for the pipeline itself** — the doctrine for every stage ships inside the
196
+ skill (see *Everything is built in* above).
97
197
 
98
198
  **super-ux** (only for user-facing tasks) — https://github.com/ssheleg/super-ux
99
199
 
@@ -160,8 +260,9 @@ on the same Claude Code install yields a duplicate skill).
160
260
 
161
261
  ## Use
162
262
 
163
- Say *"run this through the pipeline"* / *"полный цикл"* / *"прогони по конвейеру"*,
164
- or `/task-pipeline`. The skill creates a per-stage TaskList and walks the gates.
263
+ Say *"run this through the pipeline"* or *"the full cycle"*, or invoke
264
+ `/task-pipeline`. The skill creates a per-stage TaskList and walks the gates.
265
+ Russian phrasings (*"полный цикл"*, *"прогони по конвейеру"*) route the same way.
165
266
 
166
267
  ## Model policy
167
268
 
@@ -192,79 +293,50 @@ clean checkout. Copy and adapt it per project; nothing is hardcoded.
192
293
 
193
294
  ## Companion skills
194
295
 
195
- `references/companion-skills.md` lists what powers each stage and how to install
196
- it: **superpowers** (required), **super-ux** (required for user-facing tasks —
197
- install line surfaced on the spot), **context7** (docs stage), **wiki-update**
198
- (stage 9). The stage-0 grill is **not** on that list — it's built into the skill. A
199
- single preflight
200
- block prints which are ready, which to install, and the model recommendation, so you
201
- arm the whole run in one exchange.
296
+ `references/companion-skills.md` separates what's built in (stages 0, 2, 3, 4, 5, 6
297
+ and 10 — nothing to install) from the short optional list: **super-ux** (required only for
298
+ user-facing tasks — install line surfaced on the spot), **context7** (docs stage),
299
+ **wiki-update** (stage 9). A single preflight block prints which are ready, which to
300
+ install, and the model recommendation, so you arm the whole run in one exchange.
202
301
 
203
302
  ## Portability
204
303
 
205
- Stages 6–9 read the host project's `CLAUDE.md` conventions (tests / lint / deploy /
304
+ Stages 6–10 read the host project's `CLAUDE.md` conventions (tests / lint / deploy /
206
305
  docs / wiki) with detection fallbacks, so the skill works in any repo. The
207
306
  canonical artifact layout each stage writes to is fixed in
208
307
  [`references/artifacts.md`](plugins/task-pipeline/skills/task-pipeline/references/artifacts.md).
209
308
 
210
- ## По-русски
211
-
212
- **task-pipeline** — оркестратор полного цикла доставки задачи для Claude Code:
213
- один скилл проводит любую существенную задачу через **интейк-грил + 9 гейтованных
214
- стадий** (изучение доков → брейншторм → спека → план → сборка сабагентами →
215
- тесты → линт/деплой → пост-деплой проверка логов → синк доков/вики), построенных
216
- на скиллах [superpowers](https://github.com/obra/superpowers).
217
-
218
- - **Грил на входе (стадия 0) — обязателен.** Одна строка задачи («сделай фичу X»)
219
- недостаточна для автономной работы, поэтому стадию нельзя пропустить: пайплайн
220
- «допрашивает» оператора — по одному вопросу за ход, с рекомендованным ответом,
221
- изучив код до вопроса — пока все ветки решений не закрыты и не зафиксированы в
222
- брифе. Ни одна стадия 1+ не стартует без закоммиченного подтверждённого брифа.
223
- **Грил встроен в скилл** — ставить нечего: вся доктрина лежит в
224
- `references/grill.md`, без компаньонов, резолва и фолбэков. Портировано из
225
- [grill-with-docs Мэтта Покока](https://github.com/mattpocock/skills) (MIT, см.
226
- `LICENSE` → *Third-party*).
227
- - **Доменная осознанность на гриле.** Пайплайн читает `CONTEXT.md` / `docs/adr/`
228
- проекта и держит оператора в рамках его же языка: ловит термины, конфликтующие с
229
- глоссарием, заменяет размытые слова каноничными, проверяет отношения конкретными
230
- краевыми сценариями, вскрывает расхождения между кодом и только что сказанным.
231
- Разрешённый термин сразу пишется в `CONTEXT.md`; решение, которое трудно
232
- откатить, неочевидно без контекста и стало результатом реального компромисса,
233
- получает ADR. Файлы создаются лениво.
234
- - **Автономию даёт свип по стадиям.** Помимо самой задачи грил заранее закрывает
235
- всё, что иначе остановит стадии 1→9: внешние библиотеки и где их доки, политику
236
- веток и трекер задач, команду тестов и что значит «зелено», команду линта, цель
237
- деплоя и **авторизацию на него**, где живут логи/health, какие доки и раннбуки
238
- обновлять, и модель. По каждому пункту — либо ответ, либо явное «здесь
239
- остановись и спроси»; незаданный вопрос = запланированное прерывание. У
240
- авторизации деплоя жёсткий пол: постоянное «go» засчитывается, только если
241
- названы цель и предусловия.
242
- - Ни одна стадия не стартует, пока не пройден гейт предыдущей; деплой требует
243
- зелёного полного прогона тестов и явного «go» оператора.
244
- - **UX-трек (super-ux рекомендуется):** как только задача трогает интерфейс
245
- (web/mobile/CLI/TUI), [super-ux](https://github.com/ssheleg/super-ux) —
246
- рекомендуемый воркфлоу, детектится ещё на гриле; если установлен — используется,
247
- если нет — сразу даётся строка установки. Стадия спеки гоняет `/ux` →
248
- `ux-foundation` (персоны, JTBD, CJM) → `ux-flows` (флоу + `screens.md` — карта
249
- экранов) → `ux-scenarios` (сценарии, ux-contract v4) → `/ux-lint` (линтер должен
250
- быть зелёным) до написания плана; спека включает ID сценариев, `SCR-` экраны,
251
- стадии CJM и UX-паттерны.
252
- Сценарии — до интерфейса.
253
- - **Модель — одна на прогон, подтверждается один раз до старта.** Рекомендация по
254
- умолчанию — *самая мощная reasoning-модель, доступная в окружении* (сейчас это
255
- последнее поколение Opus, но это **тир, а не строка**). Идентификаторы моделей
256
- устаревают, и провайдер может быть другой, поэтому ничего не захардкожено:
257
- актуальный топ-тир определяется в рантайме, а в конфиге стадий стоят
258
- провайдер-агностичные токены (`default` / `inherit`). Оператор подтверждает или
259
- переопределяет (можно по стадиям) — дальше пайплайн больше не переспрашивает.
260
- Сабагенты стадии 5 пинятся на подтверждённую модель автоматически.
261
- - Стадии 6–9 читают конвенции хост-проекта из `CLAUDE.md` (тесты / линт /
262
- деплой / доки / вики), поэтому скилл работает в любом репозитории.
263
-
264
- Запуск: скажите *«полный цикл»* / *«прогони по конвейеру»* или `/task-pipeline
265
- <задача>`. Установка — см. раздел Install выше (плагин, `npx skills add
266
- ssheleg/task-pipeline`, `npx task-pipeline-skill` / `npx
267
- github:ssheleg/task-pipeline` или `./install.sh`).
309
+ ## What this gives you
310
+
311
+ Agents write code well and judge *when to stop asking you things* badly. A
312
+ substantial task turns into twenty interruptions, or into a confident build that
313
+ skipped the tests. `task-pipeline` front-loads every decision into one intake
314
+ conversation, then runs ten gated stages without stopping to check in.
315
+
316
+ - **The intake grill asks what a senior engineer would ask** before anything is
317
+ touched — scope, edge cases, failure modes, rollback, who the user is — so the
318
+ build does not stall halfway through.
319
+ - **Every stage has a gate.** No code before a spec. No deploy before tests. No
320
+ "done" before the post-deploy logs have been read.
321
+ - **Team discipline without a team.** ADRs, a written plan, a real test suite, a
322
+ wiki entry — produced as part of the work, not promised for later.
323
+ - **It adapts to your repo, not the reverse.** Deploy, docs and wiki conventions
324
+ are read from the host project, so nothing is imposed.
325
+
326
+ ## Author
327
+
328
+ Built by ssheleg — [sshlg.me](https://sshlg.me)
329
+
330
+ - X / Twitter — [@fuck_this_year](https://x.com/fuck_this_year)
331
+ - Telegram — [@sshlg](https://t.me/sshlg)
332
+
333
+ Part of the [ssheleg skill family](https://github.com/ssheleg/sshlg-skills):
334
+ `super-ux`, `task-pipeline`, `make-skill`, `sheleg-design`, `seo-aeo-audit`.
335
+ One command installs all five for every agent you use:
336
+
337
+ ```bash
338
+ npx sshlg-skills install
339
+ ```
268
340
 
269
341
  ## License
270
342
 
@@ -1,15 +1,19 @@
1
1
  ---
2
- description: "task-pipeline: run a substantial task through a disciplined, gated delivery cycle — an intake grill that expands the request, then docs→brainstorm→spec→plan→build→tests→lint/deploy→post-deploy→docs. Apply when the user asks to run a task through the pipeline, the full cycle / полный цикл / прогони по конвейеру, or starts any substantial feature/fix/build."
2
+ description: "task-pipeline: run a substantial task through a disciplined, gated delivery cycle — an intake grill that expands the request into a checkable requirement list, then docs→brainstorm→spec→plan→build→tests→lint/deploy→post-deploy→docs/wiki→acceptance. Apply when the user asks to 'run this through the pipeline' / 'прогони по конвейеру', asks for 'the full cycle' / 'полный цикл', or starts any substantial feature/fix/build."
3
3
  alwaysApply: false
4
4
  ---
5
5
 
6
6
  # task-pipeline — gated delivery cycle (Cursor)
7
7
 
8
8
  Self-contained rule (Cursor copies this file into projects — no external links).
9
- Run a substantial task through an up-front **intake grill + 9 gated stages**. No
9
+ Run a substantial task through an up-front **intake grill + 10 gated stages**. No
10
10
  stage advances until its **gate** passes. Each gate is `auto` (verify it yourself,
11
11
  pass/fail) or `manual` (wait for the user's explicit go).
12
12
 
13
+ **No companion skill is required.** Every rule below is the doctrine itself — the
14
+ grill, the design gate, the plan format, the build loop and TDD. Nothing to
15
+ install, nothing to resolve, nothing that breaks when a plugin is missing.
16
+
13
17
  ## Model — decide once, before you start
14
18
 
15
19
  Recommended: **the most capable reasoning model the environment offers** (at time
@@ -32,7 +36,7 @@ user up front, then run the rest without mid-flight questions:
32
36
  4. Walk the decision tree depth-first; ask prerequisite decisions first.
33
37
  5. Reconcile contradictions; chase dodges ("decide later" → "latest you can decide
34
38
  and still ship?").
35
- 6. Run the **autonomy sweep** — resolve now whatever would stop stages 1→9 later:
39
+ 6. Run the **autonomy sweep** — resolve now whatever would stop stages 1→10 later:
36
40
  external libs and where their docs live; UI verdict; base branch, branch policy,
37
41
  commit convention, task tracker; the test command and what "green" means; the
38
42
  lint command; the deploy target, release toggle and **deploy authorization**;
@@ -55,6 +59,19 @@ Offer an ADR (`docs/adr/NNNN-slug.md`, 1–3 sentences is a complete ADR) only w
55
59
  all three hold: hard to reverse, surprising without context, and the result of a
56
60
  real trade-off. Any one missing → skip it.
57
61
 
62
+ **Write the REQ spine before the brief is confirmed.** Turn the request into an
63
+ addressable list — one row per independently verifiable deliverable (not one per
64
+ sentence), each naming **how it is verified**: a test name, a `file:line`, a command
65
+ and its expected output, or a scenario id. *A requirement you can't say how to
66
+ verify is a badly-stated requirement* — split it here. Then freeze the list:
67
+ adding later is free, **removing or narrowing needs the user's explicit
68
+ agreement**. Quietly restating the task in smaller terms is the subtlest way to
69
+ lose it — every later gate then passes honestly on a task that shrank.
70
+
71
+ Seed a **carry-over ledger** next to the brief, append-only. Anything deferred,
72
+ dropped, or left half-done goes in the moment it's said — including implementer
73
+ concerns and non-blocking review findings. **Deferred out loud is forgotten.**
74
+
58
75
  Stop when shared understanding is reached (every branch answered or explicitly
59
76
  deferred) and lock the answers into a short brief the user confirms. Only then
60
77
  start. Later stages read that brief instead of asking again.
@@ -63,31 +80,87 @@ start. Later stages read that brief instead of asking again.
63
80
  specific (named target + named preconditions). A vague "just do everything" does
64
81
  not authorize an outward, irreversible action — stage 7 stops and asks.
65
82
 
66
- ## Stages 1→9
83
+ ## Stages 1→10
67
84
 
68
85
  1. **Docs study** (auto) — ground every external lib/API on current docs, not recall.
69
- 2. **Brainstorm** (manual) — 2–3 approaches + a recommendation; design approved.
70
- Record whether the task touches a user-facing surface (UI verdict).
71
- 3. **Spec** (manual) — write and commit the design; lock shared contracts. For UI
72
- tasks, run the UX chain FIRST (see super-ux below) and embed it.
73
- 4. **Plan** (auto) — zero-context tasks, exact paths, TDD steps, DoD each,
74
- dependency graph + parallel groups, non-overlapping file ownership.
75
- 5. **Dev** (auto) — isolate (worktree), TDD per task (failing test → minimal impl →
76
- green → commit); two-stage review (spec compliance, then code quality).
86
+ 2. **Brainstorm + decompose** (manual) — read the brief, explore the code, then 2–3
87
+ approaches with a recommendation, YAGNI applied, design presented in sections and
88
+ approved. **Hard gate: no code, no scaffolding before that approval** — including
89
+ on "obviously simple" tasks. Record whether the task touches a user-facing surface
90
+ (UI verdict). **If the brief is a platform, not a change** — several independent
91
+ capabilities or separately shippable surfaces — cut it into modules before any
92
+ spec: modules by capability, never by layer; a module qualifies as a brick only if
93
+ it is independently specifiable, buildable and testable, owns its own entities,
94
+ talks to others through declared contracts only, and can land while leaving the
95
+ system working. Commit a module map (module, delivers, entities owned, depends on,
96
+ contracts exposed, UI?, REQs, status) in build order — the **walking skeleton
97
+ first**, then topologically, no cycles (a cycle means the cut is wrong). Every REQ
98
+ maps to exactly one module. Then stages 3→10 run **per module**, one brick at a
99
+ time; stages 0–2 run once, and the map's status column is the resume point. Single
100
+ module → record "single module: <name>" and move on.
101
+ 3. **Spec** (manual) — write and commit the design; lock every shared contract
102
+ (types, schemas, signatures, file layout) plus a **Global Constraints** block of
103
+ exact values every later task inherits. Self-review it for placeholders,
104
+ contradictions, ambiguity and scope before showing it. For UI tasks, run the UX
105
+ chain FIRST (see super-ux below) and embed it.
106
+ 4. **Plan** (auto) — every task names the REQ ids it `Implements:`, and the set of those ids must **equal** the brief's REQ set — a difference is scope lost, print it and fix it. Zero-context tasks: exact paths, complete code in every step,
107
+ the exact command and its expected output, TDD steps, DoD each, dependency graph
108
+ + parallel groups, non-overlapping file ownership. **No placeholders** — no TBD,
109
+ no "add error handling", no "similar to Task N", no undefined types.
110
+ 5. **Dev** (auto) — isolate first (existing worktree? native worktree tool? else
111
+ `git worktree` into an ignored dir), baseline tests green, then one task at a
112
+ time: TDD (failing test → watch it fail → minimal impl → watch it pass →
113
+ commit), then a review with **all three** verdicts — spec compliance, **REQ
114
+ satisfied** (judged against the requirement's own statement, not the task's
115
+ instructions), and code quality. Findings loop back to the implementer (max 5
116
+ rounds, then adjudicate in writing); minor findings are recorded, never blocking. Keep a progress ledger in
117
+ a file so a lost context can resume instead of redoing finished work. Tasks in
118
+ the same parallel group run concurrently **only** if each worker has its own
119
+ worktree — otherwise sequential. Close the stage by integrating: sync with the
120
+ base branch, re-run the full suite on the result, merge (or open a PR — that's
121
+ outward, so ask first), remove the worktree.
77
122
  6. **Tests** (auto) — full suite green (not just new tests); new/changed code
78
- covered; no skip/xfail hiding red.
123
+ covered including failure paths; no skip/xfail hiding red. Tests assert real
124
+ behavior, never mock behavior.
79
125
  7. **Lint + deploy** (manual) — lint clean AND suite green before deploy; deploy is
80
126
  outward → explicit user go, or the specific standing authorization recorded in
81
127
  the stage-0 brief.
82
128
  8. **Post-deploy** (auto) — tail logs / health-check; clean boot or an honest
83
129
  degradation report (never silent success).
84
- 9. **Docs** (auto) — update module docs/runbooks in the SAME change.
130
+ 9. **Docs + wiki** (auto) — update module docs/runbooks in the SAME change, and
131
+ sync the project's knowledge base/wiki if it has one.
132
+ 10. **Acceptance** (manual) — the closing stage: go back to the brief and account
133
+ for **every** REQ. One row each, status `verified` / `partial` / `deferred` /
134
+ `dropped`, and every `verified` carries **evidence** — a passing test name, a
135
+ `file:line`, a command and its output. "Done" without evidence is downgraded to
136
+ `partial`, never upgraded. Then ask out loud, list in hand: *here's what you
137
+ asked for, here's what shipped, here's what's deferred and where it lives —
138
+ what's missing?* Ask it even when the table is green. Gate: no REQ `unknown`,
139
+ no ledger row without a home, user signs off.
85
140
 
86
- Cross-cutting: answer from the brief's autonomy section rather than re-asking, track
141
+ Cross-cutting: answer from the brief's autonomy section rather than re-asking, log every deferral in the ledger, never narrow the task silently, track
87
142
  tasks, conventional commits, honest degradation (never claim a failed/skipped step
88
143
  succeeded), and get explicit go before any outward/irreversible action (deploy,
89
144
  publish, repo create).
90
145
 
146
+ **Loop guard — break churn instead of iterating.** Every repeating pass (a fix
147
+ round, a re-entered stage, the next module) logs one line per touched file: the
148
+ file, the pass, and the reason that forced it — a finding id or a failed gate item.
149
+ "Cleanup" is not a reason. **Stop immediately** when: an edit undoes what an earlier
150
+ pass in this run deliberately did (A→B→A); the same file is edited twice for the
151
+ same reason; a finding already fixed or parked comes back; a stage is entered a
152
+ third time for one artifact; two loops edit one file. Hard caps: 5 fix rounds per
153
+ task, 2 re-entries per stage, 3 passes per module. On a stop: name shape A and shape
154
+ B with their evidence and who asks for each; escalate to the layer that owns the
155
+ conflict (two findings → the review rubric; finding vs plan → the user; plan vs spec
156
+ → back to planning; ambiguous spec → back to spec; two modules claiming one file →
157
+ back to the module map) — **never settle a higher-layer conflict inside a lower
158
+ loop**; then re-plan the check as an ordered checklist, one owner and one
159
+ verification command per item, and go through it one at a time, one commit per item,
160
+ no opportunistic edits. Re-check the list once in the same order at the end. If it
161
+ trips again after a re-planned pass, stop and hand back with both shapes, the
162
+ evidence and your recommendation.
163
+
91
164
  ## super-ux for user-facing tasks (recommended)
92
165
 
93
166
  If the task touches any UI (web/mobile/CLI/TUI), the WHY→UI→scenario chain comes
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "task-pipeline-skill",
3
- "version": "0.12.0",
4
- "description": "Full-cycle task delivery pipeline orchestrator skill for Claude Code \u2014 a mandatory built-in intake grill + 9 gated stages (docs, brainstorm, spec, plan, build, tests, deploy, post-deploy, docs/wiki) built on the superpowers skills, with a super-ux UX track for user-facing tasks and toggleable release automation. This package is the installer CLI.",
3
+ "version": "0.17.1",
4
+ "description": "Full-cycle task delivery pipeline orchestrator skill for Claude Code — a mandatory built-in intake grill + 10 gated stages (docs, brainstorm+decompose, spec, plan, build, tests, lint/deploy, post-deploy, docs/wiki, acceptance) whose doctrine ships inside the skill with no required companion plugin, plus a super-ux UX track for user-facing tasks and toggleable release automation. This package is the installer CLI.",
5
5
  "bin": {
6
6
  "task-pipeline": "bin/task-pipeline.js"
7
7
  },
@@ -23,11 +23,11 @@
23
23
  "keywords": [
24
24
  "pipeline",
25
25
  "workflow",
26
- "superpowers",
27
26
  "orchestrator",
28
27
  "tdd",
29
28
  "deploy",
30
29
  "spec-driven",
30
+ "self-contained",
31
31
  "claude-code",
32
32
  "skill"
33
33
  ]
@@ -1,10 +1,21 @@
1
1
  {
2
2
  "name": "task-pipeline",
3
- "description": "Thin orchestrator: a mandatory built-in intake grill expands the task, sharpens its domain language and pre-resolves what would stop later stages, then docs study, brainstorm, spec, plan, subagent build, tests, lint/deploy, post-deploy log check, docs/wiki sync — typed auto/manual gates, one provider-agnostic model confirmed up front, a super-ux UX track for user-facing tasks, and toggleable project-configurable release automation. Built on the superpowers skills; generic-portable.",
4
- "version": "0.12.0",
5
- "author": { "name": "ssheleg" },
3
+ "description": "Self-contained orchestrator that runs a task through a mandatory built-in intake grill + 10 gated stages (docs, brainstorm+decompose, spec, plan, subagent build, tests, lint/deploy, post-deploy, docs/wiki, acceptance). Every stage's doctrine is built into the skill — no companion plugin required — with typed auto/manual gates, a loop guard that breaks churn, one provider-agnostic model confirmed up front, a super-ux UX track for user-facing tasks, and toggleable project-configurable release automation.",
4
+ "version": "0.17.1",
5
+ "author": {
6
+ "name": "ssheleg"
7
+ },
6
8
  "homepage": "https://github.com/ssheleg/task-pipeline",
7
9
  "repository": "https://github.com/ssheleg/task-pipeline",
8
10
  "license": "MIT",
9
- "keywords": ["pipeline", "workflow", "superpowers", "orchestrator", "tdd", "deploy", "spec-driven", "claude-code"]
11
+ "keywords": [
12
+ "pipeline",
13
+ "workflow",
14
+ "orchestrator",
15
+ "tdd",
16
+ "deploy",
17
+ "spec-driven",
18
+ "self-contained",
19
+ "claude-code"
20
+ ]
10
21
  }
@@ -1,19 +1,21 @@
1
1
  ---
2
- description: Run a task through task-pipeline — an intake grill that expands the request, then docs → brainstorm → spec → plan → build → tests → deploy → post-deploy → docs/wiki.
2
+ description: Run a task through task-pipeline — an intake grill that expands the request, then docs → brainstorm → spec → plan → build → tests → deploy → post-deploy → docs/wiki → acceptance.
3
3
  argument-hint: <one-line task description>
4
4
  ---
5
5
  Use the `task-pipeline` skill to run the task below through all gated stages —
6
6
  **stage 0 intake grill** → docs study → brainstorm → spec → plan → subagent
7
- build → tests → lint/deploy → post-deploy → docs/wiki. The **intake grill is
8
- mandatory and built in** (`references/grill.md` — nothing to install): interview the
7
+ build → tests → lint/deploy → post-deploy → docs/wiki → **acceptance**. **Every stage's doctrine is
8
+ built into the skill** (`references/{grill,brainstorm,decomposition,spec,planning,build,review,tdd,acceptance,loop-guard}.md`)
9
+ — no companion plugin is required for any of them. The **intake grill is
10
+ mandatory** (`references/grill.md`): interview the
9
11
  operator one question at a time (with a recommended answer each, exploring the
10
12
  codebase before asking) until every decision branch is resolved, applying the
11
13
  grill's **domain awareness** (challenge terms against `CONTEXT.md`, sharpen fuzzy
12
14
  language, ADRs for hard-to-reverse calls) and covering the **autonomy sweep** (what
13
- would otherwise stop stages 1→9: docs sources, branch/tracker policy, test and lint
15
+ would otherwise stop stages 1→10: docs sources, branch/tracker policy, test and lint
14
16
  commands, deploy target and authorization, log locations, docs/wiki targets) —
15
- until the brief is locked, so the rest runs autonomously. For any user-facing task, recommend/use
16
- **super-ux**. Honor every stage gate by its type (`auto` = verify yourself;
17
+ until the brief is locked — including the **REQ table**, the request as an addressable list where every row names how it is verified — so the rest runs autonomously and the final stage can account for all of it. The list is frozen: adding is free, removing needs the operator's agreement. Anything deferred goes into the carry-over ledger the moment it's said. For any user-facing task, recommend/use
18
+ **super-ux**. **If the brief describes a platform rather than a change**, stage 2 also cuts it into modules (`references/decomposition.md`) — module map committed, walking skeleton first, every REQ in exactly one module — and stages 3→10 then run per module, one brick at a time. **If any loop starts undoing an earlier pass** (same file edited twice for the same reason, a closed finding returning, a third entry into one stage), stop and run the loop guard (`references/loop-guard.md`): name both shapes, escalate to the layer that owns the conflict, re-plan the check as an ordered list, then go item by item. Honor every stage gate by its type (`auto` = verify yourself;
17
19
  `manual` = wait for explicit go). Confirm the **model once at preflight** —
18
20
  recommend the most capable one the environment offers, never a hardcoded id — then
19
21
  run the whole pipeline on it without re-asking.