task-pipeline-skill 1.47.0 → 1.47.2
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
CHANGED
|
@@ -1,5 +1,66 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v1.47.2 — the body stopped retelling its own references
|
|
4
|
+
|
|
5
|
+
`Prerequisites` was 2585 of the body's 6585 tokens, and most of it was a second
|
|
6
|
+
telling: super-ux, the bridge, the grill, the harvest, the documentation gate and the
|
|
7
|
+
retrospective each have a reference that carries them in full. The body now keeps what
|
|
8
|
+
a reference cannot — the traps, and the one hard requirement — and points at the rest.
|
|
9
|
+
|
|
10
|
+
What stayed inline, deliberately: **the stage-3 spec gate stops** on a UI task with no
|
|
11
|
+
super-ux; the grill's single sanctioned bypass; **the retro is read two ways** and the
|
|
12
|
+
difference matters (standing instructions in full because they bind and are bounded,
|
|
13
|
+
the recent log queried because nothing caps it); a stale code graph is a false premise
|
|
14
|
+
**carrying the authority of a machine**, since a wrong doc gets argued with and a wrong
|
|
15
|
+
graph gets believed; and the operator outranks any document **only out loud**.
|
|
16
|
+
|
|
17
|
+
~6585 → ~6180 tokens against a 5000 budget. **Still over, and the rest is not a trim.**
|
|
18
|
+
What remains is `How to run` and `Stages` — the operating instructions themselves —
|
|
19
|
+
and moving those out is a decision about what a reader must have in hand before the
|
|
20
|
+
first stage, not a compression exercise. It is coupled to the description question the
|
|
21
|
+
v1.47.0 entry recorded: both are about what this one file is obliged to carry.
|
|
22
|
+
|
|
23
|
+
## v1.47.1 — the fixes a reader found, which three releases shipped without
|
|
24
|
+
|
|
25
|
+
v1.46.0 was tagged and published from a commit that carried this branch's doctrine and
|
|
26
|
+
none of the three commits answering the reviewer. The defects below were already found
|
|
27
|
+
and already fixed when the release went out; this is them arriving.
|
|
28
|
+
|
|
29
|
+
**`docs/DOCMAP.md` forbade the register shipping beside it.** It said, in as many words,
|
|
30
|
+
that no `docs/DECISIONS.md` is created here deliberately — and the release shipped that
|
|
31
|
+
file. The old rule was right about the risk and wrong about the mechanism: `OQ-####`
|
|
32
|
+
closes with `Resolved→DEC-####`, and a CHANGELOG version heading cannot be that target,
|
|
33
|
+
because two decisions in one release collapse to a single pointer. SSOT is kept by
|
|
34
|
+
direction now — the reason lives in `DECISIONS.md`, the CHANGELOG points at the id. The
|
|
35
|
+
reversal is `DEC-0003`, because a register that appears without a decision is exactly
|
|
36
|
+
the fork the old rule feared.
|
|
37
|
+
|
|
38
|
+
**`HOW-IT-WORKS.md` called itself the version it was written under.** Its first line
|
|
39
|
+
promises a rewrite every release and names the banner as the freshness signal; the
|
|
40
|
+
banner read 1.45.0 while every other surface read 1.46.0. Corrected, and the two
|
|
41
|
+
releases that landed from another session are named for what they were, so the gap in
|
|
42
|
+
the version history is explained rather than silent.
|
|
43
|
+
|
|
44
|
+
**An absolute rule keeps every keyword while an appended clause reverses it.** This
|
|
45
|
+
release found that class, guarded it on stage 10's criterion 13, and left `residue.md`'s
|
|
46
|
+
two absolute rules on plain substring presence — *"never released by this run, unless it
|
|
47
|
+
has clearly expired"* passed. Sweeping the fix to its siblings then produced the reason
|
|
48
|
+
to sweep it structurally: the second copy of the carve-out pattern had its escaping
|
|
49
|
+
doubled, so it matched a literal backslash and walked past every inversion while looking
|
|
50
|
+
correct. One home now — `_EXCEPTION_MARKER` and the `_carve_out` helper that reads it —
|
|
51
|
+
with two call sites.
|
|
52
|
+
|
|
53
|
+
**A probe demanded a dependency the harness disclaims.** `res8` required PyYAML to be
|
|
54
|
+
installed; the guard it tests degrades honestly without it. `test:all` was red on any
|
|
55
|
+
machine lacking it. Three branches now: the guard fired, the guard said it could not
|
|
56
|
+
look, or neither — and only the third is an error.
|
|
57
|
+
|
|
58
|
+
Also: the owner-row check went through `_row_cells` instead of a hand-rolled regex, as
|
|
59
|
+
that helper's own docstring asks; and a reflow that fixed a 157-character line had
|
|
60
|
+
orphaned two words onto a five-character one.
|
|
61
|
+
|
|
62
|
+
Guards: 291 → **294**.
|
|
63
|
+
|
|
3
64
|
## v1.47.0 — a green suite that cannot speak for an agent
|
|
4
65
|
|
|
5
66
|
The suite gate at stage 6 assumes the thing under test is deterministic: run it twice,
|
package/HOW-IT-WORKS.md
CHANGED
|
@@ -5,7 +5,7 @@ explains the machine — what routes a request into it, what each stage refuses
|
|
|
5
5
|
let past, and what makes any claim it prints believable. The README sells it and
|
|
6
6
|
tells you how to install it; this file tells you how it thinks.
|
|
7
7
|
|
|
8
|
-
> **Version 1.
|
|
8
|
+
> **Version 1.47.1.** The "What changed" section at the bottom carries the last
|
|
9
9
|
> few releases. Everything above it describes the pipeline as it is *now*, not as
|
|
10
10
|
> it was designed.
|
|
11
11
|
|
|
@@ -238,7 +238,7 @@ This is the part most pipelines skip, and it is the reason this one is trustwort
|
|
|
238
238
|
rather than merely tidy.
|
|
239
239
|
|
|
240
240
|
**Every guard is proven against a planted defect.** `npm run test:all` breaks the
|
|
241
|
-
thing each of the **
|
|
241
|
+
thing each of the **294** checks is about, and requires that check to reject it. A
|
|
242
242
|
guard that has never been watched failing is not a guard; it is a comment.
|
|
243
243
|
|
|
244
244
|
**The neighbour probe.** A check has a *subject* — the rule it is about — and
|
|
@@ -291,7 +291,28 @@ a run diverges → retro entry → retro.publish → upstream issue
|
|
|
291
291
|
|
|
292
292
|
## What changed, by version
|
|
293
293
|
|
|
294
|
-
### v1.
|
|
294
|
+
### v1.47.1 — the fixes a reader found, which three releases shipped without
|
|
295
|
+
Three releases went out from another session while this branch was reviewed, and
|
|
296
|
+
each carried the same defects forward: the doc map forbidding the decisions register
|
|
297
|
+
shipping beside it, this file naming a version two releases stale, two absolute rules
|
|
298
|
+
invertible by an appended clause, a probe demanding PyYAML the harness disclaims, and
|
|
299
|
+
a probe that stopped reproducing its own hazard when its target string was quoted —
|
|
300
|
+
which leaves `main`'s own suite red. Every one was found and fixed before the first
|
|
301
|
+
of those releases; this is them arriving.
|
|
302
|
+
|
|
303
|
+
### v1.47.0 / v1.46.0 — shipped from another session
|
|
304
|
+
A green suite that cannot speak for an agent; and this branch's residue, completion
|
|
305
|
+
honesty, proportionate verification and improvement-iteration doctrine, which reached
|
|
306
|
+
main through the merge commit rather than through this branch's own release.
|
|
307
|
+
|
|
308
|
+
v1.46.0 was tagged from a commit carrying this branch's doctrine and none of the
|
|
309
|
+
three commits answering its reviewer. The doc map forbade the decisions register
|
|
310
|
+
shipping beside it; this file called itself the version it was written under; two
|
|
311
|
+
absolute rules were guarded by substring alone and inverted by an appended clause;
|
|
312
|
+
and a probe demanded PyYAML the harness disclaims. All four were found and fixed
|
|
313
|
+
before the release went out, and arrived after it.
|
|
314
|
+
|
|
315
|
+
### v1.46.0 — what a run leaves running, what "done" costs to say, what a check is for
|
|
295
316
|
Four rules the pipeline had been following by disposition rather than by doctrine.
|
|
296
317
|
**Residue**: eight classes of thing a run leaves running or leaves behind, enumerated
|
|
297
318
|
by class and never by one tool — the case that produced it was a task inventory
|
|
@@ -304,6 +325,12 @@ the deliverable is the working result and the check is how you know — scaled t
|
|
|
304
325
|
issue resolves when behaviour changed and its close names the address; unworked ones
|
|
305
326
|
accumulate visibly rather than being triaged into silence. Guards: 275 → 291.
|
|
306
327
|
|
|
328
|
+
### v1.45.1 / v1.45.0 — shipped from another session while this branch was paused
|
|
329
|
+
The reference routing existed three times over and was cut to one home; the guard
|
|
330
|
+
count the self-test plants into was restored. Neither is this branch's work — they
|
|
331
|
+
are here because they hold the version numbers this branch was originally built
|
|
332
|
+
under, which is why it ships as 1.46.0.
|
|
333
|
+
|
|
307
334
|
### v1.44.0 — six lessons from other projects, and the guards that hold them
|
|
308
335
|
Six issues published by runs in other repositories were worked into doctrine:
|
|
309
336
|
seam testing at stage 6, `verified by` names that must resolve, a probe's green
|
package/SKILL-CARD.md
CHANGED
|
@@ -12,7 +12,7 @@ harmless.
|
|
|
12
12
|
|---|---|
|
|
13
13
|
| **Purpose** | Runs a substantial task through ten gated delivery stages — intake grill, docs study, brainstorm, spec, plan, subagent build, tests, lint/deploy, post-deploy, docs+registers, acceptance — refusing to advance until each gate passes |
|
|
14
14
|
| **Owner** | ssheleg ([github.com/ssheleg/task-pipeline](https://github.com/ssheleg/task-pipeline)) |
|
|
15
|
-
| **Version** | 1.47.
|
|
15
|
+
| **Version** | 1.47.2 |
|
|
16
16
|
| **Surface** | Claude Code (filesystem skill + plugin) and the vercel `skills` CLI. **Not** uploaded to the Skills API; custom Skills do not sync across surfaces |
|
|
17
17
|
| **Dependencies** | None required. Optional: `context7` (MCP), `figma` (MCP), super-ux, agent-sync, graphify, obsidian-wiki. Every stage's doctrine ships in-repo; the one conditional requirement is super-ux for the stage-3 UX track on a user-facing task |
|
|
18
18
|
| **Evaluation status** | Suite authored, 5 categories. One recorded run, **self-observed by the author**; **zero blind runs on zero of three models** — the split, and the numbers, live in [`evals/RESULTS.md`](evals/RESULTS.md) and are computed by `evals/run.py` |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "task-pipeline-skill",
|
|
3
|
-
"version": "1.47.
|
|
3
|
+
"version": "1.47.2",
|
|
4
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"
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "task-pipeline",
|
|
3
3
|
"displayName": "Task Pipeline",
|
|
4
4
|
"description": "Runs a substantial task through a mandatory built-in intake grill, then 10 gated stages (docs, brainstorm+decompose, spec, plan, subagent build, tests, lint/deploy, post-deploy, docs/wiki, acceptance). Every stage's doctrine is built into the skill — no companion plugin required — with typed auto/manual gates, a frozen requirement spine that closes with evidence, a work board and a verification ledger that outlive a run, an exposure line naming what shipped unconfirmed, a progress rail computed from the project's own config, a loop guard whose review ceiling measures rather than stops, and stage-3 tracks for what a product does, how it sounds and how it looks. Two modes need no task: `checkup` (what is unverified) and `setup` (audit existing docs). Retro insights can publish upstream as issues, opt-in and redacted.",
|
|
5
|
-
"version": "1.47.
|
|
5
|
+
"version": "1.47.2",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "ssheleg",
|
|
8
8
|
"url": "https://x.com/sshlg93"
|
|
@@ -74,98 +74,66 @@ gate stops until it is installed.
|
|
|
74
74
|
| run-wide · whether a **human** ever confirmed what shipped, and when | `references/verification.md` |
|
|
75
75
|
| run-wide · how much unconfirmed work has piled up, and what to look at first | `references/exposure.md` |
|
|
76
76
|
|
|
77
|
-
**Optional bridge.**
|
|
77
|
+
**Optional bridge.** An equivalent skill set the operator already runs (e.g.
|
|
78
78
|
`superpowers:brainstorming` / `writing-plans` / `subagent-driven-development` /
|
|
79
|
-
`using-git-worktrees` / `test-driven-development`)
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
requirements, each naming how it will be verified. Stages 3–5 trace to those ids,
|
|
113
|
-
stage 4's gate is a mechanical set-comparison against them, and **stage 10 accounts
|
|
114
|
-
for every one** — which is what turns the pipeline from a funnel into a circle.
|
|
115
|
-
|
|
116
|
-
**Harvest before you ask.** Stage 0 opens with a **knowledge harvest**
|
|
117
|
-
(`references/knowledge-sources.md`), not a
|
|
118
|
-
question: pull what the project already knows about this task from the code, the
|
|
119
|
-
**code graph** if one is built
|
|
120
|
-
(`references/knowledge-graph.md` — graphify;
|
|
121
|
-
recommended, never required),
|
|
122
|
-
`CLAUDE.md`, `CONTEXT.md`/ADRs, **the decision register**, `docs/` + `docs/ux/`,
|
|
123
|
-
past pipeline briefs, **the retro's standing instructions and run stamps** —
|
|
124
|
-
`docs/superpowers/retro.md`, read in full because they *bind* this run and are
|
|
125
|
-
bounded by construction (ten rows; one line per run), while its **recent log** and the
|
|
126
|
-
archive under `docs/superpowers/retro/` are **queried** by the task's nouns
|
|
127
|
-
(`references/retrospective.md`) —
|
|
128
|
-
the **knowledge wiki** if one is installed
|
|
129
|
-
([obsidian-wiki](https://github.com/ar9av/obsidian-wiki) — recommended, never
|
|
130
|
-
required) and any **other repo or hosted doc system the project names as its
|
|
131
|
-
docs**. Write the source ledger into the brief, then interview *against* it: every
|
|
132
|
-
answer that touches a source is checked against that source, and the operator
|
|
133
|
-
outranks any document — but only out loud, so an override is a recorded decision
|
|
134
|
-
instead of an undetected divergence. The same ledger is stage 9's work list.
|
|
79
|
+
`using-git-worktrees` / `test-driven-development`) can be mapped onto stages 2/4/5/6
|
|
80
|
+
in `pipeline.json` → `skills[]`. That is a **substitution, never a requirement**: the
|
|
81
|
+
built-in doctrine is normative, the gates in `references/stages.md` still govern, and
|
|
82
|
+
nothing detects, recommends or waits for an external provider.
|
|
83
|
+
|
|
84
|
+
**super-ux — recommended for ANY user-facing task**, and the one thing that can stop a
|
|
85
|
+
gate. The moment a task implies an interface (web / mobile / CLI / TUI — the stage-0
|
|
86
|
+
grill detects it early), the WHY→UI→scenario chain runs through `/ux`,
|
|
87
|
+
`ux-foundation`, `ux-flows`, `ux-scenarios` and the `/ux-lint` linter, which belongs in
|
|
88
|
+
the host's CI so UX drift cannot merge. **Not installed on a UI task? The stage-3 spec
|
|
89
|
+
gate stops** — offer `/plugin marketplace add ssheleg/super-ux` and
|
|
90
|
+
`/plugin install super-ux@super-ux` (or `npx skills add ssheleg/super-ux`) and wait.
|
|
91
|
+
Details: `references/companion-skills.md`.
|
|
92
|
+
|
|
93
|
+
**The grill is built in and mandatory** (`references/grill.md`). No "clear enough task"
|
|
94
|
+
exemption, no stage 1 without a committed, operator-confirmed brief; the one sanctioned
|
|
95
|
+
bypass is the entry-from-super-ux short-circuit, and even that demands a scope
|
|
96
|
+
confirmation. It produces the **REQ spine** — the request as an addressable list, each
|
|
97
|
+
row naming how it is verified. Stages 3–5 trace to those ids, stage 4's gate is a
|
|
98
|
+
mechanical set-comparison against them, and **stage 10 accounts for every one**, which
|
|
99
|
+
is what turns the pipeline from a funnel into a circle.
|
|
100
|
+
|
|
101
|
+
**Harvest before you ask** (`references/knowledge-sources.md`). Stage 0 opens by
|
|
102
|
+
pulling what the project already knows about *this* task — the code and its graph,
|
|
103
|
+
`CLAUDE.md`, `CONTEXT.md`/ADRs, the decision register, `docs/` and `docs/ux/`, past
|
|
104
|
+
briefs, the wiki, and whatever else the project names as its docs. **The retro is read
|
|
105
|
+
two ways and the difference matters:** its standing instructions and run stamps are
|
|
106
|
+
read **in full** because they bind this run and are bounded by construction; its recent
|
|
107
|
+
log and archive are **queried** by the task's nouns, because nothing caps them
|
|
108
|
+
(`references/retrospective.md`). Write the source ledger into the brief and interview
|
|
109
|
+
*against* it: every answer touching a source is checked against it, and the operator
|
|
110
|
+
outranks any document — **but only out loud**, so an override is a recorded decision
|
|
111
|
+
rather than an undetected divergence. That ledger is also stage 9's work list.
|
|
135
112
|
|
|
136
113
|
**Three artifacts close a run, not two.** Stage 9 syncs the docs, the wiki **and the
|
|
137
|
-
code graph** (`/graphify . --update`)
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
`references/
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
*
|
|
159
|
-
|
|
160
|
-
stage 10 is therefore the **retrospective**
|
|
161
|
-
(`references/retrospective.md`, written to
|
|
162
|
-
`docs/superpowers/retro.md`): **stamp the run first** — one line, and the only thing
|
|
163
|
-
that makes the next step computable — **then prune**, every standing instruction
|
|
164
|
-
checked against its retirement triggers (it became a check · its surface is gone · it
|
|
165
|
-
hasn't fired in five run stamps **or in sixty days** — the calendar is the unit that
|
|
166
|
-
still moves when the stamp counter has stopped), the list held to a hard cap of **ten**, every
|
|
167
|
-
deletion logged, then write an entry **only if the run diverged** (symptom, the
|
|
168
|
-
stage that *owned* it, root cause, fix, and the check that catches it next time).
|
|
114
|
+
code graph** (`/graphify . --update`). The graph is what the next run's harvest queries
|
|
115
|
+
first, so a stale one is a false premise **carrying the authority of a machine** —
|
|
116
|
+
a wrong doc gets argued with, a wrong graph gets believed. Refreshing it buys the
|
|
117
|
+
graph↔docs divergence check; doc-side findings are fixed at stage 9, absences become
|
|
118
|
+
REQ rows at stage 10 (`references/knowledge-graph.md`, `references/audit.md`).
|
|
119
|
+
|
|
120
|
+
**Documentation is a deliverable, and it has a gate** (`references/documentation.md`).
|
|
121
|
+
A second stage-0 phase asks the four questions that make docs a *system* — where
|
|
122
|
+
settled things live, each fact's single home, what a change of type X obliges, what
|
|
123
|
+
proves it — and writes them to `docs/DOCMAP.md`. From then the **Doc Loop** fires
|
|
124
|
+
whenever anything is settled, at **any** stage rather than only at stage 9; the stage-9
|
|
125
|
+
sweep walks the **propagation matrix** (the harvest ledger names what you *read*, the
|
|
126
|
+
matrix names what you *owe*); and *"docs in sync"* becomes a command with an exit code.
|
|
127
|
+
|
|
128
|
+
**The run teaches the next run, and the list stays short**
|
|
129
|
+
(`references/retrospective.md`). Every gate is good at *this* run and blind across
|
|
130
|
+
runs, so one class of failure can be caught, fixed and forgotten five times with
|
|
131
|
+
nothing noticing it is the same one. Stage 10's last act: **stamp the run first** — the
|
|
132
|
+
only thing that makes the next step computable — **then prune** every standing
|
|
133
|
+
instruction against its retirement triggers, hold the list to a hard cap of **ten**,
|
|
134
|
+
log every deletion, and write an entry **only if the run diverged** (symptom, the stage
|
|
135
|
+
that *owned* it, root cause, fix, and the check that catches it next time).
|
|
136
|
+
|
|
169
137
|
Stage 0 reads those standing instructions in full, which is exactly why the prune is
|
|
170
138
|
a gate criterion and not a good intention: a rule nobody reads to the end is worse
|
|
171
139
|
than no rule, because everyone believes it is covered. **The order is load-bearing,
|