task-pipeline-skill 0.17.1 → 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.
package/README.md CHANGED
@@ -4,24 +4,61 @@
4
4
  [![validate](https://github.com/ssheleg/task-pipeline/actions/workflows/validate.yml/badge.svg)](https://github.com/ssheleg/task-pipeline/actions/workflows/validate.yml)
5
5
  [![license](https://img.shields.io/badge/license-MIT-blue)](LICENSE)
6
6
 
7
- Full-cycle task delivery pipeline orchestrator for **Claude Code**. One skill that
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.
7
+ **A full-cycle delivery pipeline for coding agents.** One skill takes a substantial
8
+ task, interrogates it into a complete brief, then walks it through ten gated stages
9
+ and refuses to advance until each gate passes.
10
10
 
11
- ## What it does
11
+ Agents write code well and judge *when to stop asking you things* badly. A
12
+ substantial task becomes twenty interruptions, or a confident build that skipped
13
+ the tests and quietly delivered two thirds of what you asked for. `task-pipeline`
14
+ front-loads every decision into one intake conversation, then runs to the end
15
+ without checking in — and closes by accounting for every requirement, from a list
16
+ rather than from memory.
17
+
18
+ Built for **Claude Code**, and installable into any agent that reads skills
19
+ (Cursor, Codex, OpenCode, …). Every stage's doctrine ships **inside the skill** —
20
+ no companion plugin, nothing to resolve, nothing that breaks when a dependency is
21
+ missing.
22
+
23
+ ---
24
+
25
+ ## The flow
26
+
27
+ ```
28
+ intake grill → docs study → brainstorm + decompose → spec → plan → subagent build
29
+ → tests → lint/deploy → post-deploy log check → docs/wiki sync → acceptance
30
+ ```
12
31
 
13
- `intake grill → docs study → brainstorm + decompose → spec → plan → subagent build →
14
- tests → lint/deploy → post-deploy log check → docs/wiki sync → acceptance`
32
+ ```mermaid
33
+ flowchart TD
34
+ S0["0 · Harvest + intake grill<br/>brief · REQ table · source ledger"]
35
+ S1["1 · Docs study"]
36
+ S2["2 · Brainstorm + decompose"]
37
+ S3["3 · Spec — UX track first, if UI"]
38
+ S4["4 · Plan"]
39
+ S5["5 · Dev — worktree, subagents, TDD"]
40
+ S6["6 · Tests"]
41
+ S7["7 · Lint + deploy"]
42
+ S8["8 · Post-deploy"]
43
+ S9["9 · Docs + wiki"]
44
+ S10["10 · Acceptance"]
45
+
46
+ S0 --> S1 --> S2 --> S3 --> S4 --> S5 --> S6 --> S7 --> S8 --> S9 --> S10
47
+ S10 -. "platform: next module" .-> S3
48
+ S10 -. "accounts for every REQ in the brief" .-> S0
49
+
50
+ classDef manual fill:#fde68a,stroke:#b45309,color:#111827
51
+ classDef auto fill:#dbeafe,stroke:#1d4ed8,color:#111827
52
+ class S0,S2,S3,S7,S10 manual
53
+ class S1,S4,S5,S6,S8,S9 auto
54
+ ```
15
55
 
16
- It **grills you first, always**: stage 0 is mandatory a one-line task ("make me
17
- feature X") is expanded, one question at a time, into a locked brief, and the grill
18
- also sweeps stages 1→10 for anything that would stop the run later. Each stage gates
19
- the next. Every gate is typed — **auto** (the orchestrator verifies it, pass/fail)
20
- or **manual** (waits for your go). One model, confirmed before the run starts.
56
+ Every gate is **typed**: `auto` the orchestrator verifies it itself, pass/fail
57
+ (blue); `manual` it waits for your explicit go (amber).
21
58
 
22
59
  | # | Stage | Gate | Type |
23
60
  |---|---|---|---|
24
- | 0 | Intake grill — **mandatory** | shared understanding + autonomy sweep; brief locked | manual |
61
+ | 0 | Harvest + intake grill — **mandatory** | source ledger written; shared understanding + autonomy sweep; brief locked | manual |
25
62
  | 1 | Docs study | contracts grounded on current docs | auto |
26
63
  | 2 | Brainstorm + decompose | design approved; UI verdict recorded; every REQ answered; platform: module map approved | manual |
27
64
  | 3 | Spec | committed + reviewed; UI: super-ux chain validated, linter green | manual |
@@ -30,18 +67,40 @@ or **manual** (waits for your go). One model, confirmed before the run starts.
30
67
  | 6 | Tests | full suite green, new code covered | auto |
31
68
  | 7 | Lint + deploy | lint clean + suite green before deploy | manual |
32
69
  | 8 | Post-deploy | clean boot / honest degradation | auto |
33
- | 9 | Docs + wiki | docs + wiki synced | auto |
70
+ | 9 | Docs + wiki | every stale source-ledger row updated; docs + wiki synced | auto |
34
71
  | 10 | **Acceptance** | every REQ accounted for with evidence; operator signs off | manual |
35
72
 
36
- These stages (0 intake + 1→10) are the plugin's **example** flow. It's a machine-readable config
37
- ([`pipeline.example.json`](plugins/task-pipeline/skills/task-pipeline/pipeline.example.json))
38
- against a universal contract
39
- ([`pipeline.schema.json`](plugins/task-pipeline/skills/task-pipeline/pipeline.schema.json)):
40
- a host project copies the example to `pipeline.json` and rewrites it with its own
41
- stages (any count), its own `skills[]`, and its own `auto`/`manual` gate types
42
- "bring your own skills". The framework bakes in no fixed stages.
73
+ ## What you get
74
+
75
+ - **The intake grill asks what a senior engineer would ask** before anything is
76
+ touched — scope, edge cases, failure modes, rollback, who the user is — so the
77
+ build does not stall halfway through.
78
+ - **Every stage has a gate.** No code before a spec. No deploy before tests. No
79
+ "done" before the post-deploy logs have been read.
80
+ - **Nothing falls out the back.** The request becomes a frozen, addressable list of
81
+ requirements, and the last stage accounts for every one of them with evidence.
82
+ - **Team discipline without a team.** ADRs, a written plan, a real test suite, a
83
+ wiki entry — produced as part of the work, not promised for later.
84
+ - **It adapts to your repo, not the reverse.** Deploy, docs and wiki conventions
85
+ are read from the host project, so nothing is imposed.
43
86
 
44
- ## Everything is built in — zero required dependencies
87
+ ## Quickstart
88
+
89
+ ```
90
+ /plugin marketplace add ssheleg/task-pipeline
91
+ /plugin install task-pipeline@task-pipeline
92
+ ```
93
+
94
+ Then say *"run this through the pipeline"*, *"the full cycle"*, or invoke
95
+ `/task-pipeline <one-line task>`. Russian phrasings (*"полный цикл"*, *"прогони по
96
+ конвейеру"*) route the same way. The skill creates a TaskList with one entry per
97
+ stage and walks the gates. See [Install](#install) for the other channels.
98
+
99
+ ---
100
+
101
+ ## What makes it different
102
+
103
+ ### Everything is built in — zero required dependencies
45
104
 
46
105
  The doctrine each stage runs on ships inside the skill. Nothing to install for it,
47
106
  nothing to resolve at preflight, no version skew with someone else's repo, and no
@@ -49,15 +108,16 @@ stage that can fail because a plugin is missing:
49
108
 
50
109
  | Stage | Built-in doctrine |
51
110
  |---|---|
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 |
111
+ | 0 Knowledge harvest | [`knowledge-sources.md`](plugins/task-pipeline/skills/task-pipeline/references/knowledge-sources.md) — source list, the wiki, the ledger, the stage-9 loop-back |
112
+ | 0 Intake grill | [`grill.md`](plugins/task-pipeline/skills/task-pipeline/references/grill.md) — interview loop, domain awareness, autonomy sweep |
113
+ | 2 Brainstorm | [`brainstorm.md`](plugins/task-pipeline/skills/task-pipeline/references/brainstorm.md) — approaches, YAGNI, the no-code-before-approval gate |
114
+ | 2 Decompose | [`decomposition.md`](plugins/task-pipeline/skills/task-pipeline/references/decomposition.md) — platforms only: brick criteria, module map, build order |
115
+ | 3 Spec | [`spec.md`](plugins/task-pipeline/skills/task-pipeline/references/spec.md) — UX-track order, locked contracts, global constraints, self-review |
116
+ | 4 Plan | [`planning.md`](plugins/task-pipeline/skills/task-pipeline/references/planning.md) zero-context tasks, parallel groups, no placeholders |
117
+ | 5 Build | [`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 |
118
+ | 5–6 TDD | [`tdd.md`](plugins/task-pipeline/skills/task-pipeline/references/tdd.md) — the iron law, red/green/refactor, the suite gate |
119
+ | 10 Acceptance | [`acceptance.md`](plugins/task-pipeline/skills/task-pipeline/references/acceptance.md) — REQ coverage table, evidence rules, the closing question |
120
+ | any loop | [`loop-guard.md`](plugins/task-pipeline/skills/task-pipeline/references/loop-guard.md) — churn detection, caps, the break protocol |
61
121
 
62
122
  **Ported, not depended on.** Stage 0 is adapted from
63
123
  [Matt Pocock's `grilling` / `grill-with-docs`](https://github.com/mattpocock/skills)
@@ -70,21 +130,14 @@ and stages 2–6 from the corresponding skills in
70
130
  requirement — the gates still govern, and nothing detects, recommends or waits for
71
131
  an external provider.
72
132
 
73
- ## Intake grill (stage 0) — mandatory
133
+ ### The intake grill (stage 0) — mandatory
74
134
 
75
- Inspired by [Matt Pocock's grill-me](https://github.com/mattpocock/skills). Before
76
- any technical work, task-pipeline interviews you relentlessly one question per
77
- turn, each with a recommended answer, exploring the codebase before asking until
78
- every decision branch is resolved and locked into a **task brief**. There is no
79
- "clear enough task" exemption: no stage-1 work starts without a committed,
135
+ Before any technical work, task-pipeline interviews you relentlessly — one question
136
+ per turn, each with a recommended answer, exploring the codebase before asking —
137
+ until every decision branch is resolved and locked into a **task brief**. There is
138
+ no "clear enough task" exemption: no stage-1 work starts without a committed,
80
139
  confirmed brief.
81
140
 
82
- **Built in — nothing to install.** The full doctrine ships inside the skill
83
- ([`references/grill.md`](plugins/task-pipeline/skills/task-pipeline/references/grill.md)):
84
- no companion skill, no resolution step, no fallback path, no version skew. Adapted
85
- from [Matt Pocock's grill-with-docs](https://github.com/mattpocock/skills) (MIT —
86
- see [LICENSE](LICENSE) → *Third-party*).
87
-
88
141
  **Domain awareness.** While exploring, the grill reads the project's own
89
142
  `CONTEXT.md` / `docs/adr/` and holds you to them — calling out terms that conflict
90
143
  with the glossary, replacing overloaded words with a canonical one, stress-testing
@@ -94,15 +147,57 @@ decisions that are hard to reverse, surprising without context **and** the resul
94
147
  a real trade-off get an ADR. Both files are created lazily.
95
148
 
96
149
  **Autonomy comes from the sweep.** Beyond the task itself, the grill pre-resolves
97
- everything that would otherwise interrupt stages 1→10: which external libs need docs,
98
- branch and task-tracker policy, the test command and what "green" means, the lint
99
- command, the deploy target and its **authorization**, where logs and health live,
100
- which docs and runbooks to update, and the model. Each gets an answer or an explicit
101
- "stop and ask me here" — an unasked question is a scheduled interruption. Deploy
102
- authorization has a hard floor: a standing go counts only if it names the target and
103
- the preconditions.
150
+ everything that would otherwise interrupt stages 1→10: which external libs need
151
+ docs, branch and task-tracker policy, the test command and what "green" means, the
152
+ lint command, the deploy target and its **authorization**, where logs and health
153
+ live, which docs and runbooks to update, and the model. Each gets an answer or an
154
+ explicit "stop and ask me here" — an unasked question is a scheduled interruption.
155
+ Deploy authorization has a hard floor: a standing go counts only if it names the
156
+ target and the preconditions.
157
+
158
+ ### Knowledge harvest — read the project before asking the person
159
+
160
+ Stage 0 doesn't open with a question. It opens by finding what the project already
161
+ knows about this task
162
+ ([`knowledge-sources.md`](plugins/task-pipeline/skills/task-pipeline/references/knowledge-sources.md)):
163
+ the code, `CLAUDE.md`, `CONTEXT.md` and the ADRs, `docs/` and `docs/ux/`, previous
164
+ pipeline briefs and their carry-over ledgers, **the knowledge wiki if you have one**,
165
+ and **any other repository or hosted doc system your project names as its docs**. It's
166
+ retrieval scoped by the task's own nouns, not a read of everything, and it ends with a
167
+ **source ledger** written into the brief — one row per source, what it says, how
168
+ fresh, and whether this run makes it stale.
169
+
170
+ That buys two things. The cheap one: you don't get asked what an ADR already
171
+ answers. The one that matters: **an answer nobody can check is a recollection.**
172
+ People answer from memory about systems they wrote a year ago, and without the
173
+ document in hand there is no way to tell a decision from a misremembering — so the
174
+ run builds on it and every later gate passes honestly on a false premise. With the
175
+ harvest in hand the grill quotes the source instead: *"the March ADR says orders go
176
+ through the command handler, you just described a direct write — has that changed?"*
177
+ You outrank every document, but **only out loud**: an override quoted against its
178
+ source is a recorded decision, an unquoted one is an undetected divergence. When two
179
+ sources disagree, precedence is code > host docs/ADRs > wiki > memory.
180
+
181
+ Then the loop closes: **stage 9 updates exactly what stage 0 read.** Every doc the
182
+ run proved stale is already in the ledger with what's wrong, so "docs updated" means
183
+ the sources the next run will trust — not just the files this change happened to
184
+ touch.
185
+
186
+ **The wiki is [obsidian-wiki](https://github.com/ar9av/obsidian-wiki)** (Karpathy's
187
+ LLM-wiki pattern), and it's the one source that carries *why* across projects and
188
+ across months. Detected via `~/.obsidian-wiki/config` or a resolving `wiki-query`.
189
+ Installed → queried at stage 0, synced with `wiki-update` at stage 9. Not installed →
190
+ recommended once, with the line, and the run continues:
104
191
 
105
- ## The REQ spine — why nothing falls out the back
192
+ ```bash
193
+ pip install obsidian-wiki
194
+ obsidian-wiki setup --vault /path/to/your/vault
195
+ ```
196
+
197
+ It is a **recommendation, never a gate** — no stage blocks on a missing wiki, and
198
+ nothing asks twice in one run.
199
+
200
+ ### The REQ spine — why nothing falls out the back
106
201
 
107
202
  Every gate before the last one asks *"is this artifact good?"* — none asks *"does
108
203
  this still contain everything that was asked for?"* Scope doesn't leak inside a
@@ -136,12 +231,12 @@ Stage 10 closes the circle with the question the pipeline exists to be able to
136
231
  answer from a list rather than from memory: *here's what you asked for, here's what
137
232
  shipped, here's what's deferred and where it lives — what's missing?*
138
233
 
139
- ## Platforms — decomposed into bricks, built one at a time
234
+ ### Platforms — decomposed into bricks, built one at a time
140
235
 
141
236
  A one-feature task runs the pipeline once. A **platform** — several independent
142
237
  capabilities, several separately shippable surfaces, requirements no single
143
238
  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)).
239
+ written ([`decomposition.md`](plugins/task-pipeline/skills/task-pipeline/references/decomposition.md)).
145
240
 
146
241
  Modules are cut **by capability, never by layer** ("Ordering", "Billing" — not
147
242
  "Controllers", "Services"), and a candidate is only a brick when it is
@@ -158,7 +253,7 @@ stopped. Each module's spec is a full dossier: architecture, entities and
158
253
  ownership, contracts in and out with their failure behavior, business rules, edge
159
254
  and failure cases, UI/Figma chain, limits, open questions.
160
255
 
161
- ## Loop guard — churn is detected, not endured
256
+ ### Loop guard — churn is detected, not endured
162
257
 
163
258
  Any repeating pass can start undoing the previous one: two shapes alternating, the
164
259
  same file rewritten round after round, a finding that was closed coming back. That
@@ -176,7 +271,7 @@ module map), re-plans the check as an ordered checklist with one verification
176
271
  command per item, and goes through it one at a time. A higher-layer conflict is
177
272
  never settled inside a lower loop.
178
273
 
179
- ## UX track (user-facing tasks) — super-ux recommended
274
+ ### UX track (user-facing tasks) — super-ux recommended
180
275
 
181
276
  The moment a task touches any user-facing surface (web / mobile / CLI / TUI — a
182
277
  screen, command, or visible behavior), [super-ux](https://github.com/ssheleg/super-ux)
@@ -185,26 +280,82 @@ installed, task-pipeline uses it; if not, it gives you the install line on the s
185
280
  The spec stage runs it **before any plan is written**: `/ux` (setup check) →
186
281
  `ux-foundation` (personas, JTBD, **customer journey maps**, user stories) →
187
282
  `ux-flows` (user flows + `screens.md` UI map, Figma frames) → `ux-scenarios`
188
- (usage scenarios validated against the base, ux-contract v4) → `/ux-lint` (must pass). The
189
- spec then embeds the UX layer — scenario IDs, CJM stages served, applicable UX
190
- patterns — and the plan's UI tasks carry scenario IDs in their DoD. Scenarios come
191
- before interface.
192
-
193
- ## Prerequisites
194
-
195
- **None for the pipeline itself** — the doctrine for every stage ships inside the
196
- skill (see *Everything is built in* above).
197
-
198
- **super-ux** (only for user-facing tasks) — https://github.com/ssheleg/super-ux
283
+ (usage scenarios validated against super-ux's own scenario-format contract) →
284
+ `/ux-lint` (must pass). The spec then embeds the UX layer — scenario IDs, CJM
285
+ stages served, applicable UX patterns — and the plan's UI tasks carry scenario IDs
286
+ in their DoD. Scenarios come before interface.
199
287
 
200
288
  ```
201
289
  /plugin marketplace add ssheleg/super-ux
202
290
  /plugin install super-ux@super-ux
203
291
  ```
204
292
 
293
+ ### Model policy — one model, confirmed once
294
+
295
+ The default recommendation is *the most capable reasoning model the environment
296
+ offers* — currently the latest Opus generation, but that's a **tier, not a string**.
297
+ Model ids go stale as generations ship, and you may be on another provider entirely,
298
+ so nothing is hardcoded: the pipeline resolves the top tier available at runtime and
299
+ stage configs use provider-agnostic tokens (`default` / `inherit`).
300
+
301
+ You confirm or override it (per-stage overrides welcome) before stage 0 — then it
302
+ **stops asking**. A skill can't switch the main-loop model; `/model` is yours.
303
+ Stage-5 subagents are pinned to the confirmed model automatically. If the
304
+ recommended tier isn't available, the pipeline says which one it's using and
305
+ continues — a reminder, never a block.
306
+
307
+ ---
308
+
309
+ ## Configure it for your project
310
+
311
+ ### Bring your own skills
312
+
313
+ Stages 0→10 above are the plugin's **example** flow. It is a machine-readable config
314
+ ([`pipeline.example.json`](plugins/task-pipeline/skills/task-pipeline/pipeline.example.json))
315
+ written against a universal contract
316
+ ([`pipeline.schema.json`](plugins/task-pipeline/skills/task-pipeline/pipeline.schema.json)):
317
+ copy the example to `pipeline.json` in your repo and rewrite it with your own stages
318
+ (any count), your own `skills[]`, and your own `auto`/`manual` gate types. The
319
+ framework bakes in no fixed stage count and no opinion on which gates are manual.
320
+
321
+ ```jsonc
322
+ {
323
+ "version": 1,
324
+ "stages": [
325
+ {
326
+ "id": 1,
327
+ "state": "spec",
328
+ "name": "Spec",
329
+ "model": "default", // 'default' = the run's confirmed model
330
+ "skills": ["your-team:spec"], // whatever your environment resolves
331
+ "gate": { "type": "manual", "check": "spec committed and reviewed" }
332
+ }
333
+ ]
334
+ }
335
+ ```
336
+
337
+ ### Release automation (optional, toggleable)
338
+
339
+ A pipeline config may declare an optional `release` block: a master `enabled`
340
+ toggle, a `trigger`, project-defined `steps`, and `verify` smoke-checks. It's **off
341
+ unless a project turns it on**, and every project configures its own. This repo's
342
+ own instance is [`.github/workflows/release.yml`](.github/workflows/release.yml) —
343
+ armed per repo by the `RELEASE_ENABLED` variable (unset = off), it validates the tag
344
+ against the manifests, cuts a GitHub release from the CHANGELOG, and smoke-tests
345
+ `npx` from a clean checkout. Copy and adapt it; nothing is hardcoded.
346
+
347
+ ### Portability
348
+
349
+ Stages 6–10 read the host project's `CLAUDE.md` conventions (tests / lint / deploy /
350
+ docs / wiki) with detection fallbacks, so the skill works in any repo. The canonical
351
+ artifact layout each stage writes to is fixed in
352
+ [`artifacts.md`](plugins/task-pipeline/skills/task-pipeline/references/artifacts.md).
353
+
354
+ ---
355
+
205
356
  ## Install
206
357
 
207
- **Plugin (recommended):**
358
+ **Claude Code plugin (recommended):**
208
359
  ```
209
360
  /plugin marketplace add ssheleg/task-pipeline
210
361
  /plugin install task-pipeline@task-pipeline
@@ -212,14 +363,14 @@ skill (see *Everything is built in* above).
212
363
 
213
364
  **Any agent via the skills CLI (Cursor, Codex, OpenCode, 70+ — not Claude Code,
214
365
  use the plugin above):**
215
- ```
366
+ ```bash
216
367
  npx skills add ssheleg/task-pipeline --agent cursor --agent codex --global
217
368
  ```
218
369
  (one repeated `--agent` per agent; never include `claude-code` while the plugin is
219
370
  installed — the plain copy shadows it)
220
371
 
221
372
  **npm installer (no clone needed):**
222
- ```
373
+ ```bash
223
374
  npx github:ssheleg/task-pipeline # straight from GitHub
224
375
  npx task-pipeline-skill # from the npm registry
225
376
  ```
@@ -227,17 +378,14 @@ npx task-pipeline-skill # from the npm registry
227
378
  on npm; installs the same skill + `/task-pipeline` command into `~/.claude`,
228
379
  idempotent, `--force` to overwrite)
229
380
 
230
- **Cursor:**
231
- ```
232
- npx skills add ssheleg/task-pipeline --agent cursor --global # global, or…
233
- ```
234
- …or per project, copy `cursor/rules/task-pipeline.mdc` into the repo's
381
+ **Cursor:** the skills CLI above with `--agent cursor`, or per project copy
382
+ [`cursor/rules/task-pipeline.mdc`](cursor/rules/task-pipeline.mdc) into the repo's
235
383
  `.cursor/rules/`. Cursor has no global rules directory — use the skills CLI for a
236
384
  global install, the `.mdc` for per-project, or paste it into Cursor Settings →
237
385
  Rules. The rule is self-contained (no external links), so it works copied anywhere.
238
386
 
239
387
  **Plain skill:**
240
- ```
388
+ ```bash
241
389
  git clone https://github.com/ssheleg/task-pipeline
242
390
  cd task-pipeline && ./install.sh
243
391
  ```
@@ -245,10 +393,10 @@ cd task-pipeline && ./install.sh
245
393
  command into `~/.claude/commands/`; idempotent — rerun skips existing installs,
246
394
  `./install.sh --force` overwrites)
247
395
 
248
- ## Updating everywhere
396
+ ### Updating
249
397
 
250
- Pick **one** channel per agent (running the plugin and the plain/skills-CLI copy
251
- on the same Claude Code install yields a duplicate skill).
398
+ Pick **one** channel per agent running the plugin and the plain/skills-CLI copy on
399
+ the same Claude Code install yields a duplicate, shadowing skill.
252
400
 
253
401
  | Agent / channel | Update |
254
402
  |---|---|
@@ -258,70 +406,47 @@ on the same Claude Code install yields a duplicate skill).
258
406
  | npm | `npx task-pipeline-skill@latest` / `npx github:ssheleg/task-pipeline` (ephemeral — always latest) |
259
407
  | Plain skill | `git pull && ./install.sh --force` |
260
408
 
261
- ## Use
262
-
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.
266
-
267
- ## Model policy
268
-
269
- **One model, confirmed once, at preflight.** The default recommendation is *the most
270
- capable reasoning model the environment offers* — currently the latest Opus
271
- generation, but that's a **tier, not a string**. Model ids go stale as generations
272
- ship, and you may be on another provider entirely, so nothing is hardcoded: the
273
- pipeline resolves the top tier available at runtime and stage configs use
274
- provider-agnostic tokens (`default` / `inherit`).
409
+ ### Prerequisites
275
410
 
276
- You confirm or override it (per-stage overrides welcome) before stage 0 then it
277
- **stops asking**. A skill can't switch the main-loop model; `/model` is yours.
278
- Stage-5 subagents are pinned to the confirmed model automatically. If the
279
- recommended tier isn't available, the pipeline says which one it's using and
280
- continues — a reminder, never a block.
281
-
282
- ## Release automation (project-configurable, toggleable)
283
-
284
- A pipeline config may declare an optional `release` block (see
285
- [`pipeline.schema.json`](plugins/task-pipeline/skills/task-pipeline/pipeline.schema.json)):
286
- a master `enabled` toggle, a `trigger`, project-defined `steps`, and `verify`
287
- smoke-checks. It's **off unless a project turns it on**, and every project
288
- configures its own. This repo's own instance is
289
- [`.github/workflows/release.yml`](.github/workflows/release.yml) — armed per repo
290
- by the `RELEASE_ENABLED` variable (unset = off), it validates the tag against the
291
- manifests, cuts a GitHub release from the CHANGELOG, and smoke-tests `npx` from a
292
- clean checkout. Copy and adapt it per project; nothing is hardcoded.
293
-
294
- ## Companion skills
411
+ **None for the pipeline itself** the doctrine for every stage ships inside the
412
+ skill. Three optional companions make individual stages better:
295
413
 
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.
414
+ | Companion | For | Required? |
415
+ |---|---|---|
416
+ | [super-ux](https://github.com/ssheleg/super-ux) | the stage-3 UX track | only for user-facing tasks |
417
+ | context7 (MCP) | stage-1 docs study | recommended web-search fallback |
418
+ | [obsidian-wiki](https://github.com/ar9av/obsidian-wiki) | stage-0 harvest + stage-9 sync | recommended never a gate |
301
419
 
302
- ## Portability
420
+ A single preflight block prints which are ready, which to install, and the model
421
+ recommendation, so you arm the whole run in one exchange. Detail:
422
+ [`companion-skills.md`](plugins/task-pipeline/skills/task-pipeline/references/companion-skills.md).
303
423
 
304
- Stages 6–10 read the host project's `CLAUDE.md` conventions (tests / lint / deploy /
305
- docs / wiki) with detection fallbacks, so the skill works in any repo. The
306
- canonical artifact layout each stage writes to is fixed in
307
- [`references/artifacts.md`](plugins/task-pipeline/skills/task-pipeline/references/artifacts.md).
424
+ ---
308
425
 
309
- ## What this gives you
426
+ ## Documentation map
310
427
 
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.
428
+ | File | What's in it |
429
+ |---|---|
430
+ | [`SKILL.md`](plugins/task-pipeline/skills/task-pipeline/SKILL.md) | the orchestrator: how to run, the stage table, the model decision |
431
+ | [`references/stages.md`](plugins/task-pipeline/skills/task-pipeline/references/stages.md) | per-stage detail and the exact gate criteria |
432
+ | [`references/artifacts.md`](plugins/task-pipeline/skills/task-pipeline/references/artifacts.md) | the canonical document layout each stage writes to |
433
+ | [`references/conventions.md`](plugins/task-pipeline/skills/task-pipeline/references/conventions.md) | how stages 6–10 read the host project's `CLAUDE.md` |
434
+ | [`references/model-tiering.md`](plugins/task-pipeline/skills/task-pipeline/references/model-tiering.md) | model policy, the `/model` reminder, overrides |
435
+ | [`templates/`](plugins/task-pipeline/skills/task-pipeline/templates/README.md) | brief, carry-over ledger, `CONTEXT.md` and ADR skeletons |
436
+ | [`CHANGELOG.md`](CHANGELOG.md) | every release, with the reasoning behind it |
437
+ | [`CONTRIBUTING.md`](CONTRIBUTING.md) | dev setup, the validator, the version-sync rule, release flow |
438
+
439
+ ## Contributing
440
+
441
+ Issues and pull requests are welcome — see [CONTRIBUTING.md](CONTRIBUTING.md) for
442
+ the repo's invariants (the structural validator, four-way version sync, and the
443
+ surfaces that must never drift apart). Security reports:
444
+ [SECURITY.md](SECURITY.md). Everyone participating is expected to follow the
445
+ [Code of Conduct](CODE_OF_CONDUCT.md).
315
446
 
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.
447
+ ```bash
448
+ npm test # python3 test/validate.py the structural validator
449
+ ```
325
450
 
326
451
  ## Author
327
452
 
@@ -340,4 +465,5 @@ npx sshlg-skills install
340
465
 
341
466
  ## License
342
467
 
343
- MIT © 2026 ssheleg.
468
+ MIT © 2026 ssheleg. Third-party portions (the ported stage doctrine) are credited
469
+ and licensed in [LICENSE](LICENSE) → *Third-party*.
@@ -28,16 +28,42 @@ recommended tier isn't available, say which one you're using and continue.
28
28
 
29
29
  Never skipped, and nothing to install — the grill is part of this rule. No "the
30
30
  task was already clear" exemption, no starting stage 1 while the user thinks. A
31
- one-line task ("build feature X") is not enough to finish autonomously. Grill the
32
- user up front, then run the rest without mid-flight questions:
31
+ one-line task ("build feature X") is not enough to finish autonomously.
32
+
33
+ **Phase 1 — harvest the sources BEFORE the first question.** Find what the project
34
+ already knows about this task and read it: the code; `CLAUDE.md` / `AGENTS.md`;
35
+ `CONTEXT.md` (or `CONTEXT-MAP.md`) and `docs/adr/`; `docs/` and `docs/ux/`; past
36
+ briefs/plans and their carry-over ledgers; **the knowledge wiki if one is
37
+ installed** — [obsidian-wiki](https://github.com/ar9av/obsidian-wiki), detect
38
+ `~/.obsidian-wiki/config` or a resolving `wiki-query`; and **any other repository
39
+ or hosted doc system the project names as its docs** (read-only, and never a source
40
+ you invented — it counts because the project names it). Query each by *this task's*
41
+ nouns; it is retrieval, not a full read; stop when the terms return nothing new.
42
+ Write a short **source ledger** into the brief — source, what it says about this
43
+ task, how fresh, and whether this run makes it stale. `none found` is a valid row.
44
+ If no wiki is installed, recommend it once and continue:
45
+ `pip install obsidian-wiki` → `obsidian-wiki setup --vault <path>`. It is never a
46
+ gate.
47
+
48
+ **Phase 2 — grill the user against that harvest**, then run the rest without
49
+ mid-flight questions:
33
50
  1. One question per turn — never bundle.
34
51
  2. Give a recommended answer with every question (+ one-line rationale).
35
52
  3. Explore the codebase before asking — if a search/read answers it, do that.
36
- 4. Walk the decision tree depth-first; ask prerequisite decisions first.
37
- 5. Reconcile contradictions; chase dodges ("decide later" "latest you can decide
53
+ 4. **Validate every answer against the harvest.** When what the user says
54
+ contradicts a doc you read, quote the doc and ask which governs: *"the March ADR
55
+ says X, you just described Y — has it changed?"* The user **outranks every
56
+ document, but only out loud** — an override quoted against its source is a
57
+ recorded decision; an unquoted one is an undetected divergence that every later
58
+ gate will pass over. When two sources disagree: code > host docs/ADRs > wiki >
59
+ memory. Whichever side loses, if it's written down somewhere, log it for the
60
+ stage-9 doc update.
61
+ 5. Walk the decision tree depth-first; ask prerequisite decisions first.
62
+ 6. Reconcile contradictions; chase dodges ("decide later" → "latest you can decide
38
63
  and still ship?").
39
- 6. Run the **autonomy sweep** — resolve now whatever would stop stages 1→10 later:
40
- external libs and where their docs live; UI verdict; base branch, branch policy,
64
+ 7. Run the **autonomy sweep** — resolve now whatever would stop stages 1→10 later:
65
+ external libs and where their docs live; **which doc sources beyond this repo are
66
+ in play and whether stage 9 may write to them**; UI verdict; base branch, branch policy,
41
67
  commit convention, task tracker; the test command and what "green" means; the
42
68
  lint command; the deploy target, release toggle and **deploy authorization**;
43
69
  where logs/health live; which docs and runbooks this change updates. Each item
@@ -127,8 +153,14 @@ not authorize an outward, irreversible action — stage 7 stops and asks.
127
153
  the stage-0 brief.
128
154
  8. **Post-deploy** (auto) — tail logs / health-check; clean boot or an honest
129
155
  degradation report (never silent success).
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.
156
+ 9. **Docs + wiki** (auto) — **the phase-1 source ledger is the work list**: every
157
+ source the harvest read gets updated if this run changed or disproved it. Module
158
+ docs and runbooks in the SAME change; the knowledge wiki via `wiki-update` when
159
+ [obsidian-wiki](https://github.com/ar9av/obsidian-wiki) is installed (absent →
160
+ recommend once, never block). Docs in **another repository** are outward:
161
+ propose the edit and get an explicit go, or carry it over with the exact change
162
+ written down. A doc that was worth reading at stage 0 and is wrong now is the
163
+ next run's false premise.
132
164
  10. **Acceptance** (manual) — the closing stage: go back to the brief and account
133
165
  for **every** REQ. One row each, status `verified` / `partial` / `deferred` /
134
166
  `dropped`, and every `verified` carries **evidence** — a passing test name, a
package/package.json CHANGED
@@ -1,10 +1,13 @@
1
1
  {
2
2
  "name": "task-pipeline-skill",
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.",
3
+ "version": "1.0.0",
4
+ "description": "Full-cycle delivery pipeline for coding agents: a mandatory built-in intake grill, then 10 gated stages (docs, brainstorm+decompose, spec, plan, build, tests, lint/deploy, post-deploy, docs/wiki, acceptance). Every stage's doctrine ships inside the skill no companion plugin required. This package is the installer CLI.",
5
5
  "bin": {
6
6
  "task-pipeline": "bin/task-pipeline.js"
7
7
  },
8
+ "scripts": {
9
+ "test": "python3 test/validate.py"
10
+ },
8
11
  "files": [
9
12
  "bin",
10
13
  "plugins",
@@ -14,7 +17,8 @@
14
17
  "CHANGELOG.md"
15
18
  ],
16
19
  "repository": "github:ssheleg/task-pipeline",
17
- "homepage": "https://github.com/ssheleg/task-pipeline",
20
+ "homepage": "https://github.com/ssheleg/task-pipeline#readme",
21
+ "bugs": "https://github.com/ssheleg/task-pipeline/issues",
18
22
  "license": "MIT",
19
23
  "author": "ssheleg",
20
24
  "engines": {