task-pipeline-skill 1.91.0 → 1.91.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,28 @@
|
|
|
1
|
+
## v1.91.2 — v1.91.1's payload, released with its no-stamp declaration
|
|
2
|
+
|
|
3
|
+
`release.yml` refused the `v1.91.1` tag's own tree: the release carried no run stamp and was
|
|
4
|
+
not named in `## Releases that carry no stamp`. Nothing was published under it. This
|
|
5
|
+
release is the same payload with the declaration in `docs/evidence/retro.md`. What v1.91.1
|
|
6
|
+
ships is described in its section below.
|
|
7
|
+
|
|
8
|
+
## v1.91.1 — the gates read the current run only, and a broken python3 stops only releases
|
|
9
|
+
|
|
10
|
+
- **The release gate read every run in the ledger.** `.task-pipeline/run.md` is
|
|
11
|
+
append-only, and a project that reuses it holds earlier runs above the current one.
|
|
12
|
+
The gate took the FIRST `stage: … tests … verdict pass` in the whole file, so a
|
|
13
|
+
previous release's pass admitted `git tag` while this run's tests were still PENDING
|
|
14
|
+
(reported 2026-10-11 from a live ledger: the 0.2.0 pass would have released 0.4.0).
|
|
15
|
+
Both gates now read only what follows the last `Run:` header — the line
|
|
16
|
+
`templates/run.md` writes once per run; a ledger with no header is one run.
|
|
17
|
+
- **The build gate had the same leak.** A previous run that had entered dev silenced
|
|
18
|
+
the ask for a new run still in planning. Same scoping, same fixture shape.
|
|
19
|
+
- **A failed python3 no longer blocks every command.** With the disk full, python3
|
|
20
|
+
could not start, and the gate refused `ls` in any project with a run in flight. A
|
|
21
|
+
shell pre-filter now lets a command through when it carries none of
|
|
22
|
+
`tag`/`push`/`release`/`publish`; anything that could release still fails closed.
|
|
23
|
+
|
|
24
|
+
Four fixtures in `test/release_gate_test.py`, each watched failing before its fix.
|
|
25
|
+
|
|
1
26
|
## v1.91.0 — the description says «баг», and a lightweight tag is refused before release
|
|
2
27
|
|
|
3
28
|
v1.90.0 added `bug` to the description so "fix this bug" routes here by name. The Russian
|
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.91.
|
|
15
|
+
| **Version** | 1.91.2 |
|
|
16
16
|
| **Surface** | Claude Code (filesystem skill + plugin) and the vercel `skills` CLI. **Not** uploaded to the Skills API; custom Skills do not sync across surfaces |
|
|
17
17
|
| **Dependencies** | None required. Optional: `context7` (MCP), `figma` (MCP), super-ux, agent-sync, graphify, obsidian-wiki, and **one of two browser channels** — `playwright` (CLI or MCP) or `chrome-devtools` (MCP); either satisfies the browser step and neither is required. 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.91.
|
|
3
|
+
"version": "1.91.2",
|
|
4
4
|
"description": "Full-cycle delivery pipeline for coding agents: a mandatory built-in intake grill, then 10 gated stages (docs, brainstorm+decompose, spec, plan, build, tests, lint/deploy, post-deploy, docs/wiki, acceptance). Every stage's doctrine ships inside the skill — no companion plugin required. This package is the installer CLI.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"task-pipeline": "bin/task-pipeline.js"
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"name": "task-pipeline",
|
|
4
4
|
"displayName": "Task Pipeline",
|
|
5
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). Retro insights can publish upstream as issues, opt-in and redacted.",
|
|
6
|
-
"version": "1.91.
|
|
6
|
+
"version": "1.91.2",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "ssheleg",
|
|
9
9
|
"url": "https://x.com/sshlg93"
|
|
@@ -54,6 +54,12 @@ try:
|
|
|
54
54
|
except Exception:
|
|
55
55
|
raise SystemExit(0)
|
|
56
56
|
|
|
57
|
+
# Only the CURRENT run speaks: everything after the last `Run:` header. A previous
|
|
58
|
+
# run that entered dev in a reused, append-only ledger silenced this gate (B-151).
|
|
59
|
+
_lines = text.splitlines()
|
|
60
|
+
_starts = [i for i, l in enumerate(_lines) if l.strip().startswith("Run:")]
|
|
61
|
+
text = "\n".join(_lines[_starts[-1]:] if _starts else _lines)
|
|
62
|
+
|
|
57
63
|
stage_lines = [l.strip() for l in text.splitlines() if l.strip().startswith("stage:")]
|
|
58
64
|
if not stage_lines:
|
|
59
65
|
raise SystemExit(0)
|
|
@@ -155,6 +155,14 @@ except Exception:
|
|
|
155
155
|
# gate cannot tell. Fail closed, and say which file to look at.
|
|
156
156
|
print("block\t%s\tthe run ledger could not be read" % act); raise SystemExit(0)
|
|
157
157
|
|
|
158
|
+
# B-151: the ledger is append-only, and a project that reuses it holds earlier runs
|
|
159
|
+
# above this one. Only the CURRENT run speaks — everything after the last `Run:`
|
|
160
|
+
# header (templates/run.md writes one per run); a ledger with no header is one run.
|
|
161
|
+
# A previous release's `verdict pass` admitted a tag whose own tests were PENDING.
|
|
162
|
+
_lines = text.splitlines()
|
|
163
|
+
_starts = [i for i, l in enumerate(_lines) if l.strip().startswith("Run:")]
|
|
164
|
+
text = "\n".join(_lines[_starts[-1]:] if _starts else _lines)
|
|
165
|
+
|
|
158
166
|
stage_lines = [l.strip() for l in text.splitlines() if l.strip().startswith("stage:")]
|
|
159
167
|
|
|
160
168
|
|
|
@@ -243,6 +251,13 @@ status=$?
|
|
|
243
251
|
# A gate that cannot reach its own decision must not wave the release through.
|
|
244
252
|
if [ $status -ne 0 ] || [ -z "$verdict" ]; then
|
|
245
253
|
[ -f "$ledger" ] || exit 0
|
|
254
|
+
# B-152: without python3 the command cannot be classified, and refusing EVERY
|
|
255
|
+
# Bash call took the whole session down on a full disk. A word-level pre-filter
|
|
256
|
+
# keeps fail-closed exactly where it matters: anything that could tag, push,
|
|
257
|
+
# release or publish is still refused; `ls` is not.
|
|
258
|
+
if ! printf '%s' "$input" | grep -Eq '(^|[^[:alnum:]_])(tag|tags|push|release|publish)([^[:alnum:]_]|$)'; then
|
|
259
|
+
exit 0
|
|
260
|
+
fi
|
|
246
261
|
echo "task-pipeline: the stage-7 gate could not run (python3 missing or failed), and this project has a run in flight ($ledger). Refusing an outward act rather than failing open." >&2
|
|
247
262
|
exit 2
|
|
248
263
|
fi
|