task-pipeline-skill 1.24.0 → 1.25.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,67 @@
1
1
  # Changelog
2
2
 
3
+ ## v1.25.0
4
+
5
+ ### One check over one number, made into a registry over the class
6
+
7
+ The "compute, never restate" guard has existed since v1.5.0 and covered exactly one
8
+ number: the count of negative self-tests, added because two living documents claimed 46
9
+ after the suite reached 50. It stayed one check while the same class went stale in five
10
+ more places, each fixed as an instance and none of them gating the shape:
11
+
12
+ - `README.md` and `SKILL.md` described `learned.md` as *"fifteen rules"* against a table
13
+ of twenty-one;
14
+ - `evals/RESULTS.md` ratcheted zero dated runs directly above a dated run, and directly
15
+ on top of `evals/run.py`, which computes one and had been printing it for five releases;
16
+ - `docs/DOCMAP.md` claimed two standing instructions against the retro's four;
17
+ - the version invariant was **named** *four-way* on four surfaces while `test/validate.py`
18
+ enforced five;
19
+ - `SKILL-CARD.md` counted "the 26 files under `references/`" against a directory of 28.
20
+
21
+ `audit.md` says a class seen twice belongs in a script. Six instances later, the file that
22
+ enforces that rule had not applied it to itself.
23
+
24
+ **The check is now a registry.** One row per claim class, each naming the pattern that
25
+ recognises the claim in prose, the command that computes the truth, and the incident that
26
+ earned the row. Adding a class costs one line instead of one more bespoke block nobody
27
+ generalises.
28
+
29
+ Two limits are stated rather than implied, because both were learned the hard way this
30
+ release:
31
+
32
+ - **A quoted number is a citation, not a claim.** `evals/RESULTS.md` narrates its own
33
+ stale `"Dated runs recorded 0"` while explaining the incident, and the first version of
34
+ the registry rejected it. The exemption is a quoted span — deterministic, with no marker
35
+ vocabulary to grow per incident, which is the same drift this release is about.
36
+ - **A count of an enumeration inside one sentence is not computable from outside it.**
37
+ `CLAUDE.md` said *"the stage list lives on nine surfaces"* above a list of ten. There is
38
+ no command that can check that, so it is **deleted** rather than gated, and the line now
39
+ says why.
40
+
41
+ **Numbers are read as digits and as words.** The incident that named the second row was a
42
+ word — `README.md` said *"fifteen rules"*, not *"15 rules"* — so a digit-only registry could
43
+ not have caught the defect it is named after. Adding word forms immediately found **four
44
+ live claims** the patterns had been skipping in silence: *"the ten canons"*, on four
45
+ surfaces. All four are correct, and none of them was being checked.
46
+
47
+ That correction matters more than the fix, because the first draft of this entry claimed
48
+ every dormant class was dormant *because the number had been deleted*. For the canons class
49
+ that was simply untrue: it was dormant because the check could not see the form the claim
50
+ was written in. **A dormant state is a claim about the corpus, and it needs the same
51
+ evidence as any other** — this one was plausible, unverified, and wrong.
52
+
53
+ **Every class reports `ok` or `dormant` beside the verdict.** Four of six are dormant now,
54
+ and that is measured rather than assumed: v1.23.1 and v1.24.0 deleted those numbers rather
55
+ than correcting them, which git history confirms. A registry reporting green over classes
56
+ it never looked at would be precisely the false success it exists to catch. It is a ratchet
57
+ against re-introduction more than a finder of present drift, and the verdict line says so
58
+ every run.
59
+
60
+ One false positive was measured and removed before shipping: `CONTRIBUTING.md` narrates
61
+ that its invariant list *"was eight guards behind"*, which is a **lag**, not a count of the
62
+ suite. The pattern excludes it explicitly rather than tolerating a noisy check — a gate that
63
+ cries wolf is switched off by the third person who hits it.
64
+
3
65
  ## v1.24.0
4
66
 
5
67
  ### A rule that reached one file, and the guard shape that let it
package/CONTRIBUTING.md CHANGED
@@ -143,10 +143,11 @@ list is a second source that goes stale on the next heading.
143
143
  A citation of the form `file.md → *Section*` is checked against the target's headings. The
144
144
  link checker proves the file resolves; only this proves the pointer is not false.
145
145
 
146
- **13. Numbers stated in living documents are computed, not restated.** The guard
147
- count in `README.md`, `SKILL-CARD.md` and `evals/RESULTS.md` is compared against the
148
- negative self-tests the workflow defines. CHANGELOG entries are exempt they record
149
- what a past release shipped.
146
+ **13. Numbers stated in living documents are computed, not restated.** Superseded in
147
+ substance by **invariant 35**, which turns this single guard-count comparison into a
148
+ registry over the class. Kept as the entry point because it is the shorter statement of
149
+ the law and the one people look for; the mechanism, the exemptions and the scope live in
150
+ 35, and this text names no surfaces of its own so the two cannot disagree.
150
151
 
151
152
  **14. Every relative link in `README.md` resolves inside the published package.**
152
153
  `package.json` → `files[]` must ship whatever the README points at, or the link
@@ -279,7 +280,24 @@ A paragraph that narrates the old order as the defect is exempt by an explicit m
279
280
  list, not by a heuristic.
280
281
  *(guard: `enumerates the retro's acts as`)*
281
282
 
282
- **35. Every invariant above names the guard that enforces it, and that guard exists.**This list claims to be *what the validator enforces*; it was eight guards behind when
283
+ **35. A number a living document states is compared against the command that computes
284
+ it — from a registry, not a bespoke check.** This began as one check over one number, and
285
+ stayed one check while the same class went stale in five more places: `learned.md`
286
+ described as *"fifteen rules"* against a table of twenty-one, `evals/RESULTS.md` ratcheting
287
+ zero dated runs directly above a dated run and directly on top of a tool computing one,
288
+ `docs/DOCMAP.md` claiming two standing instructions against four, and the version invariant
289
+ **named** *four-way* while five surfaces were enforced. Each was fixed as an instance; the
290
+ class was never gated — `audit.md`'s own rule, unapplied to the file that enforces it.
291
+ Adding a class is now **a row**, naming the claim pattern, the computing command and the
292
+ incident that earned it. Two things are stated rather than implied: a **quoted** number is a
293
+ citation of what a document said and is exempt, so a register can narrate its own drift;
294
+ and a count of an enumeration inside one sentence is not computable from outside it, so
295
+ those are **deleted** instead — `CLAUDE.md`'s stage-list line says so where it used to carry
296
+ one. Every class prints `ok`/`dormant` beside the verdict, because a registry reporting
297
+ green over classes it never looked at is the false success it exists to catch.
298
+ *(guard: `— derive the number or delete it. This class is registered `)*
299
+
300
+ **36. Every invariant above names the guard that enforces it, and that guard exists.**This list claims to be *what the validator enforces*; it was eight guards behind when
283
301
  an audit measured it. A claim of enforcement is now checked like any other claim.
284
302
  *(guard: `whose message does not appear in`)* — and a cited literal must lie inside
285
303
  a **single** string in `test/validate.py`: the check reads that file as text, so a
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.24.0 |
15
+ | **Version** | 1.25.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.24.0",
3
+ "version": "1.25.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.24.0",
5
+ "version": "1.25.0",
6
6
  "author": {
7
7
  "name": "ssheleg",
8
8
  "url": "https://x.com/sshlg93"