task-pipeline-skill 1.40.0 → 1.41.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 +71 -0
- package/SKILL-CARD.md +1 -1
- package/package.json +1 -1
- package/plugins/task-pipeline/.claude-plugin/plugin.json +1 -1
- package/plugins/task-pipeline/skills/task-pipeline/references/retrospective.md +22 -1
- package/plugins/task-pipeline/skills/task-pipeline/references/stages.md +5 -2
- package/plugins/task-pipeline/skills/task-pipeline/templates/retro-archive.md +10 -0
- package/plugins/task-pipeline/skills/task-pipeline/templates/retro.md +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,76 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v1.41.0 — one line per run is a slope, not a bound
|
|
4
|
+
|
|
5
|
+
`retro.md` is read **in full** at stage 0, and its own doctrine called both read sections
|
|
6
|
+
*bounded by construction*. Measured 2026-08-10:
|
|
7
|
+
|
|
8
|
+
```
|
|
9
|
+
standing instructions ~1 234 tok capped at ten
|
|
10
|
+
run stamps ~2 099 tok 27 rows, capped by nothing
|
|
11
|
+
recent log ~12 441 tok queried, not read
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
The v1.38.0 audit found exactly this shape in the narrative log and moved it out of the
|
|
15
|
+
floor. It left the neighbour in the same file, with the same property, because the
|
|
16
|
+
neighbour's growth is **tidy** — one line per run. A tidy slope is still a slope: at a
|
|
17
|
+
hundred runs the stamp table alone is ~7 800 tokens of a floor the doctrine believes is
|
|
18
|
+
bounded.
|
|
19
|
+
|
|
20
|
+
**The cap is ten, and the cold trigger is why.** It reads *the last five run stamps*, so
|
|
21
|
+
ten is that with a margin and a rotated row can never be one the trigger needed. Eighteen
|
|
22
|
+
stamps rotated into `docs/superpowers/retro/2026-Q3.md`, whole, append-only. The stamp
|
|
23
|
+
section went **2 099 → 1 088 tok**, the read portion **3 333 → 2 335**, and the stage-0
|
|
24
|
+
floor to roughly **35 300**.
|
|
25
|
+
|
|
26
|
+
### The reader found six ways past the cap, and one of them was the doctrine's own command
|
|
27
|
+
|
|
28
|
+
R-005's reader defeated the first cap guard six ways, each planted and watched passing:
|
|
29
|
+
|
|
30
|
+
- **a second `## Run stamps — …` heading in the same file** held forty more rows and
|
|
31
|
+
passed. The guard read a *section*; stage 0 reads the **file**;
|
|
32
|
+
- **one leading space** on a row — still a valid table row — hid it from `startswith("|")`;
|
|
33
|
+
- **the stamp command this doctrine ships** (`printf '%s · %s\n' …`) appends prose, not a
|
|
34
|
+
table row. An agent obeying the shipped instruction literally produced forty stamps the
|
|
35
|
+
guard could not see, with `unlooked: 0`;
|
|
36
|
+
- **`templates/retro.md`** ships the same table to every host project and was outside the
|
|
37
|
+
corpus — the fourth hand-written list this repository has caught, against an invariant
|
|
38
|
+
that says corpora are discovered;
|
|
39
|
+
- **rotation by deletion** passed: a stamp removed from `retro.md` and absent from the
|
|
40
|
+
archive is history destroyed, and the guard could not tell moving from deleting;
|
|
41
|
+
- and the row check — already narrowed twice — was defeated by **swapping the two items
|
|
42
|
+
around the `·`**, which is the standing instructions' `max 10` answering for the stamps
|
|
43
|
+
again, on the other side of the separator.
|
|
44
|
+
|
|
45
|
+
Both guards are rewritten to count by **predicate over a discovered corpus**: three stamp
|
|
46
|
+
shapes (table row, list item, and the `<date> · <sha>` line the doctrine writes), every
|
|
47
|
+
file carrying a `## Run stamps` section, and the doctrine's cap read from the segment that
|
|
48
|
+
names the stamps rather than from anywhere in the row.
|
|
49
|
+
|
|
50
|
+
**Four surfaces had never learned the rule** — the live section's own intro, stage 10's
|
|
51
|
+
prune, `templates/retro.md`, and `templates/retro-archive.md`, which had no destination
|
|
52
|
+
section for a rotation the doctrine names. And stage 0 still called *one line per run* a
|
|
53
|
+
bound. All five now say the same thing.
|
|
54
|
+
|
|
55
|
+
**A hand-written count in this release was wrong.** It said twenty-one stamps rotated;
|
|
56
|
+
computed, it is **eighteen** (28 → 10). In a repository whose loudest canon is *compute,
|
|
57
|
+
never restate*.
|
|
58
|
+
|
|
59
|
+
### Two predicates that were answered by their neighbours
|
|
60
|
+
|
|
61
|
+
Both found by their own probes, both the same shape as the defects the last release's
|
|
62
|
+
reader named:
|
|
63
|
+
|
|
64
|
+
- the first version asked whether the file contained *"one line each"* and *"bounded by
|
|
65
|
+
construction"*. After the fix both survived **only inside the sentences criticising
|
|
66
|
+
them**, and the guard fired on its own correction. A predicate that cannot tell a claim
|
|
67
|
+
from its refutation has a false-positive budget above zero, which `gates.md` sets at
|
|
68
|
+
zero;
|
|
69
|
+
- scoped to the table row, it was then answered by the **standing instructions' own
|
|
70
|
+
`max 10`** in the same cell. It now reads only the part of the row after `Run stamps`.
|
|
71
|
+
|
|
72
|
+
- Guards: 248 → **250**.
|
|
73
|
+
|
|
3
74
|
## v1.40.0 — the loop had a cadence and no queue
|
|
4
75
|
|
|
5
76
|
`run.loop` said how **often** to continue. It never said **what the next item is**, so an
|
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.
|
|
15
|
+
| **Version** | 1.41.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, 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.
|
|
3
|
+
"version": "1.41.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 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.
|
|
5
|
+
"version": "1.41.0",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "ssheleg",
|
|
8
8
|
"url": "https://x.com/sshlg93"
|
|
@@ -18,7 +18,7 @@ justifies reading it protects one section while the file below it doubles.
|
|
|
18
18
|
|
|
19
19
|
| Artifact | Parts | How it is read |
|
|
20
20
|
|---|---|---|
|
|
21
|
-
| `docs/superpowers/retro.md` — **one per project** | **Standing instructions** (max **10**) · **Run stamps** (
|
|
21
|
+
| `docs/superpowers/retro.md` — **one per project** | **Standing instructions** (max **10**) · **Run stamps** (max **10**, oldest rotate out) | stage 0, **in full** — both are bounded by a **cap**, which *one line each* never was |
|
|
22
22
|
| the same file's **Recent log** | entries from the last five run stamps — narrative, and capped by nothing | stage 0, **queried** by the task's nouns. It said *in full* until 2026-08-10, when it measured **74%** of the file: an uncapped section inside a binding source is what makes the capped part get skimmed |
|
|
23
23
|
| `docs/superpowers/retro/YYYY-QN.md` — the archive | every entry and every retirement ever written, append-only | **queried** by the task's nouns; never read end to end |
|
|
24
24
|
|
|
@@ -32,6 +32,7 @@ file exists to stop.
|
|
|
32
32
|
|
|
33
33
|
- Write the entry only for a divergence — and name the layer that owned it
|
|
34
34
|
- Every lesson carries its commit
|
|
35
|
+
- The stamp table is capped at ten, and *one line per run* was never a cap
|
|
35
36
|
- Rotation — the archive is how pruning stops losing things
|
|
36
37
|
- Three grades of fix — take the highest one that can work
|
|
37
38
|
- Stamp first, then prune, then write
|
|
@@ -79,6 +80,26 @@ mechanical: the project's documentation gate runs `git rev-parse --verify --quie
|
|
|
79
80
|
<sha>^{commit}` over every backticked SHA in the retro and its archive
|
|
80
81
|
([`gates.md`](gates.md)).
|
|
81
82
|
|
|
83
|
+
## The stamp table is capped at ten, and *one line per run* was never a cap
|
|
84
|
+
|
|
85
|
+
Measured 2026-08-10: standing instructions **~1 234 tok** behind a cap of ten, run stamps
|
|
86
|
+
**~2 099 tok over 27 rows** behind nothing. Both are read in full at stage 0 and both
|
|
87
|
+
were described as *bounded by construction*. One line per run is a **slope**: at a
|
|
88
|
+
hundred runs the stamp table alone is ~7 800 tokens of a floor the doctrine believes is
|
|
89
|
+
bounded.
|
|
90
|
+
|
|
91
|
+
This is the same shape the 2026-08-10 audit found in the narrative log and moved out of
|
|
92
|
+
the floor — and it left the neighbour in the same file, with the same property, because
|
|
93
|
+
the neighbour's growth is *tidy*. A tidy slope is still a slope.
|
|
94
|
+
|
|
95
|
+
**The cap is ten and the trigger is why.** The cold rule reads *the last five run
|
|
96
|
+
stamps*; ten is that with a margin, so a stamp rotating out can never be one the trigger
|
|
97
|
+
needed. At the eleventh, the oldest row moves — whole, with its verdict and its retro
|
|
98
|
+
column — into `docs/superpowers/retro/YYYY-QN.md` under `## Run stamps`, append-only,
|
|
99
|
+
like every other rotation. **The count is printed at the prune**, beside the standing
|
|
100
|
+
instructions' own count, so a table that stops rotating is visible rather than merely
|
|
101
|
+
large.
|
|
102
|
+
|
|
82
103
|
## Rotation — the archive is how pruning stops losing things
|
|
83
104
|
|
|
84
105
|
At the prune, entries older than the last five run stamps **move** to
|
|
@@ -102,7 +102,7 @@ never that the work was skipped quietly.
|
|
|
102
102
|
`affected` / `god-nodes` answer *reach*, which is what grep cannot), `CLAUDE.md`,
|
|
103
103
|
`CONTEXT.md`/ADRs, `docs/` + `docs/ux/`, past pipeline briefs and carry-over
|
|
104
104
|
ledgers, **the retro's standing instructions and run stamps** (`docs/superpowers/retro.md`,
|
|
105
|
-
read **in full** — ten rows and
|
|
105
|
+
read **in full** — ten standing rows and ten stamps, both bounded **by a cap**, and they bind this
|
|
106
106
|
run; stamp each instruction as it fires. Its *Recent log* is **queried** by the
|
|
107
107
|
task's nouns, not read: uncapped narrative inside a binding source is what makes the
|
|
108
108
|
capped part get skimmed, [`retrospective.md`](retrospective.md)), the **knowledge wiki** if one is
|
|
@@ -656,7 +656,10 @@ never that the work was skipped quietly.
|
|
|
656
656
|
with a floor, neither ever a target ([`gates.md`](gates.md) → *Disclosures*); **the
|
|
657
657
|
retrospective is written — stamped first, then pruned, then the entry; the
|
|
658
658
|
list at or under its cap, every deletion logged in the archive with its commit,
|
|
659
|
-
entries older than five run stamps rotated into `docs/superpowers/retro
|
|
659
|
+
entries older than five run stamps rotated into `docs/superpowers/retro/` **and the
|
|
660
|
+
stamp table itself held to ten — at the eleventh the oldest stamp rotates whole into
|
|
661
|
+
the same archive, and both counts print beside the verdict** (the stamp table is read
|
|
662
|
+
in full at stage 0, so *one line per run* is a slope the prune has to stop), the run
|
|
660
663
|
stamped with its commit, every SHA in either file resolvable, and the
|
|
661
664
|
counts printed beside this verdict**; **where `pipeline.json` → `retro.publish` is
|
|
662
665
|
set, the skill-level insight is published as an issue on the skill's repository —
|
|
@@ -39,3 +39,13 @@ history attached**, which is what this section is for.
|
|
|
39
39
|
| Date | id | Instruction | Trigger that retired it | Commit |
|
|
40
40
|
|---|---|---|---|---|
|
|
41
41
|
| <YYYY-MM-DD> | R-000 | … | became a check (`npm run lint:paths`) | `<sha>` |
|
|
42
|
+
|
|
43
|
+
## Run stamps
|
|
44
|
+
|
|
45
|
+
Rotated out of `retro.md` when its live table passes ten. Append-only, whole rows —
|
|
46
|
+
the cold trigger reads the last five in the live file, so a stamp here is one it no
|
|
47
|
+
longer needs. Moving is not deleting: a stamp that leaves `retro.md` and appears
|
|
48
|
+
nowhere is history destroyed, not archived.
|
|
49
|
+
|
|
50
|
+
| Date | Topic | Commit | Verdict | Retro |
|
|
51
|
+
|---|---|---|---|---|
|
|
@@ -61,8 +61,9 @@ shape the hygiene gate's check 6 exists to find.
|
|
|
61
61
|
|
|
62
62
|
## Run stamps
|
|
63
63
|
|
|
64
|
-
One line per run, appended at stage 10
|
|
65
|
-
|
|
64
|
+
One line per run, appended at stage 10, **capped at ten** — at the eleventh the
|
|
65
|
+
oldest rotates whole into the archive. One line per run is a slope, not a bound:
|
|
66
|
+
this section is read in full at stage 0.
|
|
66
67
|
|
|
67
68
|
| Date | Topic | Commit | Verdict | Retro |
|
|
68
69
|
|---|---|---|---|---|
|