task-pipeline-skill 0.12.0 → 1.0.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.
Files changed (27) hide show
  1. package/CHANGELOG.md +477 -0
  2. package/LICENSE +47 -0
  3. package/README.md +369 -171
  4. package/cursor/rules/task-pipeline.mdc +125 -20
  5. package/package.json +8 -4
  6. package/plugins/task-pipeline/.claude-plugin/plugin.json +15 -4
  7. package/plugins/task-pipeline/commands/task-pipeline.md +20 -8
  8. package/plugins/task-pipeline/skills/task-pipeline/SKILL.md +112 -39
  9. package/plugins/task-pipeline/skills/task-pipeline/pipeline.example.json +35 -16
  10. package/plugins/task-pipeline/skills/task-pipeline/references/acceptance.md +119 -0
  11. package/plugins/task-pipeline/skills/task-pipeline/references/artifacts.md +47 -14
  12. package/plugins/task-pipeline/skills/task-pipeline/references/brainstorm.md +108 -0
  13. package/plugins/task-pipeline/skills/task-pipeline/references/build.md +365 -0
  14. package/plugins/task-pipeline/skills/task-pipeline/references/companion-skills.md +72 -31
  15. package/plugins/task-pipeline/skills/task-pipeline/references/conventions.md +27 -3
  16. package/plugins/task-pipeline/skills/task-pipeline/references/decomposition.md +139 -0
  17. package/plugins/task-pipeline/skills/task-pipeline/references/grill.md +78 -7
  18. package/plugins/task-pipeline/skills/task-pipeline/references/knowledge-sources.md +159 -0
  19. package/plugins/task-pipeline/skills/task-pipeline/references/loop-guard.md +100 -0
  20. package/plugins/task-pipeline/skills/task-pipeline/references/planning.md +195 -0
  21. package/plugins/task-pipeline/skills/task-pipeline/references/review.md +174 -0
  22. package/plugins/task-pipeline/skills/task-pipeline/references/spec.md +144 -0
  23. package/plugins/task-pipeline/skills/task-pipeline/references/stages.md +190 -35
  24. package/plugins/task-pipeline/skills/task-pipeline/references/tdd.md +110 -0
  25. package/plugins/task-pipeline/skills/task-pipeline/templates/README.md +5 -3
  26. package/plugins/task-pipeline/skills/task-pipeline/templates/brief.md +50 -2
  27. package/plugins/task-pipeline/skills/task-pipeline/templates/carryover.md +36 -0
@@ -0,0 +1,365 @@
1
+ # Build — stage 5, built in
2
+
3
+ Executing the plan: an isolated workspace, one fresh implementer subagent per task,
4
+ a review after each task, a whole-branch review at the end. Built into this skill;
5
+ nothing to install.
6
+
7
+ > Ported from the `using-git-worktrees` and `subagent-driven-development` skills in
8
+ > [obra/superpowers](https://github.com/obra/superpowers) (MIT — see `LICENSE` →
9
+ > *Third-party*), rewritten for this pipeline: no external scripts, the ledger
10
+ > lives under `.task-pipeline/`, and model choice defers to the run's single
11
+ > confirmed model ([`model-tiering.md`](model-tiering.md)).
12
+
13
+ **Why subagents:** each task goes to an agent with a constructed context — its
14
+ brief, its interfaces, the global constraints, nothing else. It never inherits the
15
+ session's history, so it stays focused; your context stays free for coordination.
16
+
17
+ **Continuous execution:** don't check in between tasks. The operator asked for the
18
+ plan to be executed — execute it. Stop only for BLOCKED you can't resolve, a
19
+ genuine ambiguity, or completion. "Should I continue?" between tasks is noise.
20
+
21
+ **Narration:** at most one short line between tool calls. The ledger and the tool
22
+ results are the record.
23
+
24
+ **No subagents available?** (a harness without them, or a plan so small that
25
+ dispatching costs more than it saves) — run the same loop inline: same isolation,
26
+ same ledger, same TDD per task, and after each task review your own diff against
27
+ the rubric in [`review.md`](review.md) before moving on. What changes is who does
28
+ the work; the gates, the artifacts and the review discipline do not. Say plainly
29
+ that the run is inline, since a self-review is weaker evidence than a fresh
30
+ reviewer's.
31
+
32
+ ## 1. Isolation
33
+
34
+ Work never starts on `main`/`master` without the operator's explicit consent
35
+ (the stage-0 brief usually records the branch policy — read it, don't re-ask).
36
+
37
+ **Detect existing isolation first:**
38
+
39
+ ```bash
40
+ GIT_DIR=$(cd "$(git rev-parse --git-dir)" && pwd -P)
41
+ GIT_COMMON=$(cd "$(git rev-parse --git-common-dir)" && pwd -P)
42
+ git rev-parse --show-superproject-working-tree # non-empty ⇒ submodule, not a worktree
43
+ ```
44
+
45
+ - `GIT_DIR != GIT_COMMON` and **not** a submodule → you are already in a linked
46
+ worktree. Do not create another. Report the path and branch, go to *Setup*.
47
+ - Otherwise you are in a normal checkout. Honor the brief's worktree preference; if
48
+ none was recorded, ask once before creating one.
49
+
50
+ **Creating one — native tool first.** If the harness offers a worktree tool
51
+ (`EnterWorktree`, a `/worktree` command, a `--worktree` flag), use it: it owns
52
+ placement, branch creation and cleanup. Reaching for raw `git worktree add` when a
53
+ native tool exists creates state the harness can't see or clean up.
54
+
55
+ **Git fallback**, only when there is no native tool:
56
+
57
+ ```bash
58
+ # both scratch roots MUST be ignored before anything is created
59
+ git check-ignore -q .worktrees || printf '.worktrees/\n' >> .gitignore
60
+ git check-ignore -q .task-pipeline || printf '.task-pipeline/\n' >> .gitignore
61
+ git diff --quiet .gitignore || git commit -m "chore: ignore build scratch dirs" .gitignore
62
+ git worktree add ".worktrees/$BRANCH" -b "$BRANCH"
63
+ ```
64
+
65
+ Directory priority: an explicit operator preference → an existing `.worktrees/` →
66
+ an existing `worktrees/` → default `.worktrees/`. An unignored worktree directory
67
+ commits the entire tree into the repo — verify before creating. If creation fails
68
+ on a sandbox permission error, say so plainly and work in place.
69
+
70
+ **Setup + baseline.** Install dependencies the way the project does (`npm install`,
71
+ `cargo build`, `pip install -r requirements.txt`, `poetry install`, `go mod
72
+ download`), then run the test command from the brief's autonomy sweep. A dirty
73
+ baseline makes every later failure ambiguous: report failures and let the operator
74
+ decide whether to proceed.
75
+
76
+ ## 2. Workspace and ledger
77
+
78
+ Conversation memory does not survive compaction. A controller that lost its place
79
+ re-dispatches completed tasks — the most expensive failure this stage has.
80
+ **Track progress in a file, not only in todos.**
81
+
82
+ - Each plan owns a git-ignored workspace: `.task-pipeline/build/<plan-basename>/`
83
+ at the repo root. Everything for THIS plan lives there — ledger, task briefs,
84
+ implementer reports, review packages. Another plan's directory is never yours to
85
+ read or write. `.task-pipeline/` must be git-ignored — the isolation step above
86
+ adds and commits it; if you skipped that step, do it now, in its own commit, so
87
+ scratch files never land in a task's diff.
88
+ - Ledger: `<workspace>/progress.md`, first line = its identity:
89
+ `# build ledger — plan: <plan file path>`.
90
+ - **Resuming:** a task with a `Task <N>: complete` line is DONE — never
91
+ re-dispatch it; resume at the first task without one. A task whose last line is a
92
+ fix round is mid-loop: continue at the next round. A ledger naming a different
93
+ plan belongs to that plan — leave it and start your own.
94
+ - After compaction, trust the ledger and `git log` over your recollection: the
95
+ commits it names exist even when your context no longer remembers them.
96
+
97
+ Read the plan **once**, note its context and Global Constraints, create a todo per
98
+ task.
99
+
100
+ **Pre-flight conflict scan.** Before Task 1, scan the plan for tasks that
101
+ contradict each other or the Global Constraints, and for anything the plan mandates
102
+ that the review rubric ([`review.md`](review.md)) treats as a defect. Present
103
+ everything you find as **one batched question** — each finding beside the plan text
104
+ that mandates it, asking which governs. Clean scan → proceed silently.
105
+
106
+ ## 3. Models
107
+
108
+ **Default: the run's one confirmed model** ([`model-tiering.md`](model-tiering.md))
109
+ for every subagent — implementers, reviewers, fixers. Pin it explicitly on each
110
+ dispatch; an omitted model silently inherits the session's and defeats whatever the
111
+ operator recorded.
112
+
113
+ **Deviate only from the operator's recorded override map.** If the stage-0 brief
114
+ carries per-stage or per-role overrides, apply them: mechanical transcription tasks
115
+ (the plan carries the complete code, 1–2 files) can take a cheaper tier, while
116
+ integration, design and review work stays on the confirmed model. No map recorded →
117
+ no deviation, and never a silent downgrade. Turn count beats token price: the
118
+ cheapest tier routinely takes 2–3× the turns on multi-step work and costs more
119
+ overall.
120
+
121
+ **Two moments deserve more capability than the run's default** — both are
122
+ *recommendations you state out loud*, never silent switches:
123
+
124
+ - **The final whole-branch review.** If the run is on a tier below the most capable
125
+ one available, say so and offer to run this one review there; if the operator
126
+ declines or the tier doesn't exist, run it on the confirmed model and note it.
127
+ - **Fix-loop rounds 4–5.** One tier above the implementer that got stuck, when the
128
+ environment has one and the override map or the operator allows it; otherwise
129
+ say so and rely on fresh eyes alone.
130
+
131
+ ## 4. The task loop
132
+
133
+ Everything you paste into a dispatch prompt — and everything a subagent prints back
134
+ — stays in your context for the rest of the session. **Hand artifacts over as
135
+ files.**
136
+
137
+ ### 4.1 Dispatch the implementer
138
+
139
+ Record `BASE=$(git rev-parse HEAD)` before dispatching; the review package and the
140
+ fix-round diffs need it.
141
+
142
+ **Write the task brief to a file** — extract the task's full text from the plan to
143
+ `<workspace>/task-<N>-brief.md`. The brief is the single source of requirements;
144
+ exact values (numbers, strings, signatures, test cases) live **only** there.
145
+ Include the task's `Implements:` ids **with each REQ's one-line statement quoted
146
+ verbatim** — an implementer who sees only an instruction optimises the
147
+ instruction; one who sees the requirement behind it catches the case the
148
+ instruction didn't cover.
149
+
150
+ The dispatch prompt contains exactly five things:
151
+
152
+ 1. One line on where this task fits in the project.
153
+ 2. The brief path — "read this first; it is your requirements, use its values
154
+ verbatim".
155
+ 3. Interfaces and decisions from earlier tasks the brief can't know.
156
+ 4. Your resolution of any ambiguity you spotted in the brief.
157
+ 5. The report path (`<workspace>/task-<N>-report.md`) and the report contract.
158
+
159
+ Never paste accumulated history ("state after tasks 1–3") into later dispatches.
160
+ Never make a subagent read the whole plan. If an earlier task parked a finding in
161
+ the area this task touches, carry a pointer to that ledger line.
162
+
163
+ Record the implementer's agent identity: fix rounds 1–3 resume it.
164
+
165
+ **Implementer contract** (put this in the prompt):
166
+
167
+ > Read `<brief path>` first — it is your requirements. Work TDD, and no production
168
+ > code exists before a test you **watched fail**: write the failing test → run it
169
+ > and confirm it fails for the right reason → write the minimal code that passes →
170
+ > run it and confirm it passes, with the rest of the suite still green → commit.
171
+ > Assert on real behavior, never on mock behavior. Commit as you go, conventional
172
+ > commits. When done, self-review your diff, then write the full report to
173
+ > `<report path>`:
174
+ > what you built, the files touched, the commits, the test command and its
175
+ > output, decisions you made, anything you're unsure about. Return **only**:
176
+ > status (`DONE` / `DONE_WITH_CONCERNS` / `NEEDS_CONTEXT` / `BLOCKED`), the
177
+ > commit range, a one-line test summary, and your concerns. Ask before starting
178
+ > if anything in the brief is ambiguous — questions are cheaper than rework.
179
+
180
+ ### 4.2 Parallel groups — when fan-out is allowed
181
+
182
+ The plan's parallel groups ([`planning.md`](planning.md)) describe what *may* run
183
+ concurrently. Whether it actually does is this stage's call, and the constraint is
184
+ physical: **two implementers writing one working tree corrupt each other's state.**
185
+
186
+ - **Default: sequential.** One implementer at a time, review after each. Correct for
187
+ every group, and always correct when the tasks are small.
188
+ - **Fan out only when all three hold:** the tasks are in the same group (no
189
+ `depends:` between them), their file ownership is exclusive per the plan, and
190
+ **each implementer gets its own isolated worktree**. Then dispatch them together,
191
+ review each one against its own diff, and integrate the worktrees back to the
192
+ build branch one at a time, running the suite after each merge.
193
+ - **Any conflict on integration** means the plan's file ownership was wrong: stop
194
+ fanning out, finish the group sequentially, and record it in the ledger.
195
+ - Never fan out the fix loop — a task under repair belongs to one implementer.
196
+
197
+ ### 4.3 Handle the report
198
+
199
+ | Status | Action |
200
+ |---|---|
201
+ | `DONE` | Build the review package, dispatch the task review ([`review.md`](review.md)). |
202
+ | `DONE_WITH_CONCERNS` | Read the concerns first. Correctness or scope → resolve before review. Observations ("this file is getting large") → **append to the carry-over ledger**, then proceed. A concern that stays only in the report dies with the workspace. |
203
+ | `NEEDS_CONTEXT` | Supply exactly what's missing, re-dispatch. |
204
+ | `BLOCKED` | Diagnose: missing context → re-dispatch with it; needs more reasoning → a more capable model; too large → split the task; the plan itself is wrong → escalate to the operator. |
205
+
206
+ **Never** ignore an escalation, and never re-dispatch the same model with the same
207
+ prompt after a BLOCKED. If the implementer says it's stuck, something must change.
208
+ If the implementer asks a question — before or mid-task — answer it completely; do
209
+ not rush it into implementation.
210
+
211
+ ### 4.4 Review the task
212
+
213
+ Every task gets a review with **all three** verdicts — spec compliance, **REQ
214
+ satisfied**, and code quality. The implementer's self-review never substitutes for
215
+ it. Rubric, inputs, prompt templates and how to build the diff package:
216
+ [`review.md`](review.md).
217
+
218
+ The REQ verdict is the one the other two can't produce: a task can meet every line
219
+ of its brief and still miss the requirement it was written to deliver. A ❌ there
220
+ enters the fix loop like any Important finding.
221
+
222
+ A review may report **"cannot verify from diff"** items — requirements that live in
223
+ unchanged code or span tasks. They don't block the review, but you resolve each one
224
+ yourself before completing the task; you hold the cross-task context the reviewer
225
+ lacks. A confirmed gap becomes a failed spec review and enters the fix loop.
226
+
227
+ ### 4.5 The fix loop
228
+
229
+ Triggered by: spec ❌, any Critical or Important finding, or a "cannot verify" item
230
+ you confirmed as a real gap.
231
+
232
+ Two routes leave before the loop starts:
233
+
234
+ - **Minor findings** never enter it. Record each in the ledger
235
+ (`Task <N>: minor (deferred): <one-liner>`) and point the final review at that
236
+ list. A roll-up nobody reads is a silent discard.
237
+ - **A finding that conflicts with what the plan mandates** is the operator's
238
+ call: present the finding beside the plan text and ask which governs. Don't
239
+ dismiss the finding because the plan mandated it; don't fix against the plan
240
+ without asking.
241
+
242
+ Everything else loops. One round = one fix dispatch + one scoped re-review.
243
+ **Five rounds maximum per task.**
244
+
245
+ **The loop guard runs alongside the counter** ([`loop-guard.md`](loop-guard.md)):
246
+ log every repeat touch (`touch: <file> — round N — reason: <finding id>`) and trip
247
+ *before* the cap when a fix undoes an earlier fix, when the same file returns for
248
+ the same reason, or when a finding already ADDRESSED reappears. A tripped guard is
249
+ not another round: stop, name the two shapes, escalate to the layer that owns the
250
+ conflict, then re-check in a planned order.
251
+
252
+ - **Rounds 1–3:** resume the original implementer with the open findings verbatim —
253
+ its context is intact. If the harness can't message a live subagent, dispatch a
254
+ fresh one with the brief path, the report path and the findings; the report file
255
+ is the persistent memory either way.
256
+ - **Rounds 4–5:** fresh implementer, one tier up if available, framed as: "a prior
257
+ implementer attempted this task N times; you own it now — read the report file
258
+ for what was tried." A loop that survives three resumes usually means the
259
+ implementer can't see its own problem.
260
+ - **Every round:** the implementer fixes, re-runs the tests covering the amended
261
+ code, appends its fix report to the same report file, returns the short contract.
262
+ Before re-dispatching the reviewer, confirm the fix report names the covering
263
+ tests, the command run and the output.
264
+ - **The re-review is scoped** to the fix diff (`FIX_BASE`..`HEAD`, where `FIX_BASE`
265
+ is the head the previous review saw). It verdicts each finding ADDRESSED / NOT
266
+ ADDRESSED and flags new breakage in the fix diff only. New Critical/Important
267
+ breakage joins the open list; out-of-scope observations go to the ledger as
268
+ deferred minors — they never extend the loop.
269
+ - **Ledger, every round:**
270
+ `Task <N>: fix round <R>/5 (<X> addressed, <Y> open — <one-liners>; commits <a7>..<b7>)`
271
+
272
+ **In a subagent run, never fix findings yourself in the controller session** —
273
+ controller fixes skip review and pollute the context you need for coordination. In a
274
+ declared inline run you do fix them, and you still review the fix diff against the
275
+ rubric before closing the round.
276
+
277
+ **The breaker.** If round 5's re-review still leaves findings open, stop
278
+ dispatching and adjudicate each one yourself:
279
+
280
+ - **Reviewer wrong or the point contestable** → park it:
281
+ `Task <N>: parked — <finding> — ruling: <why the code stands>`.
282
+ - **Real, but nothing downstream builds on it** → park it the same way, with a
283
+ ruling saying it's real and deferred.
284
+ - **Real and load-bearing** (a later task builds on it, or it exposes a plan defect)
285
+ → **STOP**. Append `Task <N>: BLOCKED — <reason>` and report to the operator with
286
+ the finding, the plan text it collides with, and the fix history. Parking a
287
+ structural failure lets every dependent task build on it.
288
+
289
+ Adjudicate **only at the cap**. Adjudicating earlier to end a loop is pre-judging
290
+ with a nicer name. Every adjudication is a ledger line; silent discards are
291
+ forbidden.
292
+
293
+ ### 4.6 Complete the task
294
+
295
+ When the review is clean — or every open finding is parked with a ruling at the cap
296
+ — append:
297
+
298
+ - `Task <N>: complete (commits <base7>..<head7>, review clean)`, or
299
+ - `Task <N>: complete (commits <base7>..<head7>, <K> parked)`
300
+
301
+ Mark the todo complete, move on. Never start the next task while Critical/Important
302
+ findings are neither fixed nor parked-with-ruling at the cap.
303
+
304
+ ## 5. Final whole-branch review
305
+
306
+ After the last task: build a package over `MERGE_BASE`..`HEAD`
307
+ (`git merge-base "$BASE_BRANCH" HEAD`, where `$BASE_BRANCH` is the base recorded in
308
+ the stage-0 brief — never a hardcoded `main`), dispatch the whole-branch review
309
+ ([`review.md`](review.md) → *Final review*; on the run's model, escalation offered
310
+ out loud per *Models* above), and point it at the
311
+ ledger's deferred-minor and parked lines so it can triage what must be fixed before
312
+ merge.
313
+
314
+ If it returns findings, dispatch **ONE** fix subagent with the complete list — not
315
+ one fixer per finding; per-finding fixers each rebuild context and re-run suites.
316
+ Then exactly **one** scoped re-review of the fix wave. Adjudicate residuals as in
317
+ the breaker: park with rulings, or stop on load-bearing ones. There is no second
318
+ fix wave.
319
+
320
+ ## 6. Integrate, then finish
321
+
322
+ The work is in a worktree on its own branch; stages 7–9 lint, deploy and document
323
+ the **integrated** result. Close that gap here, honoring the branch policy recorded
324
+ in the stage-0 brief:
325
+
326
+ 1. **Sync with the base branch** (rebase or merge, whichever the project uses) and
327
+ re-run the full suite on the result. A branch that was green in isolation and red
328
+ after integration is red — fix it here, not at stage 7.
329
+ 2. **Land it the project's way:** merge into the base branch, or open a PR when the
330
+ project requires review. Opening a PR is outward-facing — do it only with the
331
+ operator's go or the brief's specific standing authorization.
332
+ 3. **Never force-push a shared branch**, and never land on `main` when the brief put
333
+ it off-limits.
334
+ 4. **Remove the worktree** once merged (`git worktree remove <path>`, or the native
335
+ tool that created it), and delete this plan's workspace
336
+ (`rm -rf .task-pipeline/build/<plan-basename>`) — git history is the record now.
337
+ Sibling directories belong to other plans; leave them.
338
+
339
+ If the operator's policy is "leave the branch, I'll merge it myself", stop after
340
+ step 1, say exactly where the branch is and what state it's in, and record that
341
+ stages 7–9 run against an unintegrated branch.
342
+
343
+ ## GATE (auto)
344
+
345
+ All plan tasks DONE with all three review verdicts (spec compliance, REQ satisfied,
346
+ code quality); the full test suite green; every open finding either fixed or parked
347
+ with a ruling; **every parked finding and implementer concern harvested into the
348
+ carry-over ledger** — the workspace is deleted, so nothing may stay only there;
349
+ no task left BLOCKED; the branch integrated per the brief's policy — or the
350
+ operator explicitly told you to leave it, and that is recorded. Verify it yourself;
351
+ a red suite or an unresolved BLOCKED does not advance to stage 6.
352
+
353
+ ## Rationalizations
354
+
355
+ | Excuse | Reality |
356
+ |---|---|
357
+ | "Close enough on spec compliance" | The reviewer found spec gaps ⇒ not done. Fix, or hit the cap and adjudicate. Those are the only exits. |
358
+ | "I'll fix it myself, dispatching is overhead" | In a subagent run, controller fixes skip review and pollute your context — resume the implementer. (Inline runs are the declared exception, and still review the fix diff.) |
359
+ | "One more round will converge" | Past the cap, rounds don't converge — the failure is structural. Adjudicate and route. |
360
+ | "The fix was small, skip the re-review" | Unreviewed fixes are how regressions land. Every round ends with a scoped re-review. |
361
+ | "This finding is obviously wrong, drop it" | You adjudicate at the cap, in writing. Silent discards are forbidden. |
362
+ | "Ledger bookkeeping is overhead" | The ledger is what survives compaction. Without one, controllers re-run entire completed task sequences. |
363
+ | "Two implementers in parallel will be faster" | One working tree, two writers = corrupted state. Parallel needs one worktree each. |
364
+ | "I'll paste the earlier tasks so it has context" | A fresh subagent needs its task, its interfaces and the constraints. Pasted history is pure cost. |
365
+ | "Stage 7 can merge the branch" | Stage 7 lints and deploys what is integrated. An unmerged branch means lint, deploy and docs all ran against something that is not what ships. |
@@ -1,39 +1,71 @@
1
- # Companion skills — what powers each stage, how to install, what to run
1
+ # Companions — what's built in, what's optional, what to install
2
2
 
3
- task-pipeline is a thin orchestrator; the actual work is done by companion
4
- skills. Preflight-detect each one; if a needed skill doesn't resolve, **give the
5
- operator the install line immediately** and (for required ones) stop until it's
6
- installed. Never silently degrade a required capability.
3
+ **The pipeline's doctrine is entirely built into this skill.** Stages 0, 2, 3, 4, 5,
4
+ 6 and 10 run from `references/*.md` no companion plugin, no resolution step, no
5
+ fallback path, no version skew, and no failure mode where a stage can't run because
6
+ something isn't installed.
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.
8
+ What remains is a short list of **optional** companions that make individual stages
9
+ better, plus one that is required only for user-facing work.
10
+
11
+ ## Built in — nothing to install
12
+
13
+ | Stage | Doctrine |
14
+ |---|---|
15
+ | 0 Knowledge harvest (pre-grill) | `references/knowledge-sources.md` |
16
+ | 0 Intake grill | `references/grill.md` |
17
+ | 2 Brainstorm | `references/brainstorm.md` |
18
+ | 2 Decompose (platforms only) | `references/decomposition.md` |
19
+ | 3 Spec | `references/spec.md` |
20
+ | 4 Plan | `references/planning.md` |
21
+ | 5 Build (isolation, subagents, fix loop) | `references/build.md` + `references/review.md` |
22
+ | 5–6 TDD + suite gate | `references/tdd.md` |
23
+ | 10 Acceptance (REQ close-out) | `references/acceptance.md` |
24
+ | any repeating loop | `references/loop-guard.md` |
11
25
 
12
26
  ## The matrix
13
27
 
14
28
  | Skill / tool | Needed for | Required? | Install |
15
29
  |---|---|---|---|
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` |
17
30
  | **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`) |
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 | — |
19
31
  | **context7** (MCP) | stage 1 docs study | Recommended (web-search fallback) | connect the context7 MCP server |
20
- | **wiki-update** | stage 9 wiki sync | Optional (skip wiki if absent) | user's wiki skill set |
32
+ | **[obsidian-wiki](https://github.com/ar9av/obsidian-wiki)** (`wiki-query`, `wiki-update`) | **stage 0 harvest** (query what's already known) **+ stage 9 sync** | **Recommended** never a gate; absent → harvest runs on repo docs alone | `pip install obsidian-wiki` `obsidian-wiki setup --vault /path/to/your/vault` |
33
+ | ~~superpowers~~ | — | **Not a dependency.** Stages 2/4/5/6 run on the built-in doctrine above. See *Optional bridge* | — |
34
+ | ~~grill-me / grilling~~ | — | **Not a dependency.** The stage-0 grill is built in (`references/grill.md`) | — |
35
+
36
+ ## Optional bridge — substituting an external skill set
37
+
38
+ An operator who already runs an equivalent skill set may map it onto stages 2/4/5/6
39
+ in their `pipeline.json` → `skills[]`, e.g. `superpowers:brainstorming`,
40
+ `superpowers:writing-plans`, `superpowers:using-git-worktrees`,
41
+ `superpowers:subagent-driven-development`, `superpowers:test-driven-development`.
42
+
43
+ Rules for that bridge:
44
+
45
+ - **It is a substitution, never a requirement.** Nothing detects it, nothing
46
+ recommends it, nothing waits for it, and its absence is never an error.
47
+ - **The gates still govern.** Whatever runs a stage, `stages.md` decides when the
48
+ stage is done.
49
+ - **Never mix providers inside one stage** — either the built-in doctrine runs it or
50
+ the substitute does; interleaving two review loops produces neither.
21
51
 
22
52
  ## Preflight (emit before stage 0)
23
53
 
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:
54
+ Detect the optional companions and print ONE block — companions **plus the model
55
+ decision** (`model-tiering.md`), so the operator arms the whole run in a single
56
+ exchange:
27
57
 
28
58
  ```
29
- Pipeline companions:
30
- superpowers ready
31
- ✗ super-ux — this task looks user-facing; recommended. Install:
59
+ Pipeline companions (stage doctrine is built in — nothing to install for it):
60
+ super-ux this task looks user-facing; required for the UX track:
32
61
  /plugin marketplace add ssheleg/super-ux
33
62
  /plugin install super-ux@super-ux
34
63
  ✓ context7 — ready
35
- wiki-update ready
36
- intake grill — built in, no install needed
64
+ obsidian-wiki recommended: stage 0 queries it before grilling you,
65
+ stage 9 syncs back what this run learned:
66
+ pip install obsidian-wiki
67
+ obsidian-wiki setup --vault /path/to/your/vault
68
+ (running without it — the harvest uses repo docs only)
37
69
 
38
70
  🧠 Model for this run: recommended <top tier available>. You're on <current>.
39
71
  /model <id> to switch, or "keep current", or name per-stage overrides.
@@ -42,11 +74,14 @@ Install the ✗ items you want, answer the model line, then say "continue".
42
74
  ```
43
75
 
44
76
  Rules:
45
- - Only flag **super-ux** as recommended when the task implies a UI (the stage-0
46
- grill decides this; when unsure, flag it a false positive costs one install).
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.
77
+
78
+ - Only flag **super-ux** when the task implies a UI (the stage-0 grill decides;
79
+ when unsure, flag it a false positive costs one install).
80
+ - **obsidian-wiki**: detect via `~/.obsidian-wiki/config` or a resolving
81
+ `wiki-query`/`wiki-update`. Present say `✓ ready` and use it in the harvest.
82
+ Absent → print the two install lines **once** and continue; never ask twice in a
83
+ run and never block a stage on it ([`knowledge-sources.md`](knowledge-sources.md)).
84
+ - **Never gate any stage on an install** except the stage-3 UX track on a UI task.
50
85
  - Optional tools missing → state the fallback, don't block.
51
86
  - Re-detect after the operator installs; don't assume.
52
87
  - The model answer goes into the brief. Don't ask again per stage
@@ -54,13 +89,19 @@ Rules:
54
89
 
55
90
  ## Credit
56
91
 
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.
92
+ The built-in doctrine is **ported, not depended on**:
93
+
94
+ - The stage-0 grill is adapted from Matt Pocock's `grilling` / `grill-with-docs`
95
+ skills (MIT, https://github.com/mattpocock/skills).
96
+ - Stages 2–6 are adapted from the `brainstorming`, `writing-plans`,
97
+ `using-git-worktrees`, `subagent-driven-development`, `test-driven-development`
98
+ and `requesting-code-review` skills in obra/superpowers (MIT,
99
+ https://github.com/obra/superpowers).
100
+
101
+ Both notices live in the repo `LICENSE` → *Third-party*.
61
102
 
62
103
  ## Hand-off the other direction
63
104
 
64
- super-ux's `/ux` menu can hand off *to* this pipeline (its "execute
65
- autonomously" action). When entered that way the UX chain already exists — see
66
- `stages.md` → 0 *Entry-from-super-ux short-circuit*: verify, don't rebuild.
105
+ super-ux's `/ux` menu can hand off *to* this pipeline (its "execute autonomously"
106
+ action). When entered that way the UX chain already exists — see `stages.md` → 0
107
+ *Entry-from-super-ux short-circuit*: verify, don't rebuild.
@@ -1,7 +1,10 @@
1
- # Host conventions (stages 6–9)
1
+ # Host conventions (stage 0 harvest, stages 6–10)
2
2
 
3
3
  The orchestrator is project-agnostic. For tests / lint / deploy / docs / wiki it reads the
4
4
  **host project's `CLAUDE.md` / `AGENTS.md` first**, then falls back to detection.
5
+ The same files are the stage-0 harvest's first stop — they are where a project
6
+ names its doc repos, its knowledge base and its house rules
7
+ ([`knowledge-sources.md`](knowledge-sources.md)).
5
8
  Prefer explicit host instructions over detection; if a step's convention can't be
6
9
  found, surface it and **ask** rather than guessing.
7
10
 
@@ -30,6 +33,27 @@ found, surface it and **ask** rather than guessing.
30
33
  CI: the workflow run. Hit the health endpoint if one is defined.
31
34
 
32
35
  ## Docs + wiki
36
+ - **Start from the stage-0 source ledger** ([`knowledge-sources.md`](knowledge-sources.md)):
37
+ the sources the harvest read are the sources this stage updates. Anything the run
38
+ proved stale is already listed there with what's wrong.
33
39
  - Host self-update rules (module docs, runbooks, agent-self cards, etc.) — update
34
- in the same change. Wiki: the `wiki-update` skill (resolves the vault via
35
- `~/.obsidian-wiki/config`). Fix dangling links.
40
+ in the same change. Fix dangling links.
41
+ - **Wiki:** [obsidian-wiki](https://github.com/ar9av/obsidian-wiki) the
42
+ `wiki-update` skill (resolves the vault via `~/.obsidian-wiki/config`). Detect it
43
+ the same way the harvest does; if absent, recommend it once
44
+ (`pip install obsidian-wiki` → `obsidian-wiki setup --vault <path>`) and continue.
45
+ A project may of course use a different knowledge base — then its own
46
+ `CLAUDE.md` names the sync command, and that wins.
47
+ - **Docs in another repository** (a docs repo, a submodule, a sibling checkout the
48
+ project names): updating it is **outward** — propose the change, get an explicit
49
+ operator go, open a PR there. Never push to a repo the task didn't name.
50
+
51
+ ## Issue tracker (stage 10)
52
+
53
+ Acceptance parks what wasn't delivered: every `deferred` REQ and every unresolved
54
+ carry-over row needs a **home** — an issue, a backlog entry, a ticket id. Read the
55
+ host's convention (`CLAUDE.md` usually names the tracker and the id format; else
56
+ detect: a `.github/ISSUE_TEMPLATE/`, a Linear/Jira reference in recent commits, a
57
+ `TODO.md`). Never invent a tracker, and never close a run on "we'll remember it" —
58
+ if no tracker exists, write the row into the repo's backlog file and say where it
59
+ went.