task-pipeline-skill 0.9.0 → 0.12.0
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.
- package/CHANGELOG.md +106 -0
- package/LICENSE +38 -0
- package/README.md +111 -46
- package/cursor/rules/task-pipeline.mdc +49 -7
- package/package.json +2 -3
- package/plugins/task-pipeline/.claude-plugin/plugin.json +2 -2
- package/plugins/task-pipeline/commands/task-pipeline.md +13 -7
- package/plugins/task-pipeline/skills/task-pipeline/SKILL.md +76 -41
- package/plugins/task-pipeline/skills/task-pipeline/pipeline.example.json +52 -25
- package/plugins/task-pipeline/skills/task-pipeline/pipeline.schema.json +1 -1
- package/plugins/task-pipeline/skills/task-pipeline/references/artifacts.md +7 -3
- package/plugins/task-pipeline/skills/task-pipeline/references/companion-skills.md +26 -6
- package/plugins/task-pipeline/skills/task-pipeline/references/grill.md +131 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/model-tiering.md +55 -22
- package/plugins/task-pipeline/skills/task-pipeline/references/stages.md +41 -30
- package/{templates → plugins/task-pipeline/skills/task-pipeline/templates}/README.md +6 -0
- package/plugins/task-pipeline/skills/task-pipeline/templates/adr.md +64 -0
- package/plugins/task-pipeline/skills/task-pipeline/templates/brief.md +59 -0
- package/plugins/task-pipeline/skills/task-pipeline/templates/context.md +87 -0
- package/templates/brief.md +0 -35
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: task-pipeline
|
|
3
|
-
description: "
|
|
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."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# task-pipeline
|
|
7
7
|
|
|
8
8
|
Thin orchestrator. Runs a task through **gated stages**, each built on an
|
|
9
9
|
existing skill. Keeps the main thread disciplined: no stage advances until its
|
|
10
|
-
gate passes;
|
|
10
|
+
gate passes; the whole run uses one model, confirmed before it starts.
|
|
11
11
|
|
|
12
12
|
**Grill first, then run autonomously.** A one-line task ("make me feature X") is
|
|
13
|
-
never enough to finish without a human in the loop. Stage 0 **
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
never enough to finish without a human in the loop. Stage 0 is **mandatory**: a
|
|
14
|
+
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
|
+
the answers into a brief. Autonomy is bought there or not at all; every question
|
|
17
|
+
skipped at stage 0 comes back as an interruption at stage 6.
|
|
18
18
|
|
|
19
19
|
**Config contract: [`pipeline.schema.json`](pipeline.schema.json).** A pipeline is
|
|
20
20
|
a machine-readable config — an ordered list of stages, each with `skills[]` (the
|
|
@@ -56,58 +56,92 @@ workflow for the WHY→UI→scenario chain (`/ux`, `ux-foundation`, `ux-flows`,
|
|
|
56
56
|
(or `npx skills add ssheleg/super-ux`). For UI tasks the spec gate **requires**
|
|
57
57
|
it — install before stage 3, otherwise stop and ask the operator to install.
|
|
58
58
|
|
|
59
|
-
**grill
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
59
|
+
**The grill is built in — no companion skill, nothing to install.** Stage 0 ships
|
|
60
|
+
with this skill: the full doctrine lives in [`references/grill.md`](references/grill.md)
|
|
61
|
+
(interview loop, domain awareness, autonomy sweep, output). It is **mandatory** —
|
|
62
|
+
no "clear enough task" exemption, no starting stage 1 without a committed,
|
|
63
|
+
operator-confirmed brief. The one sanctioned bypass is the entry-from-super-ux
|
|
64
|
+
short-circuit, and even that demands a scope confirmation.
|
|
65
|
+
|
|
66
|
+
Two things the grill does beyond clarifying the request:
|
|
67
|
+
- **Domain awareness.** It reads the project's own `CONTEXT.md` / `docs/adr/` and
|
|
68
|
+
holds the operator to them — challenging terms that conflict with the glossary,
|
|
69
|
+
sharpening overloaded words, stress-testing with concrete scenarios, and
|
|
70
|
+
flagging where the code contradicts what was just said. Resolved terms are
|
|
71
|
+
written to `CONTEXT.md` as they land; genuinely hard-to-reverse decisions get an
|
|
72
|
+
ADR.
|
|
73
|
+
- **The autonomy sweep.** It pre-resolves what would otherwise stop stages 1→9
|
|
74
|
+
mid-flight (test/lint/deploy commands, branch policy, log locations, docs
|
|
75
|
+
targets, the model decision, deploy authorization). Autonomy is bought here or
|
|
76
|
+
not at all — an unasked question is a scheduled interruption.
|
|
63
77
|
|
|
64
78
|
## How to run
|
|
65
79
|
|
|
66
80
|
1. Restate the task in one line. Create a **TaskList: one task per stage, starting
|
|
67
81
|
with stage 0** (survives context loss; lets you resume). Then run the
|
|
68
82
|
**companion preflight** (`references/companion-skills.md`): detect which
|
|
69
|
-
companion skills resolve and emit
|
|
70
|
-
required/recommended ones (superpowers always; super-ux for UI
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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
|
|
86
|
+
the most capable model available, let the operator confirm or override, record
|
|
87
|
+
it. Ask once, here.
|
|
88
|
+
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
|
|
90
|
+
(`references/stages.md` → 0). Do not touch stage 1 before the brief is
|
|
91
|
+
committed and confirmed. **Entered from super-ux?**
|
|
75
92
|
(a validated `docs/ux/` chain and/or a `docs/ux/plans/…` fix plan already
|
|
76
93
|
exists — super-ux's `/ux` hands off here) → don't re-grill or rebuild the UX
|
|
77
94
|
chain: just check it's OK (`/ux-lint` green), confirm scope in one line, and
|
|
78
95
|
skip ahead to the first stage with real work (see `references/stages.md` → 0).
|
|
79
|
-
3. Walk stages 1→9
|
|
80
|
-
|
|
96
|
+
3. Walk stages 1→9 on the model confirmed at preflight. **Don't re-ask about the
|
|
97
|
+
model at every boundary** — only when the operator recorded a per-stage override
|
|
98
|
+
map and the next stage's entry differs (`references/model-tiering.md`).
|
|
81
99
|
4. Do **not** advance until the stage **gate** passes (`references/stages.md`).
|
|
82
100
|
Honor the gate **type**: for `auto`, verify the gate's `check` yourself and
|
|
83
101
|
stop/return on fail; for `manual`, present the result and **wait for the
|
|
84
102
|
operator's explicit "continue"/go** — an auto gate never substitutes for a
|
|
85
103
|
required manual approval.
|
|
86
|
-
5. Cross-cutting, every stage:
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
104
|
+
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
|
|
106
|
+
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
|
|
109
|
+
operator go — or a **specific** standing authorization recorded in the brief
|
|
110
|
+
(named target + preconditions; a vague "do everything" is not one).
|
|
90
111
|
|
|
91
112
|
## Stages (detail in `references/stages.md`)
|
|
92
113
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
|
97
|
-
|
|
98
|
-
|
|
|
99
|
-
|
|
|
100
|
-
|
|
|
101
|
-
|
|
|
102
|
-
|
|
|
103
|
-
|
|
|
104
|
-
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
114
|
+
All stages run on the **one model confirmed at preflight** (default: the most
|
|
115
|
+
capable available — see `references/model-tiering.md`).
|
|
116
|
+
|
|
117
|
+
| # | Stage | Invoke | Gate | Type |
|
|
118
|
+
|---|---|---|---|---|
|
|
119
|
+
| 0 | Intake grill — **mandatory** | built in: [`references/grill.md`](references/grill.md) | shared understanding reached; autonomy sweep covered; brief locked + confirmed | manual |
|
|
120
|
+
| 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 |
|
|
126
|
+
| 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
|
+
| 8 | Post-deploy | tail deploy logs / health-check | clean boot or honest degradation report | auto |
|
|
128
|
+
| 9 | Docs + wiki | host module docs/runbook rules → `wiki-update` | docs synced, wiki synced | auto |
|
|
129
|
+
|
|
130
|
+
## Model — ask once, at preflight
|
|
131
|
+
|
|
132
|
+
Default recommendation: **the most capable reasoning model the environment
|
|
133
|
+
offers** (currently the latest Opus generation — read that as a tier, not a
|
|
134
|
+
string). **Never hardcode a model id**: generations ship, tiers get renamed, and
|
|
135
|
+
the operator may be on another provider entirely — resolve the top tier available
|
|
136
|
+
at runtime. Stage configs use provider-agnostic tokens (`default` / `inherit`).
|
|
137
|
+
|
|
138
|
+
> 🧠 **Model for this run:** recommended **`<top tier available>`**. You're on
|
|
139
|
+
> `<current>`. `/model <id>` to switch, or "keep current", or name per-stage
|
|
140
|
+
> overrides. *(Reminder only — if that tier isn't available, say which one you're
|
|
141
|
+
> using and continue.)*
|
|
142
|
+
|
|
143
|
+
Record the answer in the brief; don't re-ask per stage. Stage-5 subagents are
|
|
144
|
+
pinned to the confirmed model automatically. Detail: `references/model-tiering.md`.
|
|
111
145
|
|
|
112
146
|
## Bring your own skills
|
|
113
147
|
|
|
@@ -124,6 +158,7 @@ automation is on — `pipeline.schema.json` is the only contract.
|
|
|
124
158
|
|
|
125
159
|
- `pipeline.schema.json` — the universal pipeline config contract (stages + release)
|
|
126
160
|
- `pipeline.example.json` — this plugin's default flow (stage 0 + 1→9) + release, as config
|
|
161
|
+
- `references/grill.md` — the built-in stage-0 grill: loop, domain awareness, autonomy sweep
|
|
127
162
|
- `references/stages.md` — per-stage detail + exact gate criteria + gate types
|
|
128
163
|
- `references/model-tiering.md` — model map, ids, the `/model` reminder mechanic, override
|
|
129
164
|
- `references/conventions.md` — how stages 6–9 read the host project's CLAUDE.md
|
|
@@ -1,25 +1,30 @@
|
|
|
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. 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 + 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.",
|
|
5
5
|
"stages": [
|
|
6
6
|
{
|
|
7
7
|
"id": 0,
|
|
8
8
|
"state": "intake",
|
|
9
9
|
"name": "Intake grill",
|
|
10
|
-
"model": "
|
|
11
|
-
"skills": [
|
|
10
|
+
"model": "default",
|
|
11
|
+
"skills": [
|
|
12
|
+
"task-pipeline:grill"
|
|
13
|
+
],
|
|
12
14
|
"gate": {
|
|
13
15
|
"type": "manual",
|
|
14
|
-
"check": "grill the
|
|
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."
|
|
15
17
|
}
|
|
16
18
|
},
|
|
17
19
|
{
|
|
18
20
|
"id": 1,
|
|
19
21
|
"state": "docs-study",
|
|
20
22
|
"name": "Docs study",
|
|
21
|
-
"model": "
|
|
22
|
-
"skills": [
|
|
23
|
+
"model": "default",
|
|
24
|
+
"skills": [
|
|
25
|
+
"context7",
|
|
26
|
+
"context7-docs"
|
|
27
|
+
],
|
|
23
28
|
"gate": {
|
|
24
29
|
"type": "auto",
|
|
25
30
|
"check": "every contract the design will lock is grounded in fetched docs, not recall; unresolvable libraries are flagged in the spec"
|
|
@@ -29,8 +34,10 @@
|
|
|
29
34
|
"id": 2,
|
|
30
35
|
"state": "brainstorm",
|
|
31
36
|
"name": "Brainstorm",
|
|
32
|
-
"model": "
|
|
33
|
-
"skills": [
|
|
37
|
+
"model": "default",
|
|
38
|
+
"skills": [
|
|
39
|
+
"superpowers:brainstorming"
|
|
40
|
+
],
|
|
34
41
|
"gate": {
|
|
35
42
|
"type": "manual",
|
|
36
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)"
|
|
@@ -40,30 +47,40 @@
|
|
|
40
47
|
"id": 3,
|
|
41
48
|
"state": "spec",
|
|
42
49
|
"name": "Spec",
|
|
43
|
-
"model": "
|
|
44
|
-
"skills": [
|
|
50
|
+
"model": "default",
|
|
51
|
+
"skills": [
|
|
52
|
+
"super-ux:ux-foundation",
|
|
53
|
+
"super-ux:ux-flows",
|
|
54
|
+
"super-ux:ux-scenarios",
|
|
55
|
+
"superpowers:brainstorming"
|
|
56
|
+
],
|
|
45
57
|
"gate": {
|
|
46
58
|
"type": "manual",
|
|
47
|
-
"check": "
|
|
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"
|
|
48
60
|
}
|
|
49
61
|
},
|
|
50
62
|
{
|
|
51
63
|
"id": 4,
|
|
52
64
|
"state": "plan",
|
|
53
65
|
"name": "Plan",
|
|
54
|
-
"model": "
|
|
55
|
-
"skills": [
|
|
66
|
+
"model": "default",
|
|
67
|
+
"skills": [
|
|
68
|
+
"superpowers:writing-plans"
|
|
69
|
+
],
|
|
56
70
|
"gate": {
|
|
57
71
|
"type": "auto",
|
|
58
|
-
"check": "every spec requirement maps to a task; no placeholders; parallel-group tasks share no files;
|
|
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"
|
|
59
73
|
}
|
|
60
74
|
},
|
|
61
75
|
{
|
|
62
76
|
"id": 5,
|
|
63
77
|
"state": "dev",
|
|
64
78
|
"name": "Dev",
|
|
65
|
-
"model": "
|
|
66
|
-
"skills": [
|
|
79
|
+
"model": "default",
|
|
80
|
+
"skills": [
|
|
81
|
+
"superpowers:using-git-worktrees",
|
|
82
|
+
"superpowers:subagent-driven-development"
|
|
83
|
+
],
|
|
67
84
|
"gate": {
|
|
68
85
|
"type": "auto",
|
|
69
86
|
"check": "all plan tasks DONE (two-stage review: spec compliance, then code quality); full test suite green"
|
|
@@ -73,8 +90,10 @@
|
|
|
73
90
|
"id": 6,
|
|
74
91
|
"state": "tests",
|
|
75
92
|
"name": "Tests",
|
|
76
|
-
"model": "
|
|
77
|
-
"skills": [
|
|
93
|
+
"model": "default",
|
|
94
|
+
"skills": [
|
|
95
|
+
"superpowers:test-driven-development"
|
|
96
|
+
],
|
|
78
97
|
"gate": {
|
|
79
98
|
"type": "auto",
|
|
80
99
|
"check": "full suite green (not just new tests); new/changed code covered; no skip/xfail smuggling a red suite past the gate"
|
|
@@ -84,19 +103,24 @@
|
|
|
84
103
|
"id": 7,
|
|
85
104
|
"state": "lint-deploy",
|
|
86
105
|
"name": "Lint + deploy",
|
|
87
|
-
"model": "
|
|
88
|
-
"skills": [
|
|
106
|
+
"model": "default",
|
|
107
|
+
"skills": [
|
|
108
|
+
"host:lint",
|
|
109
|
+
"host:deploy"
|
|
110
|
+
],
|
|
89
111
|
"gate": {
|
|
90
112
|
"type": "manual",
|
|
91
|
-
"check": "lint clean and full suite green before deploy; deploy is outward and needs explicit operator go"
|
|
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)"
|
|
92
114
|
}
|
|
93
115
|
},
|
|
94
116
|
{
|
|
95
117
|
"id": 8,
|
|
96
118
|
"state": "post-deploy",
|
|
97
119
|
"name": "Post-deploy",
|
|
98
|
-
"model": "
|
|
99
|
-
"skills": [
|
|
120
|
+
"model": "default",
|
|
121
|
+
"skills": [
|
|
122
|
+
"host:health-check"
|
|
123
|
+
],
|
|
100
124
|
"gate": {
|
|
101
125
|
"type": "auto",
|
|
102
126
|
"check": "clean boot confirmed (no error spike, live subsystems healthy), or an honest degradation report with next steps"
|
|
@@ -106,8 +130,11 @@
|
|
|
106
130
|
"id": 9,
|
|
107
131
|
"state": "docs-wiki",
|
|
108
132
|
"name": "Docs + wiki",
|
|
109
|
-
"model": "
|
|
110
|
-
"skills": [
|
|
133
|
+
"model": "default",
|
|
134
|
+
"skills": [
|
|
135
|
+
"host:module-docs",
|
|
136
|
+
"wiki-update"
|
|
137
|
+
],
|
|
111
138
|
"gate": {
|
|
112
139
|
"type": "auto",
|
|
113
140
|
"check": "docs in sync with code in the same change; wiki synced; dangling links fixed"
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"id": { "type": "integer", "description": "Optional ordinal." },
|
|
46
46
|
"state": { "type": "string", "minLength": 1, "description": "Unique stable key for the stage." },
|
|
47
47
|
"name": { "type": "string", "description": "Optional human label." },
|
|
48
|
-
"model": { "type": "string", "description": "Optional
|
|
48
|
+
"model": { "type": "string", "description": "Optional model for the stage. Prefer a provider-agnostic token over a vendor id, which goes stale as generations ship and may not exist on the operator's provider at all: 'default' = the model confirmed for this run (recommended: the most capable reasoning model the environment offers), 'inherit' = whatever the operator is currently on. A literal id is allowed but treated as an example, not a contract." },
|
|
49
49
|
"skills": {
|
|
50
50
|
"type": "array",
|
|
51
51
|
"minItems": 1,
|
|
@@ -8,7 +8,10 @@ shape.
|
|
|
8
8
|
## In the host project
|
|
9
9
|
|
|
10
10
|
```
|
|
11
|
+
CONTEXT.md # stage 0 — domain glossary, written inline as terms resolve
|
|
11
12
|
docs/
|
|
13
|
+
adr/
|
|
14
|
+
NNNN-<slug>.md # stage 0 — ADRs for hard-to-reverse decisions
|
|
12
15
|
superpowers/
|
|
13
16
|
specs/
|
|
14
17
|
YYYY-MM-DD-<topic>-brief.md # stage 0 — locked intake brief (grill output)
|
|
@@ -33,7 +36,8 @@ design → plan is traceable at a glance.
|
|
|
33
36
|
|
|
34
37
|
| Stage | Writes | Consumed by |
|
|
35
38
|
|---|---|---|
|
|
36
|
-
| 0 Intake | `specs/<topic>-brief.md` (seed from `templates/brief.md`) | stages 2–4 |
|
|
39
|
+
| 0 Intake | `specs/<topic>-brief.md` (seed from the skill's `templates/brief.md`) | stages 2–4 |
|
|
40
|
+
| 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 |
|
|
37
41
|
| 3 Spec | `specs/<topic>-design.md` (+ links `docs/ux/*` for UI) | stage 4 |
|
|
38
42
|
| 4 Plan | `plans/<topic>.md` | stage 5 |
|
|
39
43
|
| 3 UX track | `docs/ux/{foundation,flows,screens,scenarios}.md` | stages 4–9 + `/ux-lint` |
|
|
@@ -51,9 +55,9 @@ plugins/task-pipeline/
|
|
|
51
55
|
SKILL.md
|
|
52
56
|
pipeline.schema.json # generic pipeline contract
|
|
53
57
|
pipeline.example.json # this plugin's own flow, as config
|
|
54
|
-
references/{stages,model-tiering,conventions,artifacts,companion-skills}.md
|
|
58
|
+
references/{grill,stages,model-tiering,conventions,artifacts,companion-skills}.md
|
|
55
59
|
cursor/rules/task-pipeline.mdc # Cursor channel (self-contained rule)
|
|
56
|
-
templates/brief.md
|
|
60
|
+
plugins/task-pipeline/skills/task-pipeline/templates/{brief,context,adr}.md # stage-0 skeletons (ship on every channel)
|
|
57
61
|
bin/task-pipeline.js # npx installer (package task-pipeline-skill)
|
|
58
62
|
package.json
|
|
59
63
|
install.sh # POSIX installer
|
|
@@ -5,20 +5,25 @@ skills. Preflight-detect each one; if a needed skill doesn't resolve, **give the
|
|
|
5
5
|
operator the install line immediately** and (for required ones) stop until it's
|
|
6
6
|
installed. Never silently degrade a required capability.
|
|
7
7
|
|
|
8
|
+
**Stage 0 is the exception: the grill is part of this skill**
|
|
9
|
+
(`references/grill.md`), so it has no companion, no install line and no failure
|
|
10
|
+
mode where it can't run.
|
|
11
|
+
|
|
8
12
|
## The matrix
|
|
9
13
|
|
|
10
14
|
| Skill / tool | Needed for | Required? | Install |
|
|
11
15
|
|---|---|---|---|
|
|
12
16
|
| **superpowers** (`brainstorming`, `writing-plans`, `subagent-driven-development`, `using-git-worktrees`, `test-driven-development`) | stages 2, 4, 5, 6 | **Required** (always) | `/plugin marketplace add obra/superpowers` → `/plugin install superpowers@superpowers` |
|
|
13
17
|
| **super-ux** (`ux-foundation`, `ux-flows`, `ux-scenarios`, `ux-audit`, `/ux`, `/ux-lint`) | stage 3 UX track | **Required for any user-facing task** | `/plugin marketplace add ssheleg/super-ux` → `/plugin install super-ux@super-ux` (or `npx skills add ssheleg/super-ux`) |
|
|
14
|
-
|
|
|
18
|
+
| ~~grill-me / grilling~~ | — | **Not a dependency.** The stage-0 grill is **built into this skill** (`references/grill.md`) — nothing to install, nothing to resolve, no fallback path | — |
|
|
15
19
|
| **context7** (MCP) | stage 1 docs study | Recommended (web-search fallback) | connect the context7 MCP server |
|
|
16
20
|
| **wiki-update** | stage 9 wiki sync | Optional (skip wiki if absent) | user's wiki skill set |
|
|
17
21
|
|
|
18
|
-
## Preflight
|
|
22
|
+
## Preflight (emit before stage 0)
|
|
19
23
|
|
|
20
|
-
At the very start, detect which of the above resolve and print ONE
|
|
21
|
-
|
|
24
|
+
At the very start, detect which of the above resolve and print ONE block —
|
|
25
|
+
companions **plus the model decision** (`model-tiering.md`), so the operator arms
|
|
26
|
+
the whole run in a single exchange. Example:
|
|
22
27
|
|
|
23
28
|
```
|
|
24
29
|
Pipeline companions:
|
|
@@ -27,17 +32,32 @@ Pipeline companions:
|
|
|
27
32
|
/plugin marketplace add ssheleg/super-ux
|
|
28
33
|
/plugin install super-ux@super-ux
|
|
29
34
|
✓ context7 — ready
|
|
30
|
-
✗ grill-me — optional; falling back to the built-in grill loop
|
|
31
35
|
✓ wiki-update — ready
|
|
32
|
-
|
|
36
|
+
• intake grill — built in, no install needed
|
|
37
|
+
|
|
38
|
+
🧠 Model for this run: recommended <top tier available>. You're on <current>.
|
|
39
|
+
/model <id> to switch, or "keep current", or name per-stage overrides.
|
|
40
|
+
|
|
41
|
+
Install the ✗ items you want, answer the model line, then say "continue".
|
|
33
42
|
```
|
|
34
43
|
|
|
35
44
|
Rules:
|
|
36
45
|
- Only flag **super-ux** as recommended when the task implies a UI (the stage-0
|
|
37
46
|
grill decides this; when unsure, flag it — a false positive costs one install).
|
|
38
47
|
- **superpowers** missing → stop; it's required for the core stages.
|
|
48
|
+
- **Never gate stage 0 on an install.** The grill ships with this skill; there is
|
|
49
|
+
no external grill dependency to detect, recommend, or fall back from.
|
|
39
50
|
- Optional tools missing → state the fallback, don't block.
|
|
40
51
|
- Re-detect after the operator installs; don't assume.
|
|
52
|
+
- The model answer goes into the brief. Don't ask again per stage
|
|
53
|
+
(`model-tiering.md` → *Mechanic*).
|
|
54
|
+
|
|
55
|
+
## Credit
|
|
56
|
+
|
|
57
|
+
The built-in grill is adapted from Matt Pocock's `grilling` / `grill-with-docs`
|
|
58
|
+
skills (MIT, https://github.com/mattpocock/skills) — see the repo `LICENSE` →
|
|
59
|
+
*Third-party*. It is **ported, not depended on**: no install, no resolution, no
|
|
60
|
+
version skew.
|
|
41
61
|
|
|
42
62
|
## Hand-off the other direction
|
|
43
63
|
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# The grill — stage 0, built in
|
|
2
|
+
|
|
3
|
+
The intake grill is **part of this skill**. No companion skill to install, no
|
|
4
|
+
provider to resolve, nothing to fall back to: this file *is* the implementation.
|
|
5
|
+
|
|
6
|
+
Its job is not to design. It is to take a one-line request ("make me feature X")
|
|
7
|
+
and interview it into a brief complete enough that stages 1→9 finish without
|
|
8
|
+
coming back to the operator.
|
|
9
|
+
|
|
10
|
+
> Adapted, with thanks, from Matt Pocock's `grilling` / `grill-with-docs` skills
|
|
11
|
+
> (MIT — see this repo's `LICENSE` → *Third-party*). The domain-awareness
|
|
12
|
+
> half — glossary challenges, `CONTEXT.md`, ADR discipline — comes from there; the
|
|
13
|
+
> autonomy sweep and the brief are this pipeline's.
|
|
14
|
+
|
|
15
|
+
## The loop
|
|
16
|
+
|
|
17
|
+
Interview the operator relentlessly about every aspect of the task until you reach
|
|
18
|
+
a **shared understanding**. Walk down each branch of the decision tree, resolving
|
|
19
|
+
dependencies between decisions one by one.
|
|
20
|
+
|
|
21
|
+
1. **One question per turn.** Never bundle. Wait for the answer before the next.
|
|
22
|
+
2. **Recommend an answer with every question** (+ a one-line rationale). "What do
|
|
23
|
+
you think?" is lazy — you have the codebase in front of you, they don't.
|
|
24
|
+
3. **If the codebase can answer it, go read the codebase.** Spending the
|
|
25
|
+
operator's turn on something `grep`/`Read`/context7 would have told you is the
|
|
26
|
+
most common way to waste a grill.
|
|
27
|
+
4. **Depth-first.** Finish a branch before opening another; ask prerequisite
|
|
28
|
+
decisions first, so later answers don't invalidate earlier ones.
|
|
29
|
+
5. **Reconcile contradictions immediately**, and chase dodges: "we'll decide
|
|
30
|
+
later" → "what's the latest you can decide and still ship?"
|
|
31
|
+
6. **Cover the autonomy sweep** (below). An unasked question is not neutral — it
|
|
32
|
+
is a scheduled interruption at stage 6.
|
|
33
|
+
|
|
34
|
+
**Stop** when a re-scan surfaces no new branches. Don't grill past diminishing
|
|
35
|
+
returns: genuinely reversible calls can be deferred with a note.
|
|
36
|
+
|
|
37
|
+
## Domain awareness
|
|
38
|
+
|
|
39
|
+
While exploring the codebase, also look for what the project already says about
|
|
40
|
+
itself — and hold the operator to it.
|
|
41
|
+
|
|
42
|
+
### Find the existing docs
|
|
43
|
+
|
|
44
|
+
Most repos have a single context:
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
/
|
|
48
|
+
├── CONTEXT.md
|
|
49
|
+
├── docs/adr/
|
|
50
|
+
│ ├── 0001-event-sourced-orders.md
|
|
51
|
+
│ └── 0002-postgres-for-write-model.md
|
|
52
|
+
└── src/
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
A `CONTEXT-MAP.md` at the root means multiple contexts, and points at where each
|
|
56
|
+
one lives (`src/ordering/CONTEXT.md`, `src/billing/CONTEXT.md`, …), each with its
|
|
57
|
+
own `docs/adr/` alongside the system-wide one. Infer which context the task
|
|
58
|
+
belongs to; if it's genuinely unclear, ask.
|
|
59
|
+
|
|
60
|
+
Create these files **lazily** — only when you have something real to write.
|
|
61
|
+
|
|
62
|
+
### Techniques during the session
|
|
63
|
+
|
|
64
|
+
- **Challenge against the glossary.** When a term conflicts with `CONTEXT.md`, say
|
|
65
|
+
so on the spot: *"Your glossary defines 'cancellation' as X, but you seem to mean
|
|
66
|
+
Y — which is it?"*
|
|
67
|
+
- **Sharpen fuzzy language.** Vague or overloaded terms get a proposed canonical
|
|
68
|
+
one: *"You're saying 'account' — do you mean the Customer or the User? Those are
|
|
69
|
+
different things."*
|
|
70
|
+
- **Stress-test with concrete scenarios.** Invent specific cases that probe edge
|
|
71
|
+
conditions and force precision about the boundaries between concepts.
|
|
72
|
+
- **Cross-reference with the code.** When the operator states how something works,
|
|
73
|
+
check whether the code agrees, and surface contradictions: *"Your code cancels
|
|
74
|
+
entire Orders, but you just said partial cancellation is possible — which is
|
|
75
|
+
right?"*
|
|
76
|
+
- **Update `CONTEXT.md` inline.** Resolve a term → write it down right then, not in
|
|
77
|
+
a batch at the end. Format: [`templates/context.md`](../templates/context.md).
|
|
78
|
+
Keep it free of implementation detail — only terms a domain expert would
|
|
79
|
+
recognize.
|
|
80
|
+
|
|
81
|
+
### Offer an ADR sparingly
|
|
82
|
+
|
|
83
|
+
Only when **all three** are true:
|
|
84
|
+
|
|
85
|
+
1. **Hard to reverse** — changing your mind later carries real cost.
|
|
86
|
+
2. **Surprising without context** — a future reader will ask "why on earth this
|
|
87
|
+
way?"
|
|
88
|
+
3. **A real trade-off** — genuine alternatives existed and one was chosen for
|
|
89
|
+
specific reasons.
|
|
90
|
+
|
|
91
|
+
Any one missing → skip it. Format and what qualifies:
|
|
92
|
+
[`templates/adr.md`](../templates/adr.md). ADRs land in `docs/adr/` with sequential
|
|
93
|
+
numbering (scan for the highest number, increment).
|
|
94
|
+
|
|
95
|
+
## The autonomy sweep
|
|
96
|
+
|
|
97
|
+
Resolving the *task* is not enough. The grill must also pre-resolve everything that
|
|
98
|
+
would otherwise stop stages 1→9 mid-flight. Every row gets an answer **or** an
|
|
99
|
+
explicit "stop and ask me here":
|
|
100
|
+
|
|
101
|
+
| Stage | What to settle up front |
|
|
102
|
+
|---|---|
|
|
103
|
+
| run-wide | the model decision ([`model-tiering.md`](model-tiering.md)); what to decide autonomously vs escalate |
|
|
104
|
+
| 1 Docs | external libs/APIs/SDKs in play; any private ones context7 can't resolve → where their docs live |
|
|
105
|
+
| 2–3 Spec | UI verdict (arms super-ux); any scenario-tracing waiver |
|
|
106
|
+
| 4–5 Dev | base branch; worktree/branch policy; is `main` off-limits; commit convention; task tracker |
|
|
107
|
+
| 6 Tests | the test command; what "green" means here; known-red baseline; coverage expectation |
|
|
108
|
+
| 7 Lint+deploy | lint command; deploy target and path; release automation on/off; deploy-from-main rule; **deploy authorization** |
|
|
109
|
+
| 8 Post-deploy | where logs / health live (app name, endpoint, workflow) |
|
|
110
|
+
| 9 Docs+wiki | which module docs / runbooks this change updates; wiki sync yes/no |
|
|
111
|
+
|
|
112
|
+
**Deploy authorization has a hard floor.** Deploy and publish are outward and
|
|
113
|
+
irreversible, so a vague "just do everything" authorizes nothing. A standing
|
|
114
|
+
authorization counts only when it is **specific** — named target, named
|
|
115
|
+
preconditions ("staging once lint and the full suite are green; production always
|
|
116
|
+
asks"). Specific and recorded → it satisfies the stage-7 manual gate. Broader,
|
|
117
|
+
absent or ambiguous → stage 7 stops and asks.
|
|
118
|
+
|
|
119
|
+
## Output
|
|
120
|
+
|
|
121
|
+
Everything resolved goes into the **task brief**, seeded from
|
|
122
|
+
[`templates/brief.md`](../templates/brief.md) and committed to
|
|
123
|
+
`docs/superpowers/specs/YYYY-MM-DD-<topic>-brief.md` — scope, users, UI verdict,
|
|
124
|
+
constraints, locked decisions, the autonomy table, done-criteria, open
|
|
125
|
+
assumptions. Seed the template only when the file is absent; never overwrite an
|
|
126
|
+
existing brief.
|
|
127
|
+
|
|
128
|
+
Plus, where the session produced them: an updated `CONTEXT.md` and any ADRs, each
|
|
129
|
+
written as the decision landed.
|
|
130
|
+
|
|
131
|
+
The operator confirms the brief. Only then does stage 1 begin.
|