task-pipeline-skill 1.12.0 → 1.13.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 CHANGED
@@ -1,5 +1,44 @@
1
1
  # Changelog
2
2
 
3
+ ## v1.13.0 — 2026-08-05
4
+
5
+ ### Added — the read-back: four rules that existed and were never handed over
6
+
7
+ Stages 3 and 4 produced documents stating things nobody verified: that a named
8
+ check exists, that the spec agrees with decisions already made, that the
9
+ self-review happened at all, and that the change still costs what it was worth.
10
+
11
+ Five defects, and **four of them are one shape.** The rule already lived in this
12
+ bundle, in a stage that never handed it to the stage which had to obey it. The
13
+ evidence-for-checks rule sits at stages 6 and 10; the rejected-alternatives rule
14
+ sits at stage 2; `learned.md` rule 14 has sat at stage 9 since v1.4.0. Stage 3
15
+ names checks, contradicts decisions and writes DoDs — and read none of them back.
16
+
17
+ So the fix is one mechanism applied four times. `spec.md`'s self-review now asks
18
+ whether every check it names is real, reads back the brief's `Decisions locked`
19
+ table **and** the alternatives stage 2 rejected, and prints the cost.
20
+ `planning.md` asks whether every command, path and file a DoD names resolves.
21
+ `learned.md`'s stage map binds rule 14 at 3 and 4, not only at 9.
22
+
23
+ **The fifth is a genuine absence, and it prints rather than decides.** Nothing
24
+ anywhere asked whether a change had outgrown its worth. The new checkpoint counts
25
+ surfaces, guards and REQ rows now versus at stage 2 and prints all three — the
26
+ stage-3 gate is the operator's, and an agent that narrows the task on its own
27
+ judgement breaks *never narrow the task silently*.
28
+
29
+ **Both self-reviews now leave a committed trace.** A `## Self-review` section,
30
+ identical in shape across the two files, every line a **computed number rather
31
+ than a tick** — because a number nobody computed is visible as such and a
32
+ checkbox never is. `planning.md` already demanded the REQ set difference be
33
+ *printed*; this extends that principle to the rest of the checklist.
34
+
35
+ Three guards prove the files carry the items, with four probes. What they cannot
36
+ prove is that a run in someone else's repository performed a self-review — and
37
+ that boundary is stated in the spec, in the guard's own comment and here, because
38
+ a guard claiming otherwise would be the exact defect this release fixes.
39
+
40
+ Negative self-tests: 76 → 80.
41
+
3
42
  ## v1.12.0 — 2026-08-05
4
43
 
5
44
  ### Added — a gate for the defects an agent leaves behind
package/CONTRIBUTING.md CHANGED
@@ -124,6 +124,13 @@ scripts are validated by one iterated block, not two copies, and both must keep
124
124
  `# ---------- VERDICT` marker with nothing after it.
125
125
  *(guard: `the VERDICT block must be last and must `)*
126
126
 
127
+ **Stages 3 and 4 must keep reading their rules back.** `spec.md`'s self-review asks
128
+ whether every check it names is real, reads back the brief's decisions and stage 2's
129
+ rejected options, and prints the cost; `planning.md` asks whether every command a DoD
130
+ names resolves; `learned.md` binds rule 14 at both stages. Both files carry a
131
+ committed `## Self-review` section of computed numbers rather than ticks.
132
+ *(guard: `the self-review no longer asks `)*
133
+
127
134
  **11. Every reference over 100 lines carries a `## Contents` list**, and the list is
128
135
  compared against that file's own `##` headings. The guidance asks for it because a
129
136
  long file gets previewed with a partial read; the comparison is because a hand-kept
package/README.md CHANGED
@@ -129,6 +129,7 @@ until it is installed.
129
129
  | any loop | [`loop-guard.md`](plugins/task-pipeline/skills/task-pipeline/references/loop-guard.md) — churn detection, caps, the break protocol |
130
130
  | run-wide pacing | [`continuity.md`](plugins/task-pipeline/skills/task-pipeline/references/continuity.md) — the loop mode (`run.loop`, default off, never collapses a manual gate) and the context budget (fires on a harness signal, never on an estimate) |
131
131
  | 0 + 9 + any settled decision | [`documentation.md`](plugins/task-pipeline/skills/task-pipeline/references/documentation.md) — the inventory, registers and ids, SSOT, the Doc Loop, supersede semantics, the propagation matrix, intent vs as-built |
132
+ | 3 + 4 · every spec and plan | the self-review reads its rules back — is every named check real, does anything contradict a locked decision or a rejected option, and what does this cost now versus at design time. Answers land as a committed `## Self-review` of computed numbers |
132
133
  | 6–10 + any check you write | [`gates.md`](plugins/task-pipeline/skills/task-pipeline/references/gates.md) — the two axes, the promotion ladder, gate anatomy, the probe recipe, ratchet floors |
133
134
  | any agent-time enforcement | [`hooks.md`](plugins/task-pipeline/skills/task-pipeline/references/hooks.md) — the `PreToolUse` contract, the fail-open hazard, the Claude-Code-only limit |
134
135
 
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.12.0 |
15
+ | **Version** | 1.13.0 |
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 (15 evals, 5 categories). **Never executed** — see [`evals/RESULTS.md`](evals/RESULTS.md) |
@@ -38,7 +38,7 @@ apply.
38
38
  instruction surface, and every one is linked directly from `SKILL.md`.
39
39
  2. Read `templates/docgate.sh` before seeding it; it is the only shipped script a
40
40
  host project will run on its own repository.
41
- 3. Run `npm run test:all` — 76 guards, each with a negative self-test that plants a
41
+ 3. Run `npm run test:all` — 80 guards, each with a negative self-test that plants a
42
42
  defect and requires rejection.
43
43
  4. Run `python3 evals/run.py` for the behavioural protocol, and read
44
44
  `evals/RESULTS.md` for what has actually been observed.
@@ -54,7 +54,7 @@ apply.
54
54
  - **Versions are pinned by git tag** and mirrored into `sshlg-skills`'s catalogue.
55
55
  Rollback is `git checkout v<previous>` or pinning the previous plugin version;
56
56
  the previous version is never deleted.
57
- - **Behavioural evidence is missing, not merely thin.** 76 structural guards prove
57
+ - **Behavioural evidence is missing, not merely thin.** 80 structural guards prove
58
58
  the skill is well-formed. Until `evals/RESULTS.md` carries a dated run, nothing in
59
59
  this repository proves it *behaves* — triggers correctly, stays quiet on a
60
60
  question, or performs the steps it documents.
@@ -197,6 +197,13 @@ not authorize an outward, irreversible action — stage 7 stops and asks.
197
197
  exact values every later task inherits. Self-review it for placeholders,
198
198
  contradictions, ambiguity and scope before showing it. For UI tasks, run the UX
199
199
  chain FIRST (see super-ux below) and embed it.
200
+ **Before handing a spec or a plan over, read your rules back:** does every
201
+ check you named actually exist (or say `review`)? does anything here
202
+ contradict a decision already locked, including an option deliberately
203
+ rejected? how many surfaces, guards and requirements is this now versus
204
+ when the design was approved — print all three and let the operator
205
+ decide. Leave the answers as a committed `Self-review` section of
206
+ computed numbers, not ticks.
200
207
  4. **Plan** (auto) — every task names the REQ ids it `Implements:`, and the set of those ids must **equal** the brief's REQ set — a difference is scope lost, print it and fix it. Zero-context tasks: exact paths, complete code in every step,
201
208
  the exact command and its expected output, TDD steps, DoD each, dependency graph
202
209
  + parallel groups, non-overlapping file ownership. **No placeholders** — no TBD,
package/evals/RESULTS.md CHANGED
@@ -37,7 +37,7 @@ or it belongs in a check.
37
37
  | Dated runs recorded | **0** | 2026-08-03 |
38
38
 
39
39
  The bottom two numbers are the honest state of this skill's behavioural evidence.
40
- Everything else in this repository is proven by 76 structural guards that check the
40
+ Everything else in this repository is proven by 80 structural guards that check the
41
41
  *form*; these are the only checks that would speak to the *behaviour*, and they have
42
42
  not been run yet. Printed here so "63 of 63 green" is never read as "the skill is
43
43
  known to work".
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "task-pipeline-skill",
3
- "version": "1.12.0",
3
+ "version": "1.13.0",
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 must close with evidence, a loop guard that breaks churn, one provider-agnostic model confirmed up front, and an optional super-ux UX track for user-facing work.",
5
- "version": "1.12.0",
5
+ "version": "1.13.0",
6
6
  "author": {
7
7
  "name": "ssheleg",
8
8
  "url": "https://x.com/sshlg93"
@@ -154,6 +154,8 @@ answer would have exposed it in a minute.
154
154
  | 3 Spec · 4 Plan | 2 (both directions), 8 (compute, never restate) |
155
155
  | 5 Dev | 9 (generators seed green), 12 (tests create their own state), 13 (local infra) |
156
156
  | 6 Tests | 4, 5, 10, 11 — every new check probed both ways, measured, and asserted on its exit code |
157
+ | 3 Spec | 14 — every check the spec **names** must resolve at the moment it is named, or be marked `review` |
158
+ | 4 Plan | 14 — every command, path and file a DoD names must resolve |
157
159
  | 9 Docs | 8, 14 — every number computed, every target resolvable |
158
160
  | 10 Acceptance | 1, 3, 6, 7 — axis rotation recorded, closure verified against artefacts, classes swept, ratchets printed |
159
161
 
@@ -193,6 +193,34 @@ A checklist you run yourself, inline. No subagent:
193
193
  5. **Parallel safety:** no two tasks in the same group write the same file; every
194
194
  `depends:` points at a task that really produces what's consumed.
195
195
  6. **DoD present and verifiable** on every task.
196
+ 7. **Every command, path and file a DoD names resolves.** Walk each task's
197
+ *Definition of done* and its steps and check the targets exist — a DoD that says
198
+ `npm run lint:paths` when no such script exists is an instruction the implementer
199
+ cannot follow and a check the acceptance cannot run.
200
+ [`learned.md`](learned.md) rule 14 has said *every target resolvable* since
201
+ v1.4.0 and fired only at stage 9 — four stages after the target is written here.
202
+ 8. **Run the hygiene gate** over what this stage wrote and record its counts below.
203
+
204
+ **R-003 asked of this file, and answered:** `spec.md`'s items 8 and 9 — reading
205
+ decisions back, and printing the cost — deliberately do **not** appear here. This
206
+ stage settles nothing (see below), so it has no decisions to contradict and no scope
207
+ of its own to grow. Its sibling's item 7 does belong, reworded for DoDs.
208
+
209
+ ### The `## Self-review` section — committed, not asserted
210
+
211
+ Identical in shape to `spec.md`'s, so one habit covers both stages. Last section
212
+ before the gate; every line a **computed number, not a tick**.
213
+
214
+ ```markdown
215
+ ## Self-review
216
+
217
+ - REQ coverage: <n> in brief, <n> covered, difference <set or ∅>
218
+ - Named checks: <n> named, <n> resolve, <n> marked `review`
219
+ - Decisions: checked against <the brief's D-table> and <stage 2's rejected options> — <verdict>
220
+ - Cost: <surfaces>/<guards>/<REQ> now, <…> at stage 2 — <proportionate | grown, and why>
221
+ - Hygiene: <n> checks, <n> findings, <n> open
222
+ - Placeholders: <n> · Ambiguity: <n> found, <n> resolved inline
223
+ ```
196
224
 
197
225
  ## This stage settles nothing — and that is a rule, not an omission
198
226
 
@@ -58,6 +58,7 @@ a row pointing outside the bundle is the defect this file exists to catch.
58
58
  | **The routing default and its boundary** | `templates/routing-rule.md` |
59
59
  | The seeded doc map, registers and gate | `templates/docmap.md`, `templates/decisions.md`, `templates/open-questions.md`, `templates/docgate.sh` |
60
60
  | Which agent-introduced defects are found, and that the agent fixes them rather than the script | `templates/hygiene.sh`, `references/build.md` |
61
+ | What a stage-3/4 self-review must read back, and that its trace is computed numbers | `references/spec.md`, `references/planning.md`, `references/learned.md` |
61
62
  | What a stage reads, and which host files bind it | `references/artifacts.md` |
62
63
  | The design conversation, its hard gate, UI detection, user paths | `references/brainstorm.md` |
63
64
  | Cutting a platform into modules, brick criteria, build order | `references/decomposition.md` |
@@ -143,6 +143,42 @@ Read what you wrote with fresh eyes and fix inline. No subagent, no second pass:
143
143
  4. **Scope:** is this one implementable plan, or does it need decomposition?
144
144
  5. **Ambiguity:** can any requirement be read two ways? Pick one and say it.
145
145
  6. **Traceability (UI):** does every user-facing requirement name its scenario ID?
146
+ 7. **Every check this spec names resolves.** Walk the verification claims — the
147
+ table, and every sentence that says how something is proven. For each: does that
148
+ check exist today, or is this plan building it? A check that is neither is **not**
149
+ a verification: mark it `review` and say so, or build it. This repository's whole
150
+ doctrine is that a green from a check nobody watched fail is not evidence — and
151
+ this stage is where checks are first *named*, which is one step earlier than
152
+ anyone was looking.
153
+ 8. **Read the decisions back.** Open the brief's `## Decisions locked` table **and**
154
+ the register entries stage 2 recorded for the alternatives it *rejected*
155
+ (`references/brainstorm.md` → *The approved design is a set of decisions*). Does
156
+ any contract here contradict one? Resolve it **out loud** — amend the spec, or
157
+ reverse the decision and record the reversal. A spec that quietly contradicts a
158
+ settled decision re-opens a question the operator already answered.
159
+ 9. **Print the cost.** Count the surfaces this spec touches, the guards it adds and
160
+ the REQ rows, now versus at stage 2. **Print all three and decide nothing.**
161
+ Growth is information for the operator, whose gate this is; an agent that narrows
162
+ the task on its own judgement breaks *never narrow the task silently*.
163
+ 10. **Run the hygiene gate** over what this stage wrote and record its counts below.
164
+
165
+ ### The `## Self-review` section — committed, not asserted
166
+
167
+ The checklist above leaves a **committed trace**, last section before the gate.
168
+ Every line carries a **computed number, not a tick**: a number nobody computed is
169
+ visible as such, and a checkbox never is. `planning.md` uses the identical shape, so
170
+ one habit covers both stages.
171
+
172
+ ```markdown
173
+ ## Self-review
174
+
175
+ - REQ coverage: <n> in brief, <n> covered, difference <set or ∅>
176
+ - Named checks: <n> named, <n> resolve, <n> marked `review`
177
+ - Decisions: checked against <the brief's D-table> and <stage 2's rejected options> — <verdict>
178
+ - Cost: <surfaces>/<guards>/<REQ> now, <…> at stage 2 — <proportionate | grown, and why>
179
+ - Hygiene: <n> checks, <n> findings, <n> open
180
+ - Placeholders: <n> · Ambiguity: <n> found, <n> resolved inline
181
+ ```
146
182
 
147
183
  ## Locked contracts are decisions — the register, not only the spec
148
184
 
@@ -251,7 +251,10 @@ never that the work was skipped quietly.
251
251
  `SCR-` screens, the CJM stages the feature serves, and the UX
252
252
  patterns/principles from super-ux that apply (`best-practices.md`,
253
253
  `ux-design-principles.md`, `component-guidelines.md`).
254
- - **GATE (manual):** spec committed **and** user-reviewed; **every section carries
254
+ - **GATE (manual):** the **`## Self-review` section written and committed with
255
+ computed values** — every check the spec names resolving or marked `review`, the
256
+ brief's decisions and stage 2's rejected options read back with no unresolved
257
+ contradiction, and the cost delta printed; spec committed **and** user-reviewed; **every section carries
255
258
  `covers: REQ-…` and every REQ appears in at least one section**; for UI tasks
256
259
  additionally: the super-ux chain (foundation → flows → screens → scenarios) is
257
260
  designed, validated and approved; scenarios validated in `docs/ux/scenarios.md`;
@@ -270,7 +273,8 @@ never that the work was skipped quietly.
270
273
  paths, complete code in every step, TDD steps with expected output, DoD each,
271
274
  dependency graph + parallel groups, non-overlapping file ownership, and the
272
275
  Global Constraints block copied verbatim from the spec.
273
- - **GATE (auto):** **set equality — the REQ ids in the brief equal the union of
276
+ - **GATE (auto):** the **`## Self-review` section written with computed values**,
277
+ every command, path and file a DoD names resolving; **set equality — the REQ ids in the brief equal the union of
274
278
  `Implements:` across plan tasks.** A non-empty difference fails the gate and is
275
279
  reported as the explicit list of dropped requirements; this is the seam where
276
280
  scope leaks silently, so the check is mechanical, not a judgement call. Plus: