task-pipeline-skill 0.17.1 → 1.1.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 +244 -0
- package/README.md +314 -135
- package/cursor/rules/task-pipeline.mdc +91 -16
- package/package.json +7 -3
- package/plugins/task-pipeline/.claude-plugin/plugin.json +2 -2
- package/plugins/task-pipeline/commands/task-pipeline.md +16 -6
- package/plugins/task-pipeline/skills/task-pipeline/SKILL.md +39 -8
- package/plugins/task-pipeline/skills/task-pipeline/pipeline.example.json +9 -4
- package/plugins/task-pipeline/skills/task-pipeline/references/acceptance.md +40 -8
- package/plugins/task-pipeline/skills/task-pipeline/references/artifacts.md +23 -11
- package/plugins/task-pipeline/skills/task-pipeline/references/audit.md +224 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/brainstorm.md +6 -4
- package/plugins/task-pipeline/skills/task-pipeline/references/build.md +8 -1
- package/plugins/task-pipeline/skills/task-pipeline/references/companion-skills.md +12 -2
- package/plugins/task-pipeline/skills/task-pipeline/references/conventions.md +17 -3
- package/plugins/task-pipeline/skills/task-pipeline/references/grill.md +37 -4
- package/plugins/task-pipeline/skills/task-pipeline/references/knowledge-sources.md +159 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/loop-guard.md +8 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/planning.md +5 -3
- package/plugins/task-pipeline/skills/task-pipeline/references/review.md +2 -1
- package/plugins/task-pipeline/skills/task-pipeline/references/stages.md +73 -11
- package/plugins/task-pipeline/skills/task-pipeline/references/tdd.md +5 -0
- package/plugins/task-pipeline/skills/task-pipeline/templates/brief.md +24 -1
- package/plugins/task-pipeline/skills/task-pipeline/templates/carryover.md +23 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,249 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v1.1.0 — 2026-07-29
|
|
4
|
+
|
|
5
|
+
**The pipeline could find a requirement that was named and lost. It could not find
|
|
6
|
+
one that was never named.** Every gate compares two things — and a contradiction has
|
|
7
|
+
two sides while **an absence has one**. Nothing in a diff between spec and plan
|
|
8
|
+
reveals the error path nobody specified, the entity nobody gave an owner, the
|
|
9
|
+
failure mode nobody thought of. This release adds the pass that can.
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- **`references/audit.md` — the audit ladder, cross-cutting.** Eight rungs of one
|
|
13
|
+
deliverable (requirement → decision → spec section → contract **and its failure
|
|
14
|
+
behavior** → plan task → change → **executed** test → surface/docs) and, more
|
|
15
|
+
importantly, the **seam between each pair**, each with its own question: did the
|
|
16
|
+
decision reach the spec; does the section say what happens when the contract
|
|
17
|
+
fails; does every contract have a task (stage 4's set-equality covers REQ→task and
|
|
18
|
+
nothing covers contract→task); did the DoD land in the diff; would this test still
|
|
19
|
+
pass with the production code deleted; can a user reach it and does a doc say so;
|
|
20
|
+
and finally — does what shipped satisfy the requirement's own *statement* rather
|
|
21
|
+
than the task's instructions.
|
|
22
|
+
- **Stage 10 now opens with the ladder walk, before the coverage table.** An absence
|
|
23
|
+
found there becomes a **new REQ row with its check**, and *then* the table is
|
|
24
|
+
written. Appending after the table is exactly how acceptance goes green over a
|
|
25
|
+
gap. Findings that belong to a lower layer go back to that layer (spec → stage 3,
|
|
26
|
+
plan → stage 4) instead of being patched in place at the last stage.
|
|
27
|
+
- **Findings are ordered by seam, never by file.** A file-ordered list reads as
|
|
28
|
+
noise; a seam-ordered one names *which layer of your own process is leaking*,
|
|
29
|
+
which is the part worth knowing.
|
|
30
|
+
- **Bottom-up, and that is not taste.** A missing artefact low on the ladder makes
|
|
31
|
+
everything above it meaningless — top-down you spend the pass polishing a surface
|
|
32
|
+
for a contract that does not exist. Bottom-up, the absence is finding #1 and the
|
|
33
|
+
six findings above it collapse into it.
|
|
34
|
+
|
|
35
|
+
### Added — three rules that stop the audit becoming another loop
|
|
36
|
+
- **Every pass changes the axis, not the effort.** A searching loop does not
|
|
37
|
+
oscillate the way an editing loop does — it **converges**, because each pass edits
|
|
38
|
+
the corpus the next pass reads, so the newest edits are always the
|
|
39
|
+
least-reviewed text present and are what the next pass finds. Measured over seven
|
|
40
|
+
passes on a production repository: by pass six, ten of thirteen findings were
|
|
41
|
+
caused by pass five's own fixes, while the raw count still looked healthy. So the
|
|
42
|
+
doctrine requires **two counts per pass** — new findings, and self-inflicted ones —
|
|
43
|
+
and names the crossover as the signal to **rotate the axis**: seams down one
|
|
44
|
+
deliverable, then invariants across deliverables, then one class swept end to end.
|
|
45
|
+
- **A class that repeats twice becomes a gate, not a note.** Once is an incident;
|
|
46
|
+
twice is a category, and a category belongs in the host's lint or CI where nobody
|
|
47
|
+
has to remember it. Writing the third instance into the ledger is how a
|
|
48
|
+
mechanical defect class becomes permanent. Wired into the stage-5 fix loop too.
|
|
49
|
+
- **What can't be fixed now becomes a ratchet, never a TODO.** The carry-over ledger
|
|
50
|
+
is now defined as a *named, counted set that may only shrink, printed beside every
|
|
51
|
+
gate verdict* — `carry-over: 4 open (was 6) · unresolved: 0`. A TODO is invisible
|
|
52
|
+
until somebody opens the file; a ratchet sits next to the word `PASS` on every
|
|
53
|
+
run, so **"green" never reads as "verified"** — it reads as *"green, and here is
|
|
54
|
+
exactly what was not looked at"*. A ratchet that grew needs one sentence saying
|
|
55
|
+
why.
|
|
56
|
+
|
|
57
|
+
### Added — the exit criterion that is usually skipped
|
|
58
|
+
- **A green result from an unproven check is worth nothing.** A deliverable is not
|
|
59
|
+
audited when somebody has read it; it is audited when every rung has its artefact
|
|
60
|
+
**and every check being relied on has fired at least once against a planted
|
|
61
|
+
defect.** This is `tdd.md`'s iron law — *if you didn't watch it fail, you don't
|
|
62
|
+
know it tests the right thing* — raised from one test to every gate, linter and
|
|
63
|
+
script in the run, and it is now part of the stage-10 gate. Checks written under
|
|
64
|
+
pressure lie in ways that read as success: a predicate that inspects the wrong
|
|
65
|
+
shape, a probe that reads its own over-deletion as a pass, a regex that misses the
|
|
66
|
+
word it searches for. All three pass loudly.
|
|
67
|
+
|
|
68
|
+
### Changed
|
|
69
|
+
- `loop-guard.md` and `audit.md` now state their seam explicitly in both files: the
|
|
70
|
+
loop guard governs loops that **change** things and trips on oscillation; the
|
|
71
|
+
audit governs loops that **look** for things and trips on convergence. Different
|
|
72
|
+
failure, different exit, and an agent reading either one now learns when the other
|
|
73
|
+
applies.
|
|
74
|
+
- `tdd.md` names the generalisation of its own iron law; `build.md`'s fix loop gains
|
|
75
|
+
the repeats-twice rule; `templates/carryover.md` documents the ratchet contract.
|
|
76
|
+
|
|
77
|
+
### Validator
|
|
78
|
+
- `references/audit.md` joins the built-in-doctrine set (must exist, must not be a
|
|
79
|
+
stub, must be reachable from `SKILL.md`).
|
|
80
|
+
- The shipped acceptance gate must require the ladder walk **and** say that an
|
|
81
|
+
absence becomes a new REQ row — a config where stage 10 only compares the REQ list
|
|
82
|
+
now fails.
|
|
83
|
+
- Both guards ship with CI negative self-tests, and both were proven the way this
|
|
84
|
+
release demands: defect planted, check watched failing, defect removed.
|
|
85
|
+
|
|
86
|
+
## v1.0.0 — 2026-07-28
|
|
87
|
+
|
|
88
|
+
**1.0.** Eighteen releases in ten days added a stage, a requirement spine, a
|
|
89
|
+
decomposition pass and a loop guard; this one adds nothing and instead makes the
|
|
90
|
+
whole thing coherent enough to depend on. Every file was read against every other
|
|
91
|
+
file, the contradictions between them are fixed, and the repo now carries the
|
|
92
|
+
surface a stranger needs before they trust it.
|
|
93
|
+
|
|
94
|
+
What 1.0 promises: the stage flow (0 intake + 1→10), `pipeline.schema.json`, the
|
|
95
|
+
artifact layout in `references/artifacts.md`, and the two install paths are stable.
|
|
96
|
+
Breaking any of them means a 2.0.
|
|
97
|
+
|
|
98
|
+
### Fixed — contradictions between doctrine files
|
|
99
|
+
- **Two names for one idea.** `brainstorm.md` told the agent to split an oversized
|
|
100
|
+
task into "sub-projects", each with its own spec→plan→build cycle;
|
|
101
|
+
`decomposition.md` — the file that actually owns the procedure — calls them
|
|
102
|
+
**modules**, cuts them at the end of stage 2, and runs stages 3→10 per module
|
|
103
|
+
against a committed module map. An agent that read the first file ran a
|
|
104
|
+
decomposition the second file's gate could not check. Brainstorm now hands off to
|
|
105
|
+
`decomposition.md` by name.
|
|
106
|
+
- **The same split, invented twice.** `planning.md` independently told stage 4 to
|
|
107
|
+
"split the spec into one plan per subsystem" — a second, unrecorded decomposition
|
|
108
|
+
two stages after the one with the gate and the map. A plan now covers exactly one
|
|
109
|
+
spec; a multi-subsystem spec arriving at stage 4 is a missed stage-2
|
|
110
|
+
decomposition and goes back there.
|
|
111
|
+
- **A hardcoded `main`.** `build.md` and `review.md` both built the final
|
|
112
|
+
whole-branch review package with `git merge-base main HEAD`, in a pipeline whose
|
|
113
|
+
stage-0 brief records the base branch precisely because it is not always `main`.
|
|
114
|
+
On any repo with a `master`, a `develop` or a stacked base, the final review saw
|
|
115
|
+
the wrong diff. Both now read the brief's base.
|
|
116
|
+
- **A five-status set that claimed to have four.** `acceptance.md` listed four
|
|
117
|
+
statuses, declared "there is no fifth status", then named `unknown` in the next
|
|
118
|
+
clause. Reworded so the mechanism is legible: four ways to close, and anything
|
|
119
|
+
that fits none of them is `unknown`, which fails the gate.
|
|
120
|
+
- **A version pin on someone else's contract.** The README and `stages.md` both
|
|
121
|
+
pinned super-ux's scenario format at "ux-contract v4" — the exact cross-repo
|
|
122
|
+
version skew this project ported its own doctrine in-house to avoid. Both now
|
|
123
|
+
point at the contract super-ux itself ships, with no version named here.
|
|
124
|
+
- **A blockquote where a sentence should be.** In `knowledge-sources.md` the
|
|
125
|
+
precedence chain `code > host docs and ADRs > the wiki > memory` wrapped so the
|
|
126
|
+
second line *began* with `>`, which Markdown renders as a block quote —
|
|
127
|
+
the rule about which source wins was visually broken in the file that defines it.
|
|
128
|
+
- **`skills[]` entries that resolve to nothing.** `pipeline.example.json` names
|
|
129
|
+
`task-pipeline:grill` and `host:lint` beside real skills, with no key anywhere for
|
|
130
|
+
the two prefixes. A host copying the example had no way to tell a notional label
|
|
131
|
+
from an installable skill. The convention is now stated in the config and in
|
|
132
|
+
`SKILL.md`: `task-pipeline:<name>` is this skill's own `references/<name>.md`,
|
|
133
|
+
`host:<name>` is the host project's command per `conventions.md`, everything else
|
|
134
|
+
is a real skill. Stage 3 also gained the `/ux` entry point and `/ux-lint`, which
|
|
135
|
+
the doctrine mandates and the config had omitted.
|
|
136
|
+
- **A repo tree that had drifted.** `references/artifacts.md`'s map of this
|
|
137
|
+
repository listed `templates/` outside the tree and missed several files.
|
|
138
|
+
- A broken ordered list in the Cursor rule (`3a.` is not a list marker) and a
|
|
139
|
+
`references/` index in `SKILL.md` that never mentioned `templates/`.
|
|
140
|
+
|
|
141
|
+
### Added — the open-source surface
|
|
142
|
+
- `CONTRIBUTING.md` — dev setup, the repository layout, and **the nine invariants**
|
|
143
|
+
written out with the failure each one prevents: four-way version sync, the stage
|
|
144
|
+
list living on three machine-checked surfaces, every human-facing description
|
|
145
|
+
having to name the flow's final stage last, no hardcoded vendor model ids, no
|
|
146
|
+
unreachable reference file, no external provider in the default flow, stage 0 and
|
|
147
|
+
stage 10 staying manual, the frontmatter budget, and resolving links.
|
|
148
|
+
- `SECURITY.md` — what the executable surface actually is (two installers, a
|
|
149
|
+
validator, two workflows), private reporting with a 72-hour acknowledgement, and
|
|
150
|
+
an explicit scope: doctrine that would lead an agent to exfiltrate secrets, push
|
|
151
|
+
to an unnamed repo or deploy without a go **is** a security bug here.
|
|
152
|
+
- `CODE_OF_CONDUCT.md`, GitHub issue forms (bug / doctrine change, with routing to
|
|
153
|
+
super-ux and obsidian-wiki), and a pull-request template whose checklist is the
|
|
154
|
+
list of surfaces that drift.
|
|
155
|
+
- `CLAUDE.md` — house rules for any agent working in this repo, which is also what
|
|
156
|
+
this pipeline's own stage-0 harvest reads first: the commands, the branch and
|
|
157
|
+
commit policy, the invariants, and the docs that must be updated in the same
|
|
158
|
+
change. The project now dogfoods the convention it asks of every host.
|
|
159
|
+
- **Two validator guards, each with a CI negative self-test:** the open-source root
|
|
160
|
+
files must exist, and `npm test` must actually run the validator. A documented
|
|
161
|
+
check nobody can run is a check nobody runs.
|
|
162
|
+
|
|
163
|
+
### Changed
|
|
164
|
+
- **README rewritten.** Same substance, ordered so it can be read: a one-paragraph
|
|
165
|
+
statement of the problem, a Mermaid diagram of the flow with gate types coloured,
|
|
166
|
+
the gate table, *what you get*, then a quickstart — before the deep sections.
|
|
167
|
+
Configuration, install/update and a documentation map now live in their own
|
|
168
|
+
places instead of interleaved with doctrine.
|
|
169
|
+
- Package, marketplace and plugin descriptions rewritten — shorter, and all three
|
|
170
|
+
now say the same thing about the same ten stages.
|
|
171
|
+
- npm metadata: a `test` script (`npm test`), a `bugs` URL, `homepage` at the README.
|
|
172
|
+
- `.worktrees/` is git-ignored — stage 5 creates them.
|
|
173
|
+
|
|
174
|
+
> The open-source surface above shipped in v0.18.1, hours earlier the same day;
|
|
175
|
+
> it is restated here because it is part of what 1.0 means.
|
|
176
|
+
|
|
177
|
+
## v0.18.1 — 2026-07-28
|
|
178
|
+
|
|
179
|
+
Open-source hygiene pass — the repo is public, so the files a first-time
|
|
180
|
+
contributor looks for now exist, and the validator keeps them there.
|
|
181
|
+
|
|
182
|
+
### Added
|
|
183
|
+
- `CONTRIBUTING.md`, `SECURITY.md`, `CODE_OF_CONDUCT.md`, issue forms and a
|
|
184
|
+
pull-request template.
|
|
185
|
+
- `CLAUDE.md` — house rules for any agent working in this repo: the commands, the
|
|
186
|
+
branch and commit policy, and the invariants that drift most often.
|
|
187
|
+
- The validator now requires the open-source root files, with a CI negative
|
|
188
|
+
self-test that deletes `CONTRIBUTING.md` and proves the check fails.
|
|
189
|
+
|
|
190
|
+
### Changed
|
|
191
|
+
- npm metadata: a `test` script, a `bugs` URL, and `homepage` pointing at the
|
|
192
|
+
README. Package, marketplace and plugin descriptions rewritten so all three say
|
|
193
|
+
the same thing about the ten stages.
|
|
194
|
+
- `.worktrees/` is ignored — the pipeline creates them during stage 5.
|
|
195
|
+
|
|
196
|
+
## v0.18.0 — 2026-07-28
|
|
197
|
+
|
|
198
|
+
The grill stops opening cold. Stage 0 now reads what the project already knows
|
|
199
|
+
about the task **before** the first question, checks every answer against it, and
|
|
200
|
+
stage 9 updates the same list at the end — the loop the pipeline was missing.
|
|
201
|
+
|
|
202
|
+
### Added
|
|
203
|
+
- **Stage 0 phase 1: the knowledge harvest** (`references/knowledge-sources.md`).
|
|
204
|
+
Before question one, query what the project already knows about *this* task —
|
|
205
|
+
the code, `CLAUDE.md`/`AGENTS.md`, `CONTEXT.md` + `docs/adr/`, `docs/` and
|
|
206
|
+
`docs/ux/`, previous pipeline briefs and their carry-over ledgers, **the
|
|
207
|
+
knowledge wiki when one is installed**, and **any other repository or hosted doc
|
|
208
|
+
system the project names as its docs**. It is retrieval scoped by the task's own
|
|
209
|
+
nouns, not a read of everything: query, follow one hop, stop when the terms
|
|
210
|
+
return nothing new. Nothing is ever fetched on a guess — a doc repo is in scope
|
|
211
|
+
because the project names it.
|
|
212
|
+
- **The source ledger** — a required `## Knowledge sources` section in the brief
|
|
213
|
+
(source, what it says about this task, freshness, authority, "stale after this
|
|
214
|
+
run?"). `none found` is a valid, useful row: it tells the next run the search
|
|
215
|
+
happened and came back empty. Silence doesn't.
|
|
216
|
+
- **Answers are validated against the harvest** (`grill.md` → *Domain awareness*).
|
|
217
|
+
The cheap win is not re-asking what an ADR already answers. The one that matters:
|
|
218
|
+
**an answer nobody can check is a recollection** — people answer from memory
|
|
219
|
+
about systems they wrote a year ago, and a false premise adopted at stage 0 makes
|
|
220
|
+
every later gate pass honestly on it. So the grill quotes the source instead:
|
|
221
|
+
*"the March ADR says X, you just described Y — has it changed?"* The operator
|
|
222
|
+
**outranks every document, but only out loud** — an override quoted against its
|
|
223
|
+
source is a recorded decision, an unquoted one is an undetected divergence.
|
|
224
|
+
Precedence when sources disagree: **code > host docs/ADRs > wiki > memory.**
|
|
225
|
+
- **obsidian-wiki is the recommended knowledge base**
|
|
226
|
+
(https://github.com/ar9av/obsidian-wiki — Karpathy's LLM-wiki pattern), detected
|
|
227
|
+
via `~/.obsidian-wiki/config` or a resolving `wiki-query`/`wiki-update`.
|
|
228
|
+
Installed → queried in the harvest, synced with `wiki-update` at stage 9. Absent
|
|
229
|
+
→ the preflight prints `pip install obsidian-wiki` / `obsidian-wiki setup --vault
|
|
230
|
+
<path>` **once** and the run continues. A recommendation, never a gate; a project
|
|
231
|
+
whose `CLAUDE.md` names a different knowledge base wins.
|
|
232
|
+
- **Stage 9 closes the loop:** the stage-0 ledger *is* its work list. Every source
|
|
233
|
+
the harvest read gets updated if this run changed or disproved it — including the
|
|
234
|
+
docs the grill already proved stale, which is why those conflicts are logged in
|
|
235
|
+
phase 2 instead of only being settled out loud. Docs living in **another
|
|
236
|
+
repository** are outward: propose the edit and get an explicit go, or carry it
|
|
237
|
+
over with the exact change written down. Never a direct push to a repo the task
|
|
238
|
+
didn't name.
|
|
239
|
+
- **Autonomy-sweep row** for doc sources beyond this repo, and whether stage 9 may
|
|
240
|
+
write to them — decided at intake, like every other outward action.
|
|
241
|
+
- **Three validator guards, each with a CI negative self-test:** the brief template
|
|
242
|
+
must keep its `## Knowledge sources` section; the stage-0 gate must require the
|
|
243
|
+
harvest *and* its ledger before the interview; the stage-9 gate must name that
|
|
244
|
+
ledger as its work list. A harvest with nowhere to land degrades silently back
|
|
245
|
+
into asking from memory, which is precisely the failure it exists to stop.
|
|
246
|
+
|
|
3
247
|
## v0.17.1 — 2026-07-28
|
|
4
248
|
|
|
5
249
|
A full-repo consistency audit. v0.16.0 added a third review verdict and a tenth
|