task-pipeline-skill 1.7.1 → 1.8.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 +130 -0
- package/README.md +28 -0
- package/package.json +1 -1
- package/plugins/task-pipeline/.claude-plugin/plugin.json +1 -1
- package/plugins/task-pipeline/skills/task-pipeline/SKILL.md +1 -1
- package/plugins/task-pipeline/skills/task-pipeline/pipeline.example.json +1 -1
- package/plugins/task-pipeline/skills/task-pipeline/references/acceptance.md +26 -2
- package/plugins/task-pipeline/skills/task-pipeline/references/artifacts.md +6 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/audit.md +11 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/brainstorm.md +24 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/build.md +44 -1
- package/plugins/task-pipeline/skills/task-pipeline/references/companion-skills.md +10 -1
- package/plugins/task-pipeline/skills/task-pipeline/references/decomposition.md +9 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/documentation.md +20 -2
- package/plugins/task-pipeline/skills/task-pipeline/references/gates.md +14 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/grill.md +11 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/hooks.md +75 -10
- package/plugins/task-pipeline/skills/task-pipeline/references/knowledge-graph.md +8 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/knowledge-sources.md +13 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/learned.md +8 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/loop-guard.md +8 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/planning.md +25 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/retrospective.md +11 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/review.md +17 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/spec.md +22 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/stages.md +61 -5
- package/plugins/task-pipeline/skills/task-pipeline/references/tdd.md +10 -0
- package/plugins/task-pipeline/skills/task-pipeline/templates/docgate.sh +194 -99
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,135 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v1.8.0 — 2026-08-03
|
|
4
|
+
|
|
5
|
+
### Added — the skill now meets Anthropic's own authoring guidance, measurably
|
|
6
|
+
|
|
7
|
+
Audited against the four Agent Skills pages (overview, best practices, enterprise,
|
|
8
|
+
API guide). Most of the spec already held — `name` 13/64 chars, `description` inside
|
|
9
|
+
1024, `SKILL.md` 334/500 lines, all 23 references linked **directly** from SKILL.md,
|
|
10
|
+
forward slashes only, 436 KB against a 30 MB ceiling, and the plan-validate-execute
|
|
11
|
+
pattern the guidance describes is exactly the stage 3→4 set-equality check. Five
|
|
12
|
+
things did not.
|
|
13
|
+
|
|
14
|
+
**Every reference over 100 lines now carries a `## Contents` list — 21 files, from
|
|
15
|
+
zero.** The guidance is explicit about why: *"This ensures Claude can see the full
|
|
16
|
+
scope of available information even when previewing with partial reads."* That
|
|
17
|
+
preview is real, and `references/stages.md` is 500 lines — an agent that previewed
|
|
18
|
+
it saw stages 0 and 1 and could not learn stage 9 existed. The list is **compared
|
|
19
|
+
against the file's own headings**, not merely required to be present, because a
|
|
20
|
+
hand-maintained contents list is a second source that goes stale on the next
|
|
21
|
+
heading.
|
|
22
|
+
|
|
23
|
+
**A behavioural evaluation suite, where there was none.** 46 structural guards prove
|
|
24
|
+
the skill is well-*formed*; nothing proved it *behaves*. `evals/` now carries 13
|
|
25
|
+
evaluations across the five dimensions the enterprise page names — should-trigger,
|
|
26
|
+
should-not-trigger, ambiguous, coexistence with super-ux, and instruction-following
|
|
27
|
+
(does phase 1 really run before the first question; does stage 9 walk the matrix and
|
|
28
|
+
print ratchets; does a stage-5 subagent refuse to write the register; does stage 10
|
|
29
|
+
run the ladder walk before the table).
|
|
30
|
+
|
|
31
|
+
`evals/run.py` validates the suite and prints the protocol. **It never reports a
|
|
32
|
+
pass**, because Anthropic ships no runner and a script claiming to have executed a
|
|
33
|
+
model would be the exact failure this repository is written against.
|
|
34
|
+
`evals/RESULTS.md` records the honest state — *authored, zero models exercised, zero
|
|
35
|
+
runs* — as a ratchet, so "46 of 46 green" is never read as "the skill is known to
|
|
36
|
+
work".
|
|
37
|
+
|
|
38
|
+
**A copyable run checklist and a stated degree of freedom per stage.** The guidance
|
|
39
|
+
recommends a checklist Claude copies into its response for complex workflows, and
|
|
40
|
+
matching specificity to fragility — high freedom in the open field, low on the
|
|
41
|
+
narrow bridge. Every stage now declares which it is and why: stage 2 is high (many
|
|
42
|
+
designs are valid), stages 5, 7 and 9 are low (TDD order, an irreversible deploy, a
|
|
43
|
+
mechanical matrix walk).
|
|
44
|
+
|
|
45
|
+
**`SKILL-CARD.md`** — the registry entry the enterprise guidance asks for (purpose,
|
|
46
|
+
owner, version, dependencies, evaluation status) plus an honest pass over its
|
|
47
|
+
risk-tier table. This skill scores **three High indicators** — shipped scripts, MCP
|
|
48
|
+
references, tool invocations — and says so, along with the three things a consumer
|
|
49
|
+
should know rather than discover: author and reviewer are the same person, commits
|
|
50
|
+
are unsigned, and behavioural evidence is missing rather than thin.
|
|
51
|
+
|
|
52
|
+
### Changed
|
|
53
|
+
|
|
54
|
+
- **The description leads with what the skill does, then the trigger** — the shape
|
|
55
|
+
Anthropic's own examples use. The validator used to *require* the string start with
|
|
56
|
+
"Use when", which enforced the WHEN half and left the WHAT half optional; it now
|
|
57
|
+
checks for both, plus the third-person voice the guidance requires.
|
|
58
|
+
- MCP tools are named fully qualified (`context7:resolve-library-id`), because
|
|
59
|
+
without the server prefix Claude may fail to locate the tool.
|
|
60
|
+
|
|
61
|
+
Four new guards, each with a negative self-test watched failing.
|
|
62
|
+
|
|
63
|
+
## v1.7.2 — 2026-08-03
|
|
64
|
+
|
|
65
|
+
### Fixed — nine findings from a post-release investigation of v1.7.1
|
|
66
|
+
|
|
67
|
+
The release was audited against the skill's own ladder, bottom-up, findings ordered
|
|
68
|
+
by seam. Every one below was proven before it was fixed and again after.
|
|
69
|
+
|
|
70
|
+
**The gate enforced one of the two register shapes it promises.** `documentation.md`
|
|
71
|
+
permits two decision homes — `docs/DECISIONS.md` or `docs/adr/` — and says they owe
|
|
72
|
+
the same six things; `docgate.sh` parsed only the first. Measured on a real ADR
|
|
73
|
+
project: **eight of ten sections went `dormant`**, dormant is green by design, and a
|
|
74
|
+
planted propagation violation was not caught. The gate now builds a **normalised
|
|
75
|
+
entry index** from whichever home exists, so no section knows which shape it is
|
|
76
|
+
reading, and holding both at once is itself an error. Seven planted defects on the
|
|
77
|
+
ADR shape, all firing.
|
|
78
|
+
|
|
79
|
+
Two of those probes exposed bugs in the checks rather than in the fixtures — the
|
|
80
|
+
fixture is derived from `templates/adr.md`'s own fenced example, so it cannot drift
|
|
81
|
+
from the documented format. HTML comments were not stripped, so a status line
|
|
82
|
+
carrying `<!-- or: Superseded by ADR-0012 -->` made an entry read as retired *and*
|
|
83
|
+
invented an undefined id; and the first fix dropped the line that **opened** the
|
|
84
|
+
comment, throwing away the `Status:` before it. Duplicate ADR numbers were counted
|
|
85
|
+
from the entry index, whose one-row-per-id dedupe swallowed exactly the second file
|
|
86
|
+
this check exists to find — it counts filenames now, because the filename is the
|
|
87
|
+
allocator.
|
|
88
|
+
|
|
89
|
+
**Exit 0 was not proof that the gate had looked.** Every section can go `dormant`,
|
|
90
|
+
so a gate blind to a shape passes identically to one that reads it. The validator
|
|
91
|
+
now asserts the seeded run **reports which shape it found** and **ran at least N
|
|
92
|
+
live checks** — the difference between "it did not fail" and "it looked".
|
|
93
|
+
|
|
94
|
+
**The Doc Loop was declared cross-cutting and appeared in no stage doctrine.**
|
|
95
|
+
`brainstorm.md`, `spec.md`, `build.md`, `review.md` and `acceptance.md` had zero
|
|
96
|
+
mentions of it — so the flow as an agent *executes* it never ran the loop, because
|
|
97
|
+
an agent opens the stage file, not the orchestrator's summary. All five now say
|
|
98
|
+
where a settled decision goes, and it is a guard.
|
|
99
|
+
|
|
100
|
+
Most of that gap was at stage 5, which settles more decisions than any other stage
|
|
101
|
+
and runs in an isolated worktree with parallel implementers. The rule is now
|
|
102
|
+
explicit and argued from the same physics as the existing parallel-fan-out rule:
|
|
103
|
+
**a subagent never writes the register** — append-only shared state cannot be
|
|
104
|
+
hand-merged across worktrees, and an id cannot be *reserved* from a branch that
|
|
105
|
+
cannot see the other writers. Decisions ride the implementer report and the ledger;
|
|
106
|
+
the orchestrator runs the loop after integration, as a single writer.
|
|
107
|
+
|
|
108
|
+
**`hooks.md` stated an external contract from memory.** Re-fetched from the Claude
|
|
109
|
+
Code hooks reference and corrected: `permissionDecision` has **four** values, not
|
|
110
|
+
one; there are **35** events, not the four listed; `effort`, `agent_id` and
|
|
111
|
+
`agent_type` were missing from the stdin fields; `if` is evaluated on five tool
|
|
112
|
+
events and its Bash matching is best-effort. The reference also says outright that
|
|
113
|
+
**exit 1 is non-blocking "even though 1 is the conventional Unix failure code"** —
|
|
114
|
+
which is the sharpest possible argument for the `|| exit 2` this file already
|
|
115
|
+
required. Provenance and fetch date are now in the file, because stage 1 of this
|
|
116
|
+
pipeline exists for exactly this.
|
|
117
|
+
|
|
118
|
+
**Smaller, and all real:** a "we don't document" escape hatch in `documentation.md`
|
|
119
|
+
contradicted the seeding rule four lines above it and the stage-0 gate; the stage-9
|
|
120
|
+
config gate carried both the retired criterion *"docs in sync with code"* and the
|
|
121
|
+
sentence declaring it retired; a lost edit meant the grill never asked the
|
|
122
|
+
documentation-regime question the brief had a field for — and the sweep-drift guard
|
|
123
|
+
missed it because it compared **stage numbers**, which both files still matched, so
|
|
124
|
+
it now compares topics per stage (measured: zero false positives, including the
|
|
125
|
+
legitimate case where the brief splits one grill row into two); `acceptance.md`
|
|
126
|
+
never mentioned the documentation gate it is supposed to prove; and nested bold in
|
|
127
|
+
the stage-10 gate criterion inverted the emphasis of everything after "every
|
|
128
|
+
deletion logged".
|
|
129
|
+
|
|
130
|
+
Three new guards, each with a negative self-test watched failing.
|
|
131
|
+
**46 of 46 guards provably reject their planted defect.**
|
|
132
|
+
|
|
3
133
|
## v1.7.1 — 2026-08-03
|
|
4
134
|
|
|
5
135
|
### Fixed — the tag-ancestry gate had been failing on every release since v1.6.1
|
package/README.md
CHANGED
|
@@ -464,6 +464,32 @@ Code, and **any exit code other than 2 is non-blocking, so a crashing guard fail
|
|
|
464
464
|
open** and stops guarding without announcing it. Elsewhere the run is `ungated` and
|
|
465
465
|
must say so.
|
|
466
466
|
|
|
467
|
+
### Held to Anthropic's own Skill authoring guidance
|
|
468
|
+
|
|
469
|
+
Audited against the four Agent Skills pages. Most of it already held — `name`
|
|
470
|
+
13/64 chars, `description` inside 1024, `SKILL.md` 334/500 lines, all 23 references
|
|
471
|
+
linked **directly** from `SKILL.md`, 436 KB against a 30 MB ceiling. What did not,
|
|
472
|
+
now does:
|
|
473
|
+
|
|
474
|
+
- **Every reference over 100 lines carries a `## Contents` list**, and the list is
|
|
475
|
+
*compared against the file's own headings* rather than trusted. The guidance is
|
|
476
|
+
explicit about why: a long file gets previewed with a partial read, and
|
|
477
|
+
`stages.md` is 500 lines.
|
|
478
|
+
- **A behavioural evaluation suite** (`evals/`) — 13 evaluations across the five
|
|
479
|
+
dimensions the enterprise guidance names: should-trigger, should-not-trigger,
|
|
480
|
+
ambiguous, coexistence, instruction-following. `evals/run.py` validates the suite
|
|
481
|
+
and prints the protocol; it **never reports a pass**, because no runner exists
|
|
482
|
+
upstream and a script claiming to have run a model would be the exact failure this
|
|
483
|
+
skill is written against. `evals/RESULTS.md` carries the honest state.
|
|
484
|
+
- **A copyable run checklist** and a **stated degree of freedom per stage** — high
|
|
485
|
+
in the open field (brainstorm), low on the narrow bridge (TDD order, deploy, the
|
|
486
|
+
matrix walk).
|
|
487
|
+
- **[`SKILL-CARD.md`](SKILL-CARD.md)** — the registry entry an enterprise reviewer
|
|
488
|
+
needs, with an honest pass over the risk-tier table. This skill scores three
|
|
489
|
+
*High* indicators and says so, along with what a consumer should know rather than
|
|
490
|
+
discover: author and reviewer are the same person, commits are unsigned, and the
|
|
491
|
+
eval suite has not been executed.
|
|
492
|
+
|
|
467
493
|
### The retrospective — the run teaches the next run, and the list stays short
|
|
468
494
|
|
|
469
495
|
Every gate in this flow is good at *this* run and blind across runs. So the same
|
|
@@ -717,6 +743,8 @@ recommendation, so you arm the whole run in one exchange. Detail:
|
|
|
717
743
|
| [`references/retrospective.md`](plugins/task-pipeline/skills/task-pipeline/references/retrospective.md) | the project retro: the three grades of fix, the mandatory prune, the cap of ten |
|
|
718
744
|
| [`references/model-tiering.md`](plugins/task-pipeline/skills/task-pipeline/references/model-tiering.md) | model policy, the `/model` reminder, overrides |
|
|
719
745
|
| [`templates/`](plugins/task-pipeline/skills/task-pipeline/templates/README.md) | brief, carry-over ledger, `CONTEXT.md` and ADR skeletons, the doc map, both registers, the retro and its archive, the seeded `docgate.sh`, a worked hook |
|
|
746
|
+
| [`SKILL-CARD.md`](SKILL-CARD.md) | the registry entry and risk-tier disclosure a reviewer needs before deploying it |
|
|
747
|
+
| [`evals/`](evals/RESULTS.md) | the behavioural evaluation suite, its protocol, and what has actually been observed |
|
|
720
748
|
| [`CHANGELOG.md`](CHANGELOG.md) | every release, with the reasoning behind it |
|
|
721
749
|
| [`CONTRIBUTING.md`](CONTRIBUTING.md) | dev setup, the validator, the version-sync rule, release flow |
|
|
722
750
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "task-pipeline-skill",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.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.
|
|
5
|
+
"version": "1.8.0",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "ssheleg",
|
|
8
8
|
"url": "https://x.com/sshlg93"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: task-pipeline
|
|
3
|
-
description: "
|
|
3
|
+
description: "Runs a substantial task through a full delivery pipeline: an intake grill that expands the request into a locked brief, then docs study, brainstorm, spec, plan, subagent build, tests, lint/deploy, post-deploy check, docs/wiki sync and acceptance — gated stages whose doctrine ships inside this skill (no required companions). Use when any substantial feature, fix or build should follow the disciplined cycle rather than ad-hoc coding, or on 'run this through the pipeline' / 'прогони по конвейеру', 'the full cycle' / 'полный цикл', /task-pipeline. The grill is mandatory and front-loads every decision, so stages 1→10 run without mid-flight questions; documentation is a deliverable with its own gate; recommends super-ux for user-facing work; confirms one model up front (most capable available, never a hardcoded id); reads host conventions so it stays project-agnostic."
|
|
4
4
|
license: MIT
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -151,7 +151,7 @@
|
|
|
151
151
|
],
|
|
152
152
|
"gate": {
|
|
153
153
|
"type": "auto",
|
|
154
|
-
"check": "the stage-0 source ledger is the work list — every source the harvest read is updated if this run changed or disproved it; docs
|
|
154
|
+
"check": "the stage-0 source ledger is the work list — every source the harvest read is updated if this run changed or disproved it; host module docs and runbooks updated in the same change; wiki synced via wiki-update when obsidian-wiki is installed (absent → recommended once, never a blocker); THE CODE GRAPH REFRESHED — '/graphify . --update' where graphify-out/ exists (references/knowledge-graph.md), or the reason it was skipped written into the carry-over ledger; absent → recommended once, never a blocker. The close-out has three artifacts, not two: the graph is what the NEXT run's harvest queries first, so a stale one is a false premise carrying the authority of a machine. Then the cheap half of the GRAPH-VS-DOCS DIVERGENCE CHECK: a hub 'graphify god-nodes' reports that no document names is an undocumented seam, an edge the docs deny is either a leak in the code or a lie in the docs, and a doc naming a module the graph has no node for describes something that no longer exists — doc-side findings fixed here, absences handed to stage 10's ladder walk as REQ rows. Docs living in another repository are outward — proposed with an explicit go, or carried over with the exact edit; dangling links fixed. THE PROPAGATION SWEEP RUNS FIRST (references/documentation.md): the source ledger names the documents this run READ, the matrix in docs/DOCMAP.md names the documents it OWES, and they are not the same list — the document nobody read is exactly the document nobody updated. Walk the matrix row for every change type this run produced; every settled thing carries an id in the register; every answered question is flipped to Resolved-> that id; every document named in a 'Consequences / affects:' line cites its decision. THEN THE DOCUMENTATION GATE IS GREEN — the command docs/DOCMAP.md names (bash scripts/check-docs.sh by default) — with its RATCHET COUNTS PRINTED beside the verdict and any skipped check stating that it skipped (references/gates.md), so 'green' reads as 'green, and here is exactly what was not looked at'. This replaced the unfalsifiable 'docs in sync with code', which named no artefact and no command. The as-built record is written and reconciled, and the carry-over count is printed beside this verdict"
|
|
155
155
|
}
|
|
156
156
|
},
|
|
157
157
|
{
|
|
@@ -7,6 +7,19 @@ None of them asks *"does this still contain everything that was asked for?"*
|
|
|
7
7
|
That is this stage's only job: **go back to the brief and account for every
|
|
8
8
|
requirement.** It is what turns the pipeline from a funnel into a circle.
|
|
9
9
|
|
|
10
|
+
## Contents
|
|
11
|
+
|
|
12
|
+
- Why a stage and not a gate
|
|
13
|
+
- First, the ladder walk — what the list itself is missing
|
|
14
|
+
- Inputs
|
|
15
|
+
- Output — the coverage table
|
|
16
|
+
- Evidence, not assertion
|
|
17
|
+
- Several repositories — a submodule is finished when its parent says so
|
|
18
|
+
- The closing question
|
|
19
|
+
- The retrospective — the run's last act
|
|
20
|
+
- GATE (manual)
|
|
21
|
+
- When the answer is "something's missing"
|
|
22
|
+
|
|
10
23
|
## Why a stage and not a gate
|
|
11
24
|
|
|
12
25
|
The loss this catches doesn't happen inside a stage — it happens **on the seams**.
|
|
@@ -87,6 +100,12 @@ Run: <branch/commit range> · Date: YYYY-MM-DD
|
|
|
87
100
|
| `deferred` | agreed not to do it now | the operator's agreement **and** a tracker entry |
|
|
88
101
|
| `dropped` | agreed it isn't wanted | the operator's agreement + the reason |
|
|
89
102
|
|
|
103
|
+
**A `dropped` is a scope decision, and it outlives this run.** The operator's
|
|
104
|
+
agreement closes the row here; the **Doc Loop**
|
|
105
|
+
([`documentation.md`](documentation.md)) is what stops the same requirement being
|
|
106
|
+
re-proposed next quarter by someone who never saw this table. A `deferred` needs its
|
|
107
|
+
tracker entry, not an entry in the register — it is a schedule, not a decision.
|
|
108
|
+
|
|
90
109
|
Those four are the only ways a requirement may close. Anything that fits none of
|
|
91
110
|
them is `unknown`, and **`unknown` fails the gate** — that is the whole mechanism:
|
|
92
111
|
the run cannot end while a requirement is still unclassified.
|
|
@@ -187,8 +206,13 @@ All of:
|
|
|
187
206
|
bottom-up, findings ordered by seam, absences turned into REQ rows **before**
|
|
188
207
|
the table was written, and the two pass counts recorded.
|
|
189
208
|
2. **Every check this gate leans on has been seen failing** at least once against a
|
|
190
|
-
planted defect (`audit.md` → *Exit criterion
|
|
191
|
-
|
|
209
|
+
planted defect (`audit.md` → *Exit criterion*; the procedure, with the commands,
|
|
210
|
+
is [`gates.md`](gates.md) → *Probing*). An unproven check's green is not
|
|
211
|
+
evidence. That includes **the documentation gate** the project's doc map names
|
|
212
|
+
([`documentation.md`](documentation.md)) — stage 9 ran it, this stage is where it
|
|
213
|
+
is *proven*, and its **ratchet counts are printed beside this verdict**. A
|
|
214
|
+
documentation gate is the easiest one in a run to inherit unproven, because it
|
|
215
|
+
was green the first time anyone looked at it.
|
|
192
216
|
3. **Every REQ has a status** — none `unknown`, none blank.
|
|
193
217
|
4. **Every `verified` carries evidence** of the kind above.
|
|
194
218
|
5. **Every `partial` names what's missing** and where it's tracked.
|
|
@@ -5,6 +5,12 @@ a resumed or handed-off run always knows where to look. This is the recommended
|
|
|
5
5
|
structure; a host project may relocate roots via its `CLAUDE.md`, but keep the
|
|
6
6
|
shape.
|
|
7
7
|
|
|
8
|
+
## Contents
|
|
9
|
+
|
|
10
|
+
- In the host project
|
|
11
|
+
- Stage → artifact map
|
|
12
|
+
- This repo (task-pipeline itself), for reference
|
|
13
|
+
|
|
8
14
|
## In the host project
|
|
9
15
|
|
|
10
16
|
```
|
|
@@ -14,6 +14,17 @@ This file is the method that finds those. It is **cross-cutting**: stage 10 runs
|
|
|
14
14
|
before writing the coverage table, the program loop runs it per module, and a task
|
|
15
15
|
whose whole job is "audit X" runs nothing else.
|
|
16
16
|
|
|
17
|
+
## Contents
|
|
18
|
+
|
|
19
|
+
- Three things that are easy to confuse
|
|
20
|
+
- Why "look again, more carefully" stops working
|
|
21
|
+
- The ladder
|
|
22
|
+
- How one audit pass runs
|
|
23
|
+
- Exit criterion — the part usually skipped
|
|
24
|
+
- The three rules that stop this becoming another loop
|
|
25
|
+
- When this runs
|
|
26
|
+
- Rationalizations
|
|
27
|
+
|
|
17
28
|
## Three things that are easy to confuse
|
|
18
29
|
|
|
19
30
|
| File | Runs when | Answers |
|
|
@@ -12,6 +12,18 @@ approved design — not at code.
|
|
|
12
12
|
> the UI verdict is a required output, and the spec write-up moved to stage 3
|
|
13
13
|
> ([`spec.md`](spec.md)).
|
|
14
14
|
|
|
15
|
+
## Contents
|
|
16
|
+
|
|
17
|
+
- The hard gate
|
|
18
|
+
- Input: the brief, not a blank page
|
|
19
|
+
- The loop
|
|
20
|
+
- Design for isolation and clarity
|
|
21
|
+
- Working in an existing codebase
|
|
22
|
+
- UI detection — a required output
|
|
23
|
+
- The approved design is a set of decisions — record them
|
|
24
|
+
- GATE (manual)
|
|
25
|
+
- Rationalizations
|
|
26
|
+
|
|
15
27
|
## The hard gate
|
|
16
28
|
|
|
17
29
|
**No implementation action before the operator approves a design.** No code, no
|
|
@@ -88,6 +100,18 @@ it arms the stage-3 UX track ([`spec.md`](spec.md) → *UX track*). When it's
|
|
|
88
100
|
genuinely borderline, record "yes": a false positive costs one extra chain, a false
|
|
89
101
|
negative ships an unspecified interface.
|
|
90
102
|
|
|
103
|
+
## The approved design is a set of decisions — record them
|
|
104
|
+
|
|
105
|
+
An approved approach is a decision, and so is each alternative rejected for a reason
|
|
106
|
+
worth remembering. Run the **Doc Loop** ([`documentation.md`](documentation.md)) on
|
|
107
|
+
the ones that will outlive this run: the shape chosen, the boundary drawn, the option
|
|
108
|
+
deliberately not taken. Not every preference — the ones a future reader would
|
|
109
|
+
otherwise re-litigate from scratch, which is the same test an ADR applies.
|
|
110
|
+
|
|
111
|
+
The cost of skipping it is specific: a design approved in conversation and recorded
|
|
112
|
+
only in the spec dies with that spec, and the next run re-opens a question the
|
|
113
|
+
operator already answered.
|
|
114
|
+
|
|
91
115
|
## GATE (manual)
|
|
92
116
|
|
|
93
117
|
The operator approves the design **and** the UI verdict is recorded **and every REQ
|
|
@@ -29,6 +29,17 @@ the work; the gates, the artifacts and the review discipline do not. Say plainly
|
|
|
29
29
|
that the run is inline, since a self-review is weaker evidence than a fresh
|
|
30
30
|
reviewer's.
|
|
31
31
|
|
|
32
|
+
## Contents
|
|
33
|
+
|
|
34
|
+
- 1. Isolation
|
|
35
|
+
- 2. Workspace and ledger
|
|
36
|
+
- 3. Models
|
|
37
|
+
- 4. The task loop
|
|
38
|
+
- 5. Final whole-branch review
|
|
39
|
+
- 6. Integrate, then finish
|
|
40
|
+
- GATE (auto)
|
|
41
|
+
- Rationalizations
|
|
42
|
+
|
|
32
43
|
## 1. Isolation
|
|
33
44
|
|
|
34
45
|
Work never starts on `main`/`master` without the operator's explicit consent
|
|
@@ -177,6 +188,35 @@ Record the implementer's agent identity: fix rounds 1–3 resume it.
|
|
|
177
188
|
> commit range, a one-line test summary, and your concerns. Ask before starting
|
|
178
189
|
> if anything in the brief is ambiguous — questions are cheaper than rework.
|
|
179
190
|
|
|
191
|
+
### 4.1a Decisions settled inside a task — and who may write them down
|
|
192
|
+
|
|
193
|
+
The report above already asks for *"decisions you made"*, and stage 5 settles more
|
|
194
|
+
of them than any other stage: an interface picked between two tasks, a ruling on a
|
|
195
|
+
review finding, a constraint discovered in the code. Every one is a Doc Loop trigger
|
|
196
|
+
([`documentation.md`](documentation.md)) — and this is the one stage where running
|
|
197
|
+
that loop naively breaks something.
|
|
198
|
+
|
|
199
|
+
**A subagent never writes the register.** Not a style rule; the same physical
|
|
200
|
+
argument as §4.2 below, one level up:
|
|
201
|
+
|
|
202
|
+
- The register is **append-only shared state**. Two implementers appending in two
|
|
203
|
+
worktrees conflict on the one file a project cannot afford to hand-merge, and the
|
|
204
|
+
loser's entry is the one that quietly disappears.
|
|
205
|
+
- An **id cannot be reserved from inside an isolated branch.** Reserving *is* an
|
|
206
|
+
arbitration between concurrent writers, and a worktree is by construction unable
|
|
207
|
+
to see the other writers ([`documentation.md`](documentation.md) → *Registers are
|
|
208
|
+
shared state*).
|
|
209
|
+
|
|
210
|
+
So the route is fixed: a decision settled in a task goes into the **implementer
|
|
211
|
+
report**, and into the **carry-over ledger** if it outlives the task — and the
|
|
212
|
+
**orchestrator runs the Doc Loop after integration**, on the base branch, as a
|
|
213
|
+
single writer. Nothing is lost and nothing collides.
|
|
214
|
+
|
|
215
|
+
**What that costs, said out loud:** between the ruling and the entry there is a
|
|
216
|
+
window in which the decision exists only in a report. That is exactly why the gate
|
|
217
|
+
below harvests every report and parked finding into the ledger **before the scratch
|
|
218
|
+
workspace is deleted** — the ledger is what survives the window.
|
|
219
|
+
|
|
180
220
|
### 4.2 Parallel groups — when fan-out is allowed
|
|
181
221
|
|
|
182
222
|
The plan's parallel groups ([`planning.md`](planning.md)) describe what *may* run
|
|
@@ -353,7 +393,10 @@ code quality); the full test suite green; every open finding either fixed or par
|
|
|
353
393
|
with a ruling; **every parked finding and implementer concern harvested into the
|
|
354
394
|
carry-over ledger** — the workspace is deleted, so nothing may stay only there;
|
|
355
395
|
no task left BLOCKED; the branch integrated per the brief's policy — or the
|
|
356
|
-
operator explicitly told you to leave it, and that is recorded.
|
|
396
|
+
operator explicitly told you to leave it, and that is recorded. **Every decision a
|
|
397
|
+
task settled has run the Doc Loop after integration, written by the orchestrator on
|
|
398
|
+
the base branch** (§4.1a — a subagent never writes the register), or is sitting in
|
|
399
|
+
the ledger with its entry still owed. Verify it yourself;
|
|
357
400
|
a red suite or an unresolved BLOCKED does not advance to stage 6.
|
|
358
401
|
|
|
359
402
|
## Rationalizations
|
|
@@ -8,6 +8,15 @@ something isn't installed.
|
|
|
8
8
|
What remains is a short list of **optional** companions that make individual stages
|
|
9
9
|
better, plus one that is required only for user-facing work.
|
|
10
10
|
|
|
11
|
+
## Contents
|
|
12
|
+
|
|
13
|
+
- Built in — nothing to install
|
|
14
|
+
- The matrix
|
|
15
|
+
- Optional bridge — substituting an external skill set
|
|
16
|
+
- Preflight (emit before stage 0)
|
|
17
|
+
- Credit
|
|
18
|
+
- Hand-off the other direction
|
|
19
|
+
|
|
11
20
|
## Built in — nothing to install
|
|
12
21
|
|
|
13
22
|
| Stage | Doctrine |
|
|
@@ -34,7 +43,7 @@ better, plus one that is required only for user-facing work.
|
|
|
34
43
|
| Skill / tool | Needed for | Required? | Install |
|
|
35
44
|
|---|---|---|---|
|
|
36
45
|
| **super-ux** (`ux-foundation`, `ux-flows`, `ux-scenarios`, `ux-audit`, `/ux`, `/ux-lint`) | stage 3 UX track | **Required for any user-facing task** | `/plugin marketplace add ssheleg/super-ux` → `/plugin install super-ux@super-ux` (or `npx skills add ssheleg/super-ux`) |
|
|
37
|
-
| **context7** (MCP) | stage 1 docs study | Recommended (web-search fallback) | connect the context7 MCP server |
|
|
46
|
+
| **context7** (MCP — call tools fully qualified: `context7:resolve-library-id`, `context7:query-docs`) | stage 1 docs study | Recommended (web-search fallback) | connect the context7 MCP server |
|
|
38
47
|
| **Figma** (MCP) | stage 3 UX track, when the project designs visually — super-ux mirrors each `SCR-` screen/state into a frame | Optional, **UI + Figma-on only**. Absent → super-ux degrades to text-only *by itself and never blocks*, so shipping a UI feature with no mockups becomes a silent scope call — which is why the stage-0 sweep decides it | connect the Figma MCP server (`/mcp`, or your claude.ai connectors) |
|
|
39
48
|
| **[obsidian-wiki](https://github.com/ar9av/obsidian-wiki)** (`wiki-query`, `wiki-update`) | **stage 0 harvest** (query what's already known) **+ stage 9 sync** | **Recommended** — never a gate; absent → harvest runs on repo docs alone | `pip install obsidian-wiki` → `obsidian-wiki setup --vault /path/to/your/vault` |
|
|
40
49
|
| **[graphify](https://github.com/Graphify-Labs/graphify)** (`/graphify`, `graphify query\|affected\|god-nodes`) | **stage 0 harvest** (reach: what calls this, what breaks if it moves) **+ stage 9 refresh + the graph↔docs divergence check** ([`knowledge-graph.md`](knowledge-graph.md)) | **Recommended** — never a gate; absent → the harvest greps instead, and the divergence axis is unavailable | `uv tool install graphifyy` → `graphify install` → `/graphify .` |
|
|
@@ -8,6 +8,15 @@ a time, each brick carrying its own documentation, spec, plan, build and gates.
|
|
|
8
8
|
This runs at the end of **stage 2**, on the approved design, before any spec is
|
|
9
9
|
written. It is skipped — explicitly, in writing — when the work is a single module.
|
|
10
10
|
|
|
11
|
+
## Contents
|
|
12
|
+
|
|
13
|
+
- When it applies
|
|
14
|
+
- How to cut
|
|
15
|
+
- The module map — the artifact
|
|
16
|
+
- GATE (part of stage 2, manual)
|
|
17
|
+
- The program loop — one brick at a time
|
|
18
|
+
- Program done
|
|
19
|
+
|
|
11
20
|
## When it applies
|
|
12
21
|
|
|
13
22
|
Decompose when any of these is true:
|
|
@@ -16,6 +16,20 @@ being written twice; write it once, here.
|
|
|
16
16
|
|
|
17
17
|
---
|
|
18
18
|
|
|
19
|
+
## Contents
|
|
20
|
+
|
|
21
|
+
- The inventory — four questions, answered before the first line of work
|
|
22
|
+
- Registers and ids
|
|
23
|
+
- Single source of truth
|
|
24
|
+
- The Doc Loop
|
|
25
|
+
- Changing your mind
|
|
26
|
+
- The propagation matrix
|
|
27
|
+
- Navigation
|
|
28
|
+
- Intent and as-built
|
|
29
|
+
- Registers are shared state
|
|
30
|
+
- Where this binds in the pipeline
|
|
31
|
+
- Rationalizations
|
|
32
|
+
|
|
19
33
|
## The inventory — four questions, answered before the first line of work
|
|
20
34
|
|
|
21
35
|
Stage 0 answers these before the interview, and writes the answers to
|
|
@@ -31,8 +45,12 @@ A project with no answers gets them seeded. The seeding is itself recorded as th
|
|
|
31
45
|
first entry in the register, which is the cheapest possible demonstration that the
|
|
32
46
|
register works.
|
|
33
47
|
|
|
34
|
-
**
|
|
35
|
-
|
|
48
|
+
**There is no "we don't document" answer.** The four questions have answers in every
|
|
49
|
+
repository — the smallest one still decides *somewhere* that a thing is true — and
|
|
50
|
+
the only choice is whether that answer is written down or re-derived by each new
|
|
51
|
+
reader. What scales down is **volume**, never the rules: a register with three
|
|
52
|
+
entries is a register, and the seeded gate is green on exactly those three
|
|
53
|
+
([`gates.md`](gates.md) → *progressive arming*).
|
|
36
54
|
|
|
37
55
|
---
|
|
38
56
|
|
|
@@ -19,6 +19,20 @@ elsewhere and is not restated here:
|
|
|
19
19
|
|
|
20
20
|
---
|
|
21
21
|
|
|
22
|
+
## Contents
|
|
23
|
+
|
|
24
|
+
- Axis A — the stage gate type
|
|
25
|
+
- Axis B — the enforcement mechanism
|
|
26
|
+
- Before you run a check
|
|
27
|
+
- Anatomy of a project gate
|
|
28
|
+
- Writing the check itself
|
|
29
|
+
- Probing — plant, run, restore
|
|
30
|
+
- The false-positive budget
|
|
31
|
+
- Ratchets
|
|
32
|
+
- Where a gate runs
|
|
33
|
+
- Adding a check to an existing gate
|
|
34
|
+
- Rationalizations
|
|
35
|
+
|
|
22
36
|
## Axis A — the stage gate type
|
|
23
37
|
|
|
24
38
|
From [`../pipeline.schema.json`](../pipeline.schema.json), one per stage:
|
|
@@ -12,6 +12,16 @@ coming back to the operator.
|
|
|
12
12
|
> half — glossary challenges, `CONTEXT.md`, ADR discipline — comes from there; the
|
|
13
13
|
> autonomy sweep and the brief are this pipeline's.
|
|
14
14
|
|
|
15
|
+
## Contents
|
|
16
|
+
|
|
17
|
+
- Phase 1 — harvest before you ask
|
|
18
|
+
- Phase 2 — the loop
|
|
19
|
+
- Domain awareness
|
|
20
|
+
- The autonomy sweep
|
|
21
|
+
- The design destination — one file, decided here, never invented later
|
|
22
|
+
- The REQ spine — the grill's other hard output
|
|
23
|
+
- Output
|
|
24
|
+
|
|
15
25
|
## Phase 1 — harvest before you ask
|
|
16
26
|
|
|
17
27
|
**Do not open the interview cold.** Stage 0 begins by finding what the project
|
|
@@ -131,6 +141,7 @@ explicit "stop and ask me here":
|
|
|
131
141
|
|---|---|
|
|
132
142
|
| run-wide | the model decision ([`model-tiering.md`](model-tiering.md)); what to decide autonomously vs escalate |
|
|
133
143
|
| 0 Harvest | doc sources beyond this repo — other repos, hosted doc systems, the knowledge wiki, **the code graph** ([`knowledge-graph.md`](knowledge-graph.md): built / installed-not-built / absent) — and whether stage 9 may write to them (another repo is outward: propose + PR, never a direct push) |
|
|
144
|
+
| 0 Docs regime | where settled things live (the decision home — **one** per project, and an existing `docs/adr/` **is** it), who may write it, whether a lease mechanism is present or the run is `ungated`, the gate command and its ratchet floors, and whether this run may raise a floor ([`documentation.md`](documentation.md)) |
|
|
134
145
|
| 1 Docs | external libs/APIs/SDKs in play; any private ones context7 can't resolve → where their docs live |
|
|
135
146
|
| 2 Decompose | is this a platform (several capabilities/surfaces) or one module? if platform: deploy cadence — per module or once at the end |
|
|
136
147
|
| 2–3 Spec | UI verdict (arms super-ux); any scenario-tracing waiver |
|