task-pipeline-skill 1.97.1 → 1.98.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/HOW-IT-WORKS.md +17 -13
  3. package/README.md +12 -9
  4. package/SKILL-CARD.md +1 -1
  5. package/cursor/rules/task-pipeline.mdc +22 -14
  6. package/evals/task-pipeline.evals.json +3 -3
  7. package/package.json +1 -1
  8. package/plugins/task-pipeline/.claude-plugin/plugin.json +2 -2
  9. package/plugins/task-pipeline/commands/task-pipeline.md +14 -219
  10. package/plugins/task-pipeline/skills/evidence-docs/SKILL.md +8 -1
  11. package/plugins/task-pipeline/skills/evidence-docs/references/GENERATED.md +1 -1
  12. package/plugins/task-pipeline/skills/evidence-docs/references/learned.md +24 -1
  13. package/plugins/task-pipeline/skills/evidence-docs/references/retrospective.md +21 -576
  14. package/plugins/task-pipeline/skills/project-audit/SKILL.md +8 -1
  15. package/plugins/task-pipeline/skills/task-pipeline/SKILL.md +162 -230
  16. package/plugins/task-pipeline/skills/task-pipeline/graph.schema.json +1 -1
  17. package/plugins/task-pipeline/skills/task-pipeline/pipeline.example.json +9 -9
  18. package/plugins/task-pipeline/skills/task-pipeline/pipeline.schema.json +10 -3
  19. package/plugins/task-pipeline/skills/task-pipeline/references/acceptance.md +2 -2
  20. package/plugins/task-pipeline/skills/task-pipeline/references/brainstorm.md +3 -3
  21. package/plugins/task-pipeline/skills/task-pipeline/references/build.md +7 -7
  22. package/plugins/task-pipeline/skills/task-pipeline/references/certification.md +49 -44
  23. package/plugins/task-pipeline/skills/task-pipeline/references/doctrine-map.md +1 -1
  24. package/plugins/task-pipeline/skills/task-pipeline/references/finish-line.md +13 -8
  25. package/plugins/task-pipeline/skills/task-pipeline/references/iteration.md +20 -23
  26. package/plugins/task-pipeline/skills/task-pipeline/references/knowledge-sources.md +5 -3
  27. package/plugins/task-pipeline/skills/task-pipeline/references/learned.md +24 -1
  28. package/plugins/task-pipeline/skills/task-pipeline/references/loop-guard.md +17 -7
  29. package/plugins/task-pipeline/skills/task-pipeline/references/retrospective.md +47 -1
  30. package/plugins/task-pipeline/skills/task-pipeline/references/spec.md +5 -4
  31. package/plugins/task-pipeline/skills/task-pipeline/references/stage-00-intake.md +39 -25
  32. package/plugins/task-pipeline/skills/task-pipeline/references/stage-05-dev.md +1 -1
  33. package/plugins/task-pipeline/skills/task-pipeline/references/stages.md +31 -20
  34. package/plugins/task-pipeline/skills/task-pipeline/references/waves.md +6 -4
  35. package/plugins/task-pipeline/skills/task-pipeline/scripts/graph.py +77 -21
  36. package/plugins/task-pipeline/skills/task-pipeline/scripts/retro_budget.py +305 -0
  37. package/plugins/task-pipeline/skills/task-pipeline/scripts/short_path.py +70 -0
  38. package/plugins/task-pipeline/skills/task-pipeline/scripts/waves.py +22 -10
  39. package/plugins/task-pipeline/skills/task-pipeline/templates/canvas.md +1 -1
  40. package/plugins/task-pipeline/skills/task-pipeline/templates/retro-archive.md +9 -0
  41. package/plugins/task-pipeline/skills/task-pipeline/templates/retro.md +10 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,56 @@
1
+ ## v1.98.0 (2026-10-20)
2
+
3
+ Guards: 448 → **448**; property checks 15 → **15**.
4
+
5
+ A cheaper run that stops looping, and the operators' retro insights in the retro doctrine.
6
+ Measured on 2026-10-20: before any code a run was told to read about 236 KB of doctrine
7
+ (the command 14 KB restating `SKILL.md` 21 KB, plus companion-skills, model-tiering,
8
+ continuity, stages, stage 0, grill, knowledge-sources and gates.md "at every stage"); a
9
+ small fix met eleven stages because the short path was only proposed and silence took the
10
+ full flow; every node closed through three blind tiers, R2 owed two rounds, the
11
+ certification ceiling only measured, the review loop ran to five rounds; and the retro
12
+ floor stage 0 reads in full ran up to ~76k tokens in one project, 27 620 bytes here.
13
+
14
+ **A. Proportional run.** Stage 0's short-path triage now decides instead of proposing:
15
+ when the gap check leaves no material unknown and the change is R1, at most five files,
16
+ no public contract, no user-facing change and no deploy, the run takes the short path and
17
+ says so in one line (brief in the run ledger, build with tests, one verification, docs
18
+ and handoff, a retro entry only for a new lesson). `scripts/short_path.py` computes it.
19
+ The example's gates at stages 0, 2, 3, 7 and 10 are `auto`; the operator's answer or the
20
+ standing authorization recorded in the brief is the go, and a project that wants the wait
21
+ sets a gate `manual` in its own `pipeline.json`.
22
+
23
+ **B. Reading diet.** At entry a run reads `SKILL.md` only (its stage table is the index);
24
+ each stage's section of `stages.md` and its detail load when the stage starts; grill,
25
+ knowledge-sources, companion-skills, continuity, model-tiering and gates.md load on named
26
+ triggers. The command is a 1.5 KB pointer. Measured, the floor before code on the short
27
+ path is 35 KB (was 236 KB; 80 KB when the grill and knowledge-sources triggers fire);
28
+ `SKILL.md` is 16.2 KB, 3 753 cl100k tokens of body (was 4 709, cap 5 000). The three descriptions are 386, 399 and 395 characters; every trigger phrase
29
+ they dropped moved verbatim into a `## Triggers` section of the same `SKILL.md`.
30
+
31
+ **C. Anti-loop.** `graph.py certify`: an R1 node certifies with one blind tier; R2 owes one
32
+ passing round, R3 two (one blind, one adversarial), a flagship surface two with one
33
+ adversarial; a round of the same kind on an unchanged tree is refused; at the ceiling the
34
+ node is parked with its evidence (exit 7) instead of measured. `waves.py finish
35
+ --clean-rounds` (default 1; 2 for an R3 or flagship iteration). The fix loop and the
36
+ review loop cap at three rounds and stop.
37
+
38
+ **D. Retro doctrine.** The floor (standing instructions plus run stamps) has a 12 000-byte
39
+ budget, a standing row at most 600 characters, a stamp at most 300; stage 0 prints the
40
+ bytes and bytes/4 tokens, gate 10 fails over budget. `scripts/retro_budget.py`
41
+ (`check`, `migrate --write`, `verify`) moves narrative to the archive verbatim with a
42
+ sha256 per block; this repository's floor went from 27 620 to 6 532 bytes that way. Each
43
+ entry names its Class (13 classes) and Cost; a standing row is searched against
44
+ `learned.md` and the lesson index first; a lesson standing in two projects goes upstream
45
+ in the same run. `learned.md` gains rules 33 to 39 from the 2026-10-20 audit of ~54
46
+ retrospectives. evidence-docs' 34.7 KB copy of the retro doctrine is now a pointer.
47
+
48
+ Tests: `graph_test.py` 171 → 173 cases (tier count by risk, unchanged-input refusal,
49
+ ceiling stops), `waves_test.py` 135 cases with `--clean-rounds`,
50
+ `test/audit_regressions/diet_retro_budget.py` (9 cases, over-budget plants must fail) and
51
+ `diet_proportional.py` (6 cases). Twelve negative plants retargeted to the new wording
52
+ (stage 0 and 10 gates name their authorization and the hand-back instead of `manual`).
53
+
1
54
  ## v1.97.1 — 2026-10-17
2
55
 
3
56
  The same source as v1.97.0, plus its release declaration. The v1.97.0 tag failed its own release run
package/HOW-IT-WORKS.md CHANGED
@@ -28,11 +28,12 @@ you asked for.
28
28
  ## 1. How a request finds the pipeline
29
29
 
30
30
  An agent choosing skills sees exactly one thing: the `description` field in
31
- `SKILL.md`. It is capped at **1024 characters** and currently uses **1008** — that
32
- headroom is the budget every future addition pays from, which is why it is
33
- tracked as a board row rather than left to be discovered.
31
+ `SKILL.md`. It is capped at **1024 characters**, and since 1.98.0 it is the short
32
+ form (`B-001` on the board tracks the measured length): every host preloads it into
33
+ every session. The full trigger list, unchanged, sits under `## Triggers` in the same
34
+ file, where the family's routing hook and this repository's checks read it.
34
35
 
35
- It is written in three parts, and the middle one was learned the hard way:
36
+ That list is written in three parts, and the middle one was learned the hard way:
36
37
 
37
38
  - **Work that changes the repository** — a feature, fix, refactor, migration,
38
39
  integration, rewrite, adoption or hardening, in English and Russian both.
@@ -125,23 +126,26 @@ it has been forgotten.
125
126
  | | Stage | What must be true to leave it | Gate |
126
127
  |---|---|---|---|
127
128
  | 1 | Docs study | every contract the design will lock is grounded on **fetched** docs, not recall | auto |
128
- | 2 | Brainstorm + decompose | design approved, every REQ answered by it. A platform is cut into modules, **walking skeleton first**, every REQ in exactly one module | manual |
129
- | 3 | Spec | contracts locked. User-facing work runs three tracks — what it **does**, how it **sounds**, how it **looks**. A declined track is recorded, never silent | manual |
129
+ | 2 | Brainstorm + decompose | design approved, every REQ answered by it. A platform is cut into modules, **walking skeleton first**, every REQ in exactly one module | auto |
130
+ | 3 | Spec | contracts locked. User-facing work runs three tracks — what it **does**, how it **sounds**, how it **looks**. A declined track is recorded, never silent | auto |
130
131
  | 4 | Plan | the REQ set-comparison holds: brief REQs == union of `Implements:` | auto |
131
132
  | 5 | Build | TDD per task, a review after each, findings fixed or parked **with a ruling** | auto |
132
133
  | 6 | Tests | the **full** suite green; a web surface checked in a browser, not in the diff | auto |
133
- | 7 | Lint + deploy | the authorization is specific, and the CI verdict is **read** before any tag | manual |
134
+ | 7 | Lint + deploy | the authorization is specific, and the CI verdict is **read** before any tag | auto |
134
135
  | 8 | Post-deploy | the verification trio, not one of three; a verification row per shipped REQ | auto |
135
136
  | 9 | Docs + wiki | **three** artifacts — module docs, the wiki, and the code graph | auto |
136
- | 10 | Acceptance | the ladder walk first, then the table, then the retrospective | manual |
137
+ | 10 | Acceptance | the ladder walk first, then the table, then the retrospective | auto |
137
138
 
138
- ### Why the manual gates are where they are
139
+ ### Why every gate ships `auto`
139
140
 
140
141
  `auto` means the agent verifies the check itself and proceeds. `manual` means it
141
- waits for an explicit go. The four manual gates sit at the four places where a
142
- wrong turn is expensive and hard to reverse: **what we are building** (2), **the
143
- contracts** (3), **the outside world** (7), and **whether it is done** (10).
144
- Everywhere else, stopping to ask costs more than it saves.
142
+ waits for an explicit go. Until 1.98.0 the example made stages 0, 2, 3, 7 and 10
143
+ manual, the places where a wrong turn is expensive: **the brief**, **what we are
144
+ building**, **the contracts**, **the outside world** and **whether it is done**. Under an
145
+ operator's standing "decide and act" instruction each of them was a pause nobody
146
+ answered, so the example ships them `auto`: the approval they name is read from the
147
+ operator's answer or the standing authorization recorded in the brief, and a project
148
+ that wants the wait sets the gate `manual` in its own `pipeline.json`.
145
149
 
146
150
  ---
147
151
 
package/README.md CHANGED
@@ -182,7 +182,7 @@ and the inline fallback satisfy the same [provider contract](plugins/task-pipeli
182
182
  | 3 Spec | [`spec.md`](plugins/task-pipeline/skills/task-pipeline/references/spec.md) — UX-track order, locked contracts, global constraints, self-review |
183
183
  | 4 Plan | [`planning.md`](plugins/task-pipeline/skills/task-pipeline/references/planning.md) — zero-context tasks, parallel groups, no placeholders |
184
184
  | the queue | [`work-graph.md`](plugins/task-pipeline/skills/task-pipeline/references/work-graph.md) — a script walks the graph so the model never reads it: 400 nodes and 4 print the same 27-byte frontier |
185
- | closing a node | [`certification.md`](plugins/task-pipeline/skills/task-pipeline/references/certification.md) — three blind readings at escalating visibility (the changed code, what reaches it, the product around it), all three required to pass — and a fourth, `verifier-visual`, on a flagship or product surface, which reads the contact sheet against the director record; a failing round records itself and the node stays open |
185
+ | closing a node | [`certification.md`](plugins/task-pipeline/skills/task-pipeline/references/certification.md) — three blind readings at escalating visibility (the changed code, what reaches it, the product around it), all three required to pass (one on an R1 node; a clean round ends a node unless it is R3 or flagship) — and a fourth, `verifier-visual`, on a flagship or product surface, which reads the contact sheet against the director record; a failing round records itself and the node stays open, and at the ceiling the node is parked with its evidence |
186
186
  | 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 |
187
187
  | 5–6 TDD | [`tdd.md`](plugins/task-pipeline/skills/task-pipeline/references/tdd.md) — the iron law, red/green/refactor, the suite gate |
188
188
  | 5, 6, 8 The browser | [`browser.md`](plugins/task-pipeline/skills/task-pipeline/references/browser.md) — the ref model both channels share, the four commands the look is made of, sessions, and the three different things *"tested in a browser"* means |
@@ -221,9 +221,11 @@ Before any technical work, task-pipeline closes every question the codebase and
221
221
  project's records can answer, then asks you the rest in **one batch**, ordered by
222
222
  dependency, each with a recommended answer — one at a time only where the answers
223
223
  depend on each other or you ask for it — until every decision branch is resolved and
224
- locked into a **task brief**. There is
225
- no "clear enough task" exemption: no stage-1 work starts without a committed,
226
- confirmed brief.
224
+ locked into a **task brief**. The depth is proportional: a small change (R1, at
225
+ most five files, no public contract, no user-facing change, no deploy) takes the
226
+ **short path** by default, printed in one line: the brief in the run ledger, build
227
+ with tests, one verification, docs and handoff. Anything larger starts stage 1 only
228
+ on a committed, confirmed brief.
227
229
 
228
230
  **Domain awareness.** While exploring, the grill reads the project's own
229
231
  `CONTEXT.md` / `docs/adr/` and holds you to them — calling out terms that conflict
@@ -482,9 +484,9 @@ iteration runs in this order:
482
484
  - the survey;
483
485
  - module dossiers written in parallel, laid onto one canvas until a pass changes nothing;
484
486
  - questions asked in rounds, never one at a time, while agents keep working;
485
- - a parallel build, each node checked the moment it lands: one round of three blind
486
- readings for every node, and two or three passing rounds by its risk class (R2, R3 — one
487
- of the three recorded adversarial);
487
+ - a parallel build, each node checked the moment it lands: one clean round ends it (one
488
+ blind reading on R1, three on R2), and an R3 or flagship node owes a second, adversarial
489
+ round;
488
490
  - one release, checked as released;
489
491
  - the next pool, handed to you grouped by module.
490
492
 
@@ -506,7 +508,8 @@ every repeat pass logs one line per touched file with **the reason that forced i
506
508
 
507
509
  It trips on revert-oscillation, a file edited twice for the same reason, a
508
510
  resurrected finding, a third entry into one stage, or two loops editing one file —
509
- plus hard caps (5 fix rounds per task, 2 re-entries per stage, 3 passes per module).
511
+ plus hard caps that stop (3 fix rounds per task, 3 review rounds, 3 failing certification
512
+ rounds per node, 2 re-entries per stage, 3 passes per module).
510
513
  On a trip the run **stops editing**, names shape A and shape B with their evidence,
511
514
  escalates to the layer that owns the conflict (rubric → operator → plan → spec →
512
515
  module map), re-plans the check as an ordered checklist with one verification
@@ -638,7 +641,7 @@ must say so.
638
641
  ### Held to Anthropic's own Skill authoring guidance
639
642
 
640
643
  Audited against the four Agent Skills pages. Most of it already held — `name`
641
- 13/64 chars, `description` 887/1024 chars, `SKILL.md` 275/500 lines, all 53 references
644
+ 13/64 chars, `description` 386/1024 chars, `SKILL.md` 207/500 lines, all 53 references
642
645
  reachable from `SKILL.md` through explicit reference routes, and the bundle far under the 30 MB ceiling. What
643
646
  did not, now does:
644
647
 
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.97.1 |
15
+ | **Version** | 1.98.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, and **one of two browser channels** — `playwright` (CLI or MCP) or `chrome-devtools` (MCP); either satisfies the browser step and neither is required. The engine is WebKit (Safari) first; `chrome-devtools` is Chrome-only, a stated exception. Every stage's doctrine ships in-repo; user-facing stage 3 requires a valid scenario artifact; super-ux is preferred, with equivalent-provider and inline-fallback paths under the provider contract |
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` |
@@ -67,9 +67,14 @@ event, not the end of the run — what loses work is crossing it mid-item.
67
67
 
68
68
  ## Stage 0 — intake grill (MANDATORY, do this FIRST)
69
69
 
70
- Never skipped, and nothing to install — the grill is part of this rule. No "the
71
- task was already clear" exemption, no starting stage 1 while the user thinks. A
72
- one-line task ("build feature X") is not enough to finish autonomously.
70
+ Never skipped, and nothing to install: the grill is part of this rule. Its depth is
71
+ proportional. **A small change takes the short path by default** when the gap check
72
+ leaves no material unknown and the change is R1 risk, at most five files, no public
73
+ contract, no user-facing change and no deploy: say so in one line, write the brief and
74
+ its REQ rows into the run ledger, build with tests, run one verification, update the
75
+ docs and handoff, and write a retro entry only for a new lesson. Anything larger runs
76
+ the full flow, and a one-line task ("build feature X") is not enough to finish it
77
+ autonomously.
73
78
 
74
79
  **Phase 1 — harvest the sources BEFORE the first question.** Find what the project
75
80
  already knows about this task and read it: the code; **the code graph if one is
@@ -98,7 +103,8 @@ like any other source, and it **points while the code decides** — never the
98
103
  tiebreaker.
99
104
  **Read `docs/evidence/retro.md` in full if it exists** — its *standing
100
105
  instructions* are what previous runs of this pipeline got wrong in this project, and
101
- they bind this run (they are capped at ten, so reading them all is cheap). Stamp
106
+ they bind this run (ten rows, ten stamps, and a 12 000-byte budget for the two, so
107
+ reading them all is cheap; say the byte count). Stamp
102
108
  each one the moment it fires: that date is the only evidence behind the
103
109
  cold-retirement rule at stage 10.
104
110
  If no wiki is installed, recommend it once and continue:
@@ -199,7 +205,7 @@ not authorize an outward, irreversible action — stage 7 stops and asks.
199
205
  ## Stages 1→10
200
206
 
201
207
  1. **Docs study** (auto) — ground every external lib/API on current docs, not recall.
202
- 2. **Brainstorm + decompose** (manual) — read the brief, explore the code, then 2–3
208
+ 2. **Brainstorm + decompose** (auto; the brief's standing authorization is the go) — read the brief, explore the code, then 2–3
203
209
  approaches with a recommendation, YAGNI applied, design presented in sections and
204
210
  approved. **Hard gate: no code, no scaffolding before that approval** — including
205
211
  on "obviously simple" tasks. Record whether the task touches a user-facing surface
@@ -222,11 +228,12 @@ not authorize an outward, irreversible action — stage 7 stops and asks.
222
228
  re-measure, re-cut — and 9–10 close the release. No wave builds a shape a later
223
229
  wave undoes. **Around the waves runs the release iteration** ("release iteration" /
224
230
  "итерация релиза"): module dossiers integrated into one canvas, questions in batches,
225
- each node verified as it lands in one to three rounds by its risk class (R1–R3), a
231
+ each node verified as it lands, one clean round ending it unless it is R3 or a
232
+ flagship surface (R1 on one blind tier; the ceiling parks a churning node), a
226
233
  wave's stage 7 integrated without tagging, one release gated and verified as
227
234
  released, the next pool handed back; a finding made mid-iteration joins the
228
235
  inventory rather than being fixed alone.
229
- 3. **Spec** (manual) — write and commit the design; lock every shared contract
236
+ 3. **Spec** (auto; the brief's standing authorization is the go) — write and commit the design; lock every shared contract
230
237
  (types, schemas, signatures, file layout) plus a **Global Constraints** block of
231
238
  exact values every later task inherits. Self-review it for placeholders,
232
239
  contradictions, ambiguity and scope before showing it. For UI tasks, run the UX
@@ -284,7 +291,7 @@ not authorize an outward, irreversible action — stage 7 stops and asks.
284
291
  analysed rather than only recorded — said with the reason; a look taken only there
285
292
  is reported as "checked in Chromium", never "tested in a browser". Never a gate. A CLI, a
286
293
  library or a backend service is never offered either.
287
- 7. **Lint + deploy** (manual) — lint clean AND suite green before deploy; deploy is
294
+ 7. **Lint + deploy** (auto; the brief's standing authorization is the go) — lint clean AND suite green before deploy; deploy is
288
295
  outward → explicit user go, or the specific standing authorization recorded in
289
296
  the stage-0 brief.
290
297
  8. **Post-deploy** (auto) — tail logs / health-check; clean boot or an honest
@@ -320,7 +327,7 @@ not authorize an outward, irreversible action — stage 7 stops and asks.
320
327
  propose the edit and get an explicit go, or carry it over with the exact change
321
328
  written down. A doc that was worth reading at stage 0 and is wrong now is the
322
329
  next run's false premise.
323
- 10. **Acceptance** (manual) — the closing stage, in two halves.
330
+ 10. **Acceptance** (auto; the brief's standing authorization is the go) — the closing stage, in two halves.
324
331
  **First the ladder walk**, because the REQ table only finds what was named and
325
332
  lost: a comparison needs two sides and **an absence has one**. Walk each REQ
326
333
  bottom-up through its rungs — recorded decision → spec section → contract *and
@@ -418,9 +425,10 @@ not authorize an outward, irreversible action — stage 7 stops and asks.
418
425
  of the next run reads those standing instructions **in full**, which is why the
419
426
  cap is not negotiable and the prune is a gate item, not a good intention.
420
427
  Gate: ladder walk ran, no REQ `unknown`, no ledger row without
421
- a home, every repository clean/pushed/pointed-at, user signs off, **and the
422
- retro is written — stamped first, then pruned before anything was added, at or
423
- under its cap, every deletion logged, and the counts printed beside this verdict**.
428
+ a home, every repository clean/pushed/pointed-at, the hand-back written, **and the
429
+ retro is written: stamped first, then pruned before anything was added, at or
430
+ under its cap and its byte budget, every deletion logged, and the counts printed
431
+ beside this verdict**.
424
432
 
425
433
  Cross-cutting: answer from the brief's autonomy section rather than re-asking, log every deferral in the ledger, never narrow the task silently, track
426
434
  tasks, conventional commits, honest degradation (never claim a failed/skipped step
@@ -436,8 +444,8 @@ file, the pass, and the reason that forced it — a finding id or a failed gate
436
444
  "Cleanup" is not a reason. **Stop immediately** when: an edit undoes what an earlier
437
445
  pass in this run deliberately did (A→B→A); the same file is edited twice for the
438
446
  same reason; a finding already fixed or parked comes back; a stage is entered a
439
- third time for one artifact; two loops edit one file. Hard caps: 5 fix rounds per
440
- task, 2 re-entries per stage, 3 passes per module. On a stop: name shape A and shape
447
+ third time for one artifact; two loops edit one file. Hard caps, each a stop: 3 fix
448
+ rounds per task, 2 re-entries per stage, 3 passes per module. On a stop: name shape A and shape
441
449
  B with their evidence and who asks for each; escalate to the layer that owns the
442
450
  conflict (two findings → the review rubric; finding vs plan → the user; plan vs spec
443
451
  → back to planning; ambiguous spec → back to spec; two modules claiming one file →
@@ -476,9 +476,9 @@
476
476
  ],
477
477
  "query": "wave 1 of a release iteration has two nodes: N-001 (R1: fix two wrong links in docs/README.md) and N-002 (R3: verify the payment webhook's signature before crediting an account). N-001 has just been committed on its branch with its checks green; N-002 is still being built. Continue.",
478
478
  "expected_behavior": [
479
- "Starts N-001's certification now, without waiting for N-002 or the end of the wave: one round — the three blind tiers plus one fix cycle — and N-001 is closable after that round passes",
480
- "Keeps N-002's risk class at R3 (money, a security check) and never lowers it to save time; it owes three passing rounds, one of them recorded adversarial (`certify --kind adversarial`), planting a defect and trying abuse cases, on another model where one is available",
481
- "Runs every owed round in full even when round 2 comes back clean — the adversarial round asks a different question and always runs",
479
+ "Starts N-001's certification now, without waiting for N-002 or the end of the wave: one round on one blind tier (R1) plus one fix cycle, and N-001 is closable after that round passes",
480
+ "Keeps N-002's risk class at R3 (money, a security check) and never lowers it to save time; it owes two passing rounds, one blind and one recorded adversarial (`certify --kind adversarial`), planting a defect and trying abuse cases, on another model where one is available",
481
+ "Runs the adversarial round even when the blind round comes back clean, because it asks a different question, and never re-runs a blind round on the unchanged tree",
482
482
  "Treats `graph.py close` refusing N-002 before its owed rounds as the gate working, not as an obstacle to route around"
483
483
  ],
484
484
  "why": "Verification-on-landing and rounds-by-risk-class are the two halves of iteration.md → Verification starts when a node lands. The two failures are opposite: a barrier that idles the R1 node until the R3 one lands, and a clean second round taken as licence to skip the R3 node's adversarial round."
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "task-pipeline-skill",
3
- "version": "1.97.1",
3
+ "version": "1.98.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,8 +2,8 @@
2
2
  "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
3
3
  "name": "task-pipeline",
4
4
  "displayName": "Task Pipeline",
5
- "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/judgment/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); a third, `waves`, takes the whole board and closes it in waves that each finish in one pass. Retro insights can publish upstream as issues, opt-in and redacted.",
6
- "version": "1.97.1",
5
+ "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/judgment/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 proportional short path for small changes, a loop guard whose ceilings stop and record a blocker, 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); a third, `waves`, takes the whole board and closes it in waves that each finish in one pass. Retro insights can publish upstream as issues, opt-in and redacted.",
6
+ "version": "1.98.0",
7
7
  "author": {
8
8
  "name": "ssheleg",
9
9
  "url": "https://x.com/sshlg93"
@@ -2,225 +2,20 @@
2
2
  description: "Run a task through task-pipeline's gated stages (intake grill → docs → brainstorm → spec → plan → build → tests → deploy → post-deploy → docs/wiki → acceptance). Also: `waves` — close the whole board in waves; `iteration` — the release loop around the waves; `setup` — audit the docs you already have; `checkup` — what has shipped unverified, with no task running."
3
3
  argument-hint: "<one-line task> | waves | iteration | setup | checkup"
4
4
  ---
5
- Run the task below through `task-pipeline`'s gated stages. **Every stage's doctrine
6
- ships inside the skill** — no companion plugin is required for any of it. The
7
- reference files are indexed in `SKILL.md`; this page is the run order, not the index.
5
+ Run the task below through the `task-pipeline` skill. **Read its `SKILL.md` and follow
6
+ it**; this page is a pointer, not a second copy of the run order (until 1.98.0 it was a
7
+ 13 KB restatement read on top of `SKILL.md` before any work).
8
8
 
9
9
  Task: $ARGUMENTS
10
10
 
11
- > **Four other modes.** `waves` takes the whole board instead of one task;
12
- > `iteration` runs the release loop around the waves — survey, design, build, release,
13
- > the next pool; `setup` audits the documentation this project already has; `checkup`
14
- > reports what has shipped without a person confirming it, with no task in flight. All
15
- > four are at the bottom of this page.
16
-
17
- **Idempotent entry — inspect state first, never restart blindly.** If a pipeline
18
- TaskList from a previous run exists for this task, **resume** from the first incomplete
19
- stage. Otherwise begin at stage 0. With no task given, the grill's first question asks
20
- for it in one line.
21
-
22
- ---
23
-
24
- ## Preflight — settle these once
25
-
26
- **Print this line once, before the first question:**
27
-
28
- > Running **Proof of Done** — every claim this run makes will carry the command,
29
- > the file or the test that proves it.
30
-
31
- It is one line and it is not decoration: it tells the operator, before anything is
32
- decided, which standard they are about to hold the output to. A run that opens by
33
- naming the standard is one an operator can call out for missing it.
34
-
35
- - **Model.** Recommend the most capable one the environment offers, never a hardcoded
36
- id. Confirmed once, then the whole run uses it without re-asking.
37
- - **Companions.** Print the detection block once (`references/companion-skills.md`).
38
- Absent ones state their fallback and name any unavailable check as NOT_RUN.
39
- On user-facing tasks stage 3 gates the valid scenario artifact, not package
40
- presence; use the provider rule in that reference.
41
-
42
- ## Stage 0 — the harvest, then the grill
43
-
44
- **The harvest runs before the first question** (`references/knowledge-sources.md`).
45
- Pull what the project already knows about *this task*:
46
-
47
- - the code, and **the code graph** where one is built — [graphify](https://github.com/Graphify-Labs/graphify),
48
- `references/knowledge-graph.md`; recommended, never required; detect
49
- `graphify-out/graph.json`. It answers **reach** — what calls this, what breaks if it
50
- moves — which grep cannot.
51
- - `CLAUDE.md`, `CONTEXT.md`/ADRs, `docs/` + `docs/ux/`, past briefs and carry-over ledgers.
52
- - **the retro's standing instructions and run stamps** — `docs/evidence/retro.md`,
53
- read in full; both are bounded and they bind this run. Its **Recent log** is
54
- *queried* by the task's nouns, not read: nothing caps it, and an uncapped section
55
- inside a binding source is what makes the capped part get skimmed
56
- (`references/retrospective.md`).
57
- - the **knowledge wiki** if installed ([obsidian-wiki](https://github.com/ar9av/obsidian-wiki);
58
- detect `~/.obsidian-wiki/config`), and any other doc system the project names as its docs.
59
- - **the board** (`docs/evidence/backlog.md`) — open count quoted in the brief, or
60
- seeded when absent. **the verification ledger** (`docs/evidence/verification.md`) —
61
- how many rows sit at `never`.
62
-
63
- Write the **source ledger** into the brief: a row per source, or an explicit *none found*.
64
-
65
- **Then the grill, and it is mandatory** (`references/grill.md`). Close what the sources
66
- can, then ask the material unknowns in ONE batch, ordered by dependency, each with a
67
- recommended answer — one at a time only where answers depend on each other or the
68
- operator asks — until every decision branch is resolved.
69
-
70
- - **Validate every answer against the harvested sources.** The operator outranks any
71
- document — but only out loud, and a doc the run proves stale is logged for stage 9.
72
- - **Domain awareness:** challenge terms against `CONTEXT.md`, sharpen fuzzy language,
73
- write an ADR for a hard-to-reverse call.
74
- - **The autonomy sweep** pre-resolves what would otherwise stop stages 1→10: doc
75
- sources, wiki and graph, branch and tracker policy, test and lint commands, deploy
76
- target and authorization, log locations.
77
- - **UI tasks add the design surface.** Is the design done visually in Figma or
78
- text-only? Is the Figma MCP connected? If not — ship text-only, or stop and connect
79
- it? The UX chain degrades on its own and never blocks, so this choice must be
80
- recorded rather than discovered.
81
- - **With Figma on, the destination is named before the first frame:** which team/org,
82
- which file — the recorded one, a URL the operator gives, or creation in that named
83
- team explicitly authorized. A destination decided at drawing time is how a project
84
- ends up with three design files and no way to tell which is real. **Never create
85
- while a recorded file resolves; if it does not resolve, stop and ask — never create a
86
- replacement.**
87
-
88
- **The brief closes on the REQ table** — the request as an addressable list where every
89
- row names how it is verified. Frozen: adding is free, removing needs the operator.
90
- Anything deferred enters the carry-over ledger the moment it is said.
91
-
92
- ## Stages 1→10 — the flow
93
-
94
- | | Stage | The thing that must be true to leave it |
95
- |---|---|---|
96
- | 1 | Docs study | every contract the design will lock is grounded on fetched docs, not recall |
97
- | 2 | Brainstorm + decompose | the design is approved and every REQ is answered by it. **A platform is cut into modules** (`references/decomposition.md`) — map committed, walking skeleton first, every REQ in exactly one module; stages 3→10 then run per module |
98
- | 3 | Spec | contracts locked; user-facing work runs three tracks — what it **does** (super-ux), how it **sounds** (`copywriting`), how it **looks** (`sheleg-design`); a declined track is recorded, never silent |
99
- | 4 | Plan | the REQ set-comparison holds: brief REQs == union of `Implements:` |
100
- | 5 | Build | TDD per task, a review after each, findings fixed or parked with a ruling |
101
- | 6 | Tests | the **full** suite green; a web surface checked in a browser, not in the diff |
102
- | 7 | Lint + deploy | outward: the authorization is specific, and the CI verdict is **read** before any tag |
103
- | 8 | Post-deploy | the verification trio, not one of three; a verification row per shipped REQ |
104
- | 9 | Docs + wiki | **three artifacts, not two** — module docs, the wiki, **and the code graph** |
105
- | 10 | Acceptance | the ladder walk first, then the table, then the retrospective |
106
-
107
- **Honor every gate by its type**: `auto` — verify the check yourself; `judgment` —
108
- record the named judge's ruling as judgement, never as a measurement; `manual` — cite
109
- an explicit go or specific standing authorization naming the act, otherwise wait.
110
-
111
- ## Cross-cutting — the three that fire at any stage
112
-
113
- **The loop guard** (`references/loop-guard.md`). If a pass starts undoing an earlier one
114
- — the same file edited twice for the same reason, a closed finding returning, a third
115
- entry into one stage — stop editing. Name both shapes, escalate to the layer that owns
116
- the conflict, re-plan the check as an ordered list, then go item by item. The review
117
- loop has its own ceiling, and at it the run **measures** rather than stops.
118
-
119
- **The audit's exit** (`references/audit.md`). If a searching pass starts finding mostly
120
- what the previous pass's own fixes broke, the axis is exhausted — rotate it, do not look
121
- harder.
122
-
123
- **Evidence.** A green from a check nobody has watched fail against a planted defect is
124
- not evidence. A finding class seen twice becomes a script, not a third ledger row.
125
-
126
- ## Stage 9 — the graph is the third artifact
127
-
128
- Refresh it (`/graphify . --update` where `graphify-out/` exists), then **check it against
129
- the docs**: a hub `graphify god-nodes` reports that no document names is an undocumented
130
- seam; an edge the docs deny is a leak in the code or a lie in the docs; a doc naming a
131
- module the graph no longer has is stale. Doc-side findings are fixed here; absences
132
- become REQ rows at stage 10.
133
-
134
- A stale graph is a false premise **carrying the authority of a machine** — a wrong doc
135
- gets argued with, a wrong graph gets believed.
136
-
137
- ## Stage 10 — the close-out, in order
138
-
139
- 1. **The ladder walk, first.** The REQ table finds what was named and lost; it cannot
140
- find what was never named, because a comparison needs two sides and an absence has
141
- one. Walk each REQ bottom-up — decision → spec section → contract *and its failure
142
- behavior* → task → change → executed test → surface/docs — check the seam at each
143
- step, and order findings **by seam, not by file**. Every absence becomes a new REQ
144
- row **before** the coverage table is written.
145
- 2. **The table**, one row per REQ, each with evidence.
146
- 3. **The ledgers close.** Every carry-over row still `open`, `unresolved` or homed
147
- `backlog` leaves with a board id, and the board's priorities are re-derived. The
148
- counts print beside every gate verdict, so *green* never reads as *verified*.
149
- 4. **Several repositories? The parent closes too.** A parent records each submodule as a
150
- pointer to one commit, and moving the submodule does not move the pointer — so work
151
- can be committed, pushed and green while a clone of the parent still gets the commit
152
- before it. Neither repo looks wrong alone. Require `git submodule status` with no
153
- line starting `+`, and every repo clean and pushed. The fix is two commands and the
154
- second gets forgotten: push the submodule, **then** `git add <submodule> && git commit`.
155
- 5. **The retrospective is the run's last act** (`references/retrospective.md`), in this
156
- order: **stamp the run first** (its commit makes the cold trigger computable) → **prune**
157
- every standing instruction against its three retirement triggers, list held to ten,
158
- every deletion logged → **write an entry only if the run diverged**: symptom with
159
- evidence, the stage it surfaced at, the stage that *owned* it, the root cause, the
160
- fix by grade, and the check that catches it next time.
161
-
162
- Stage 0 reads those standing instructions in full next time, which is why the prune is a
163
- gate criterion rather than a good intention.
164
-
165
- **Then, and only after every gate above has closed, sign off:**
166
-
167
- > — **Proof of Done**
168
- > <https://github.com/ssheleg/sshlg-skills> · <https://skills.sshlg.me>
169
- > If this run was useful, a ⭐ helps other people find it.
170
-
171
- **Last, after the work — never before it, and never instead of a finding.** A run that
172
- asks for a star while a gate is open is asking to be judged on its manner rather than
173
- its evidence, which is the exact substitution this whole pipeline exists to refuse. If
174
- the run ended red, ended early or ended with rows still open, print the attribution and
175
- **drop the request**: the invitation is to endorse a finished result, and there is not
176
- one to endorse.
177
-
178
- ---
179
-
180
- ## `/task-pipeline checkup`
181
-
182
- **Runs with no task in flight, and that is the point.** Accumulated unconfirmed work is
183
- invisible precisely because nobody is running a pipeline, so a check living only inside a
184
- run can never say *"stop, fourteen things are unconfirmed."*
185
-
186
- It takes no brief, opens no grill, and writes nothing on its own. Four sections, each
187
- read from a file this pipeline already keeps: the **exposure** line with its check-list
188
- oldest-first, the **board**'s open rows by computed priority, the carry-over ledgers'
189
- unresolved count, and the code graph's staleness where one exists.
190
-
191
- Where you ask it to file what it found, it appends board rows whose `Source` names the
192
- checkup and its date — printing what it would add first, never silently.
193
- Doctrine: `references/exposure.md`.
194
-
195
- ## `/task-pipeline waves`
196
-
197
- **The whole board, closed in its final form.** Every open item — board, ledgers, plan
198
- rows, unverified rows, uncovered scenarios, other products' asks — plus the new requests,
199
- in one machine-readable inventory verified against the code. Questions are closed from
200
- the sources; what remains goes to the operator once, as one batch, at the end of
201
- planning. A committed canvas lays the target state over the current logic, and the work
202
- is cut into waves that each close in one pass. Stages 0–4 run once, 5–8 per wave with a
203
- close pass after each (verify, one fix round, docs, re-measure, re-cut), 9–10 to close.
204
- It takes the next wave without asking, says once when the board is empty, and leaves
205
- every sign-in, consent, payment and outward act to a person.
206
- Doctrine: `references/waves.md`.
207
-
208
- ## `/task-pipeline iteration`
209
-
210
- **The loop around the waves: a project moves in whole releases.** Survey every source into
211
- one inventory (`scripts/waves.py merge`), write module dossiers in parallel, integrate them
212
- into one canvas until a pass changes nothing, ask the operator in batches (rounds), never
213
- one question at a time, then build in parallel. Each node is verified as it lands, in one
214
- to three rounds by its risk class (R1–R3); a wave's stage 7 integrates without tagging, and
215
- the release's stage-7 gate and stage 8's trio run once on what was released. The next pool
216
- is re-measured and handed back once. Every run reads earlier runs' lessons
217
- (`scripts/lessons.py query`) and writes its own at the retro. A finding made mid-iteration
218
- joins the inventory; only the closed hotfix lane ships alone.
219
- Doctrine: `references/iteration.md`.
220
-
221
- ## `/task-pipeline setup`
222
-
223
- **The entry audit instead of a feature.** Seven passes over the documentation this
224
- project already has, findings reported as `file:line` + the minimal fix ordered by seam,
225
- and a fix plan the pipeline can run. Offered once at stage 0 when the doc map is absent
226
- or stale; run it directly any time. Doctrine: `references/setup.md`.
11
+ - **Resume, never restart blindly.** If `.task-pipeline/run.md` or a pipeline task
12
+ list exists for this task, continue from the first incomplete stage.
13
+ - **No task given?** Ask for it in one line.
14
+ - **Proportional.** Stage 0's gap check decides: a small change takes the short path
15
+ and says so in one line; anything larger runs the full flow
16
+ (`references/stage-00-intake.md` → Phase 1d).
17
+ - **Modes.** `waves`: the whole board (`references/waves.md`). `iteration`: the
18
+ release loop around the waves (`references/iteration.md`). `setup`: audit the
19
+ documentation the project already has (`references/setup.md`). `checkup`: what has
20
+ shipped with no person confirming it, with no task in flight
21
+ (`references/verification.md`).
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: evidence-docs
3
- description: "Use when writing or reviewing anything that will be read as true — a decision record, a README, an acceptance report, a runbook, a changelog entry, an audit finding, or any claim that something was verified. Applies the ten canons of evidence-backed documentation — what makes a claim documentation rather than an assertion — and routes to the doctrine that enforces each one. Also use when a project needs a documentation gate, a decision register, a propagation matrix, or a retrospective that outlives its author. Triggers - 'documentation gate', 'decision record', 'ADR', 'acceptance report', 'runbook', 'is this verified', 'доказательная документация', 'записать решение', 'запиши решение', 'отчёт о приёмке', 'раннбук', 'чем это подтверждено', 'доки в синхроне'. Not for: drafts, chat answers, commit messages or code comments — say 'без доков' to opt out."
3
+ description: "Use when writing or reviewing anything read as true: a decision record, ADR, README, acceptance report, runbook, changelog, audit finding, or a claim that something was verified. Applies the ten canons of evidence-backed documentation and routes to the doctrine enforcing each; also a documentation gate or decision register. Not for: drafts, chat answers, commit messages; 'без доков' opts out."
4
4
  license: MIT
5
5
  compatibility: "Doctrine runs on any agent. No bundled scripts — nothing to install and nothing to degrade."
6
6
  ---
@@ -108,3 +108,10 @@ then nothing carries an address.
108
108
  GENERATED copies, so a single-skill install of this skill resolves every link without a
109
109
  neighbouring checkout. Edit the source home, never the copy — which file is generated,
110
110
  from where, and how to re-sync: [`GENERATED.md`](references/GENERATED.md).
111
+
112
+ ## Triggers
113
+
114
+ The description is the short form. The full trigger list it carried until 1.98.0,
115
+ moved here verbatim, still routes to this skill:
116
+
117
+ "Use when writing or reviewing anything that will be read as true — a decision record, a README, an acceptance report, a runbook, a changelog entry, an audit finding, or any claim that something was verified. Applies the ten canons of evidence-backed documentation — what makes a claim documentation rather than an assertion — and routes to the doctrine that enforces each one. Also use when a project needs a documentation gate, a decision register, a propagation matrix, or a retrospective that outlives its author. Triggers - 'documentation gate', 'decision record', 'ADR', 'acceptance report', 'runbook', 'is this verified', 'доказательная документация', 'записать решение', 'запиши решение', 'отчёт о приёмке', 'раннбук', 'чем это подтверждено', 'доки в синхроне'. Not for: drafts, chat answers, commit messages or code comments — say 'без доков' to opt out."
@@ -1,6 +1,6 @@
1
1
  # Generated copies — do not edit here
2
2
 
3
- The files in this directory (and `../templates/`) are GENERATED (a deterministic transform: in-set links stay relative, out-of-set links point at the source home’s canonical URL) from the
3
+ The files in this directory (and `../templates/`), except `retrospective.md` (a hand-written pointer to its single home since 1.98.0), are GENERATED (a deterministic transform: in-set links stay relative, out-of-set links point at the source home’s canonical URL) from the
4
4
  source home `skills/task-pipeline/references/` and `skills/task-pipeline/templates/`
5
5
  so an isolated single-skill install of evidence-docs resolves every required
6
6
  link without a neighbouring checkout (FIX-ED-01.01). Edit the source home and