task-pipeline-skill 1.4.4 → 1.6.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 +109 -6
- package/README.md +120 -4
- package/cursor/rules/task-pipeline.mdc +62 -7
- package/package.json +1 -1
- package/plugins/task-pipeline/.claude-plugin/plugin.json +1 -2
- package/plugins/task-pipeline/commands/task-pipeline.md +12 -6
- package/plugins/task-pipeline/skills/task-pipeline/SKILL.md +38 -6
- package/plugins/task-pipeline/skills/task-pipeline/pipeline.example.json +15 -10
- package/plugins/task-pipeline/skills/task-pipeline/references/acceptance.md +31 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/artifacts.md +10 -3
- package/plugins/task-pipeline/skills/task-pipeline/references/audit.md +8 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/companion-skills.md +15 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/conventions.md +6 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/grill.md +3 -3
- package/plugins/task-pipeline/skills/task-pipeline/references/knowledge-graph.md +159 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/knowledge-sources.md +67 -10
- package/plugins/task-pipeline/skills/task-pipeline/references/learned.md +8 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/retrospective.md +117 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/stages.md +42 -7
- package/plugins/task-pipeline/skills/task-pipeline/templates/README.md +11 -5
- package/plugins/task-pipeline/skills/task-pipeline/templates/brief.md +14 -6
- package/plugins/task-pipeline/skills/task-pipeline/templates/retro.md +51 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,11 +1,114 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## v1.
|
|
4
|
-
|
|
5
|
-
###
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
## v1.6.0 — 2026-08-01
|
|
4
|
+
|
|
5
|
+
### `references/retrospective.md` — the run teaches the next run, and the list stays short
|
|
6
|
+
|
|
7
|
+
Every gate in this flow is good at *this* run and blind across runs. So a class of
|
|
8
|
+
failure gets caught, fixed and forgotten five times, and nothing in the pipeline
|
|
9
|
+
notices it is the same one. The ladder walk finds what was never written **inside** a
|
|
10
|
+
run; nothing was looking across them.
|
|
11
|
+
|
|
12
|
+
Stage 10 now ends with a **retrospective** written to `docs/superpowers/retro.md` —
|
|
13
|
+
**one file per project, not per run**, seeded from the new `templates/retro.md`.
|
|
14
|
+
Every run prunes and stamps; only a run that *diverged* writes an entry, and the
|
|
15
|
+
entry names the stage that **owned** the failure rather than the stage that tripped
|
|
16
|
+
over it — recording it against the latter is how the same defect comes back.
|
|
17
|
+
|
|
18
|
+
**Fixes have three grades, and the highest one that works is the one you take:** a
|
|
19
|
+
mechanical check (a test, a lint rule, a gate criterion — the check *is* the memory,
|
|
20
|
+
so nothing has to be remembered or pruned later), a **standing instruction** for
|
|
21
|
+
what no check can decide, or a note that expires in two runs.
|
|
22
|
+
|
|
23
|
+
**The part that makes it survive: the prune is mandatory and runs before anything is
|
|
24
|
+
added.** Every standing instruction is checked against three retirement triggers —
|
|
25
|
+
it became a check · every path or command it names is gone · it has not fired in the
|
|
26
|
+
last five run stamps — and the list is held to a **hard cap of ten**. At eleven, the
|
|
27
|
+
oldest never-fired rule goes. "But they all matter" is precisely the state in which
|
|
28
|
+
the list stopped being read, and the ninth stale rule is what discredits the two that
|
|
29
|
+
are load-bearing.
|
|
30
|
+
|
|
31
|
+
Nothing leaves silently: **every retirement writes one line in the log**, so the
|
|
32
|
+
incident survives and only the instruction goes. The counts print beside the gate
|
|
33
|
+
verdict like the carry-over ledger's, so a list that quietly grew back is visible
|
|
34
|
+
where it happened.
|
|
35
|
+
|
|
36
|
+
Stage 0 reads the standing instructions **in full** (they are capped, so it is
|
|
37
|
+
cheap) and stamps each one as it fires — which is the only evidence behind the
|
|
38
|
+
cold-retirement rule. Without that stamp the prune is a mood.
|
|
39
|
+
|
|
40
|
+
Three new guards, each with its negative self-test: the retro must reach the
|
|
41
|
+
surfaces that *enforce* stage 10 — not just `SKILL.md`; the template must ship; and
|
|
42
|
+
its standing-instruction table must carry a **Retire when** column and the run
|
|
43
|
+
stamps. A retirement trigger written at birth is what makes the prune mechanical
|
|
44
|
+
instead of an argument every time.
|
|
45
|
+
|
|
46
|
+
### Also in this release — what an audit of the two features found
|
|
47
|
+
|
|
48
|
+
Both features were then walked against the tools they name, which is the only way
|
|
49
|
+
this class of defect surfaces:
|
|
50
|
+
|
|
51
|
+
- **The refresh command was wrong, in thirteen files.** `graphify . --update` was
|
|
52
|
+
documented as a shell command. Run, it does not do what the text claims: the CLI's
|
|
53
|
+
incremental form is `graphify update <path>` and it re-extracts **code only**,
|
|
54
|
+
while `/graphify . --update` is the *agent* form that also re-reads the documents.
|
|
55
|
+
Stage 9 is the stage that just changed the documents, so the shortcut would have
|
|
56
|
+
produced the most expensive kind of stale graph — one that was refreshed. Both
|
|
57
|
+
forms are now documented with the distinction spelled out, and the doctrine says
|
|
58
|
+
which is the default and why.
|
|
59
|
+
- **Three stages pointed at doctrine that does not exist.** In the example config a
|
|
60
|
+
`task-pipeline:<name>` entry *is* the built-in doctrine file `references/<name>.md`
|
|
61
|
+
— and `knowledge-harvest`, `decompose` and `plan` resolved to nothing. It read as
|
|
62
|
+
covered on every review. Fixed, and now a **guard** resolves every such entry
|
|
63
|
+
(33 guards total, all provable locally).
|
|
64
|
+
- **The retro is a seeded file, and the templates README said only the brief was.**
|
|
65
|
+
The seeding rule matters most there: overwriting `retro.md` with the skeleton
|
|
66
|
+
destroys every lesson the project has bought. Stated explicitly.
|
|
67
|
+
- **The harvest source list is renumbered** (the retro's standing instructions are
|
|
68
|
+
source 7, read *in full* rather than queried) and the graph doctrine now says
|
|
69
|
+
plainly that `affected`/`path` are sharp on a code repo and near-useless on a prose
|
|
70
|
+
one — an empty traversal there is not evidence of no coupling.
|
|
71
|
+
|
|
72
|
+
## v1.5.0 — 2026-08-01
|
|
73
|
+
|
|
74
|
+
### `references/knowledge-graph.md` — the code graph as a source, and as a second opinion
|
|
75
|
+
|
|
76
|
+
A grep finds a **name**. The questions that actually stop a run are *what calls this*
|
|
77
|
+
and *what breaks if it moves* — **reach** — and reach is exactly what a document
|
|
78
|
+
records least reliably, because it records the reach its author remembered. The
|
|
79
|
+
harvest had no way to ask that question, so it asked the operator, whose answer
|
|
80
|
+
nobody could check.
|
|
81
|
+
|
|
82
|
+
So the pipeline now uses a code graph where one exists
|
|
83
|
+
([graphify](https://github.com/Graphify-Labs/graphify) — detected via
|
|
84
|
+
`graphify-out/graph.json`; recommended, never a gate, exactly like the wiki, with its
|
|
85
|
+
install line printed once in the preflight block).
|
|
86
|
+
|
|
87
|
+
**Stage 0** queries it before the interview (`graphify query` / `affected` /
|
|
88
|
+
`god-nodes`) and records it in the source ledger **with its build date** — a graph
|
|
89
|
+
goes stale like any other source, and it points while the code decides.
|
|
90
|
+
|
|
91
|
+
**Stage 9 now closes three artifacts, not two:** docs, wiki, **and the graph**
|
|
92
|
+
(`/graphify . --update`). The reason it is a peer rather than an afterthought is
|
|
93
|
+
asymmetric: the next run's harvest queries the graph *first*, so a stale graph is a
|
|
94
|
+
false premise delivered with the authority of a machine. A wrong doc gets argued
|
|
95
|
+
with; a wrong graph gets believed.
|
|
96
|
+
|
|
97
|
+
**And then the part that finds things: the graph↔docs divergence check.** Two
|
|
98
|
+
independent statements of the same system, so a disagreement is mechanical instead of
|
|
99
|
+
remembered — a hub `god-nodes` reports that no document names is an undocumented
|
|
100
|
+
seam; an edge the docs deny is either a leak in the code or a lie in the docs; a doc
|
|
101
|
+
naming a module the graph has no node for describes something that no longer exists.
|
|
102
|
+
Doc-side findings are fixed at stage 9; **absences become REQ rows at stage 10**,
|
|
103
|
+
because this is a fourth audit axis (`references/audit.md`) and the only one that
|
|
104
|
+
finds an absence without reading for it. The graph is derived, so it is never
|
|
105
|
+
hand-edited: fix the code or the doc and re-extract.
|
|
106
|
+
|
|
107
|
+
Two new guards, both with negative self-tests: a
|
|
108
|
+
shipped graph doctrine must reach the **stage-9 gate** in `pipeline.example.json`
|
|
109
|
+
*and* the stage-9 section of `references/stages.md`. That is the third time this repo
|
|
110
|
+
has shipped a rule to `SKILL.md` and not to the surface that enforces it — a gate
|
|
111
|
+
declared where it is not enforced is inert.
|
|
9
112
|
## v1.4.3 — 2026-07-30
|
|
10
113
|
|
|
11
114
|
### Fixed
|
package/README.md
CHANGED
|
@@ -67,8 +67,8 @@ Every gate is **typed**: `auto` — the orchestrator verifies it itself, pass/fa
|
|
|
67
67
|
| 6 | Tests | full suite green, new code covered | auto |
|
|
68
68
|
| 7 | Lint + deploy | lint clean + suite green before deploy | manual |
|
|
69
69
|
| 8 | Post-deploy | clean boot / honest degradation | auto |
|
|
70
|
-
| 9 | Docs + wiki | every stale source-ledger row updated; docs + wiki synced | auto |
|
|
71
|
-
| 10 | **Acceptance** | every REQ accounted for with evidence; operator signs off | manual |
|
|
70
|
+
| 9 | Docs + wiki | every stale source-ledger row updated; docs + wiki synced; the code graph refreshed and checked against the docs | auto |
|
|
71
|
+
| 10 | **Acceptance** | every REQ accounted for with evidence; operator signs off; the retro written — pruned before anything was added | manual |
|
|
72
72
|
|
|
73
73
|
## What you get
|
|
74
74
|
|
|
@@ -84,6 +84,10 @@ Every gate is **typed**: `auto` — the orchestrator verifies it itself, pass/fa
|
|
|
84
84
|
wiki entry — produced as part of the work, not promised for later.
|
|
85
85
|
- **It adapts to your repo, not the reverse.** Deploy, docs and wiki conventions
|
|
86
86
|
are read from the host project, so nothing is imposed.
|
|
87
|
+
- **It gets better at your project, without getting longer.** Each run ends with a
|
|
88
|
+
retrospective, and the next run reads it — but the standing-instruction list is
|
|
89
|
+
capped at ten and pruned *before* anything is added, so what you inherit is the
|
|
90
|
+
rules that still fire, not an archive.
|
|
87
91
|
|
|
88
92
|
## Quickstart
|
|
89
93
|
|
|
@@ -163,7 +167,8 @@ Stage 0 doesn't open with a question. It opens by finding what the project alrea
|
|
|
163
167
|
knows about this task
|
|
164
168
|
([`knowledge-sources.md`](plugins/task-pipeline/skills/task-pipeline/references/knowledge-sources.md)):
|
|
165
169
|
the code, `CLAUDE.md`, `CONTEXT.md` and the ADRs, `docs/` and `docs/ux/`, previous
|
|
166
|
-
pipeline briefs and their carry-over ledgers, **the
|
|
170
|
+
pipeline briefs and their carry-over ledgers, **the retro's standing instructions**
|
|
171
|
+
(read in full — they bind the run; see below), **the knowledge wiki if you have one**,
|
|
167
172
|
and **any other repository or hosted doc system your project names as its docs**. It's
|
|
168
173
|
retrieval scoped by the task's own nouns, not a read of everything, and it ends with a
|
|
169
174
|
**source ledger** written into the brief — one row per source, what it says, how
|
|
@@ -199,6 +204,70 @@ obsidian-wiki setup --vault /path/to/your/vault
|
|
|
199
204
|
It is a **recommendation, never a gate** — no stage blocks on a missing wiki, and
|
|
200
205
|
nothing asks twice in one run.
|
|
201
206
|
|
|
207
|
+
### The code graph — reach, and a second opinion on your docs
|
|
208
|
+
|
|
209
|
+
A grep finds a **name**. A graph finds **reach**: what actually calls this, what
|
|
210
|
+
breaks if it moves, what every change passes through. That is the question stage 0
|
|
211
|
+
needs answered before it asks you anything, and the one documents answer least
|
|
212
|
+
reliably — a document records the reach its author remembered.
|
|
213
|
+
|
|
214
|
+
So where a code graph exists, the pipeline uses it
|
|
215
|
+
([`knowledge-graph.md`](plugins/task-pipeline/skills/task-pipeline/references/knowledge-graph.md)).
|
|
216
|
+
The tool is **[graphify](https://github.com/Graphify-Labs/graphify)**; detected via
|
|
217
|
+
`graphify-out/graph.json`. Not installed → recommended once, in the preflight block,
|
|
218
|
+
with the lines — then the run continues:
|
|
219
|
+
|
|
220
|
+
```bash
|
|
221
|
+
uv tool install graphifyy # the CLI
|
|
222
|
+
graphify install # add the /graphify skill to this agent
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
then, in the project root:
|
|
226
|
+
|
|
227
|
+
```
|
|
228
|
+
/graphify .
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
**Stage 0 asks it what grep can't** — `graphify query "how does session reach the
|
|
232
|
+
API layer"`, `graphify affected "AuthModule"`, `graphify god-nodes` — and records it
|
|
233
|
+
in the source ledger **with its build date**, because a graph goes stale exactly like
|
|
234
|
+
a doc. It points; the code decides.
|
|
235
|
+
|
|
236
|
+
**Stage 9 closes three artifacts, not two.** Docs, wiki, **and the graph** — in the
|
|
237
|
+
agent, so the documents this stage just edited are re-extracted too:
|
|
238
|
+
|
|
239
|
+
```
|
|
240
|
+
/graphify . --update
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
There is a CLI shortcut, `graphify update .`, which is structural, model-free and
|
|
244
|
+
**code-only** — the wrong default at the one stage whose job was changing the docs,
|
|
245
|
+
because it produces the most expensive kind of stale graph: one that was refreshed.
|
|
246
|
+
And the reason the graph is a peer of the docs rather than an afterthought: the
|
|
247
|
+
*next* run's harvest queries it first, so a stale graph is a false premise delivered
|
|
248
|
+
with the authority of a machine. A wrong doc gets argued with. A wrong graph gets
|
|
249
|
+
believed.
|
|
250
|
+
|
|
251
|
+
**Then the divergence check — two independent statements of the same system.** This
|
|
252
|
+
is the part a doc linter cannot do, because it compares your docs against the code's
|
|
253
|
+
actual shape rather than against itself:
|
|
254
|
+
|
|
255
|
+
| Ask the graph | A disagreement means |
|
|
256
|
+
|---|---|
|
|
257
|
+
| `graphify god-nodes` | a hub **no document names** — an undocumented seam: the thing every change passes through and nothing explains |
|
|
258
|
+
| `graphify path "A" "B"` | an edge the docs **deny** — either a leak in the code or a lie in the docs, and which one is a decision, not a guess |
|
|
259
|
+
| `graphify affected "X"` | callers the docs never mention — the documented blast radius is smaller than the real one |
|
|
260
|
+
| a doc naming a module the graph has **no node for** | the doc describes something that no longer exists |
|
|
261
|
+
|
|
262
|
+
Doc-side findings are fixed at stage 9. Absences go to stage 10's ladder walk and
|
|
263
|
+
become **REQ rows with their checks** — the graph is the fourth audit axis, and the
|
|
264
|
+
only one that finds an absence without reading for it. The graph is *derived*, so it
|
|
265
|
+
is never hand-edited and `graphify-out/` is git-ignored by default: you fix the code
|
|
266
|
+
or the doc and re-extract.
|
|
267
|
+
|
|
268
|
+
Cadence: refresh every close-out, sweep periodically (stage 10, or when another axis
|
|
269
|
+
goes quiet). Like the wiki, it is a **recommendation, never a gate**.
|
|
270
|
+
|
|
202
271
|
### The REQ spine — why nothing falls out the back
|
|
203
272
|
|
|
204
273
|
Every gate before the last one asks *"is this artifact good?"* — none asks *"does
|
|
@@ -338,6 +407,50 @@ fail, you don't know it tests the right thing* — raised from one test to every
|
|
|
338
407
|
gate, linter and script in the run. **A green result from an unproven check is
|
|
339
408
|
worth nothing.**
|
|
340
409
|
|
|
410
|
+
### The retrospective — the run teaches the next run, and the list stays short
|
|
411
|
+
|
|
412
|
+
Every gate in this flow is good at *this* run and blind across runs. So the same
|
|
413
|
+
class of failure gets caught, fixed and forgotten five times, and nothing in the
|
|
414
|
+
pipeline notices it is the same one.
|
|
415
|
+
|
|
416
|
+
The last act of stage 10 is therefore a **retrospective**, written to
|
|
417
|
+
`docs/superpowers/retro.md` — **one file per project, not per run**
|
|
418
|
+
([`retrospective.md`](plugins/task-pipeline/skills/task-pipeline/references/retrospective.md)).
|
|
419
|
+
Every run **prunes and stamps**; only a run that *diverged* writes an entry:
|
|
420
|
+
symptom with evidence, the stage it surfaced at, the stage that **owned** it, the
|
|
421
|
+
root cause, the fix, and the check that catches it the first time from now on.
|
|
422
|
+
|
|
423
|
+
**Fixes come in three grades, and you take the highest one that works:**
|
|
424
|
+
|
|
425
|
+
| Grade | What it is | What it costs later |
|
|
426
|
+
|---|---|---|
|
|
427
|
+
| 1 — mechanical | a test, a lint rule, a gate criterion, a hook | nothing: the check *is* the memory |
|
|
428
|
+
| 2 — standing instruction | a rule agents read, for what no check can decide | one of ten slots, and its retirement trigger must be written at birth |
|
|
429
|
+
| 3 — a note | something still being understood | expires in two runs, then it is promoted or deleted |
|
|
430
|
+
|
|
431
|
+
**The prune is mandatory and runs before anything is added.** Every standing
|
|
432
|
+
instruction is checked against three retirement triggers — *it became a check* ·
|
|
433
|
+
*every path or command it names is gone* · *it has not fired in the last five run
|
|
434
|
+
stamps* — and the list is held to a **hard cap of ten**. At eleven, the oldest
|
|
435
|
+
never-fired rule goes; "but they all matter" is exactly the state in which the list
|
|
436
|
+
stopped being read, and the ninth stale rule is what discredits the two that are
|
|
437
|
+
load-bearing.
|
|
438
|
+
|
|
439
|
+
Nothing is deleted silently: **every retirement writes one line in the log**, so
|
|
440
|
+
the incident survives and only the instruction leaves. And the counts print beside
|
|
441
|
+
the gate verdict, like the carry-over ledger's, so a list that quietly grew back is
|
|
442
|
+
visible where it happened:
|
|
443
|
+
|
|
444
|
+
```
|
|
445
|
+
GATE 10 acceptance: PASS — 14/14 REQ verified
|
|
446
|
+
carry-over: 0 unresolved · retro: 7 standing (was 9) · retired 3 · added 1
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
Stage 0 reads those standing instructions **in full** on the next run — which is
|
|
450
|
+
the whole reason the cap exists and the prune is a gate criterion instead of a good
|
|
451
|
+
intention. A rule nobody reads to the end is worse than no rule: everyone believes
|
|
452
|
+
it is covered.
|
|
453
|
+
|
|
341
454
|
### UX track (user-facing tasks) — super-ux recommended
|
|
342
455
|
|
|
343
456
|
The moment a task touches any user-facing surface (web / mobile / CLI / TUI — a
|
|
@@ -517,13 +630,14 @@ the same Claude Code install yields a duplicate, shadowing skill.
|
|
|
517
630
|
### Prerequisites
|
|
518
631
|
|
|
519
632
|
**None for the pipeline itself** — the doctrine for every stage ships inside the
|
|
520
|
-
skill.
|
|
633
|
+
skill. Four optional companions make individual stages better:
|
|
521
634
|
|
|
522
635
|
| Companion | For | Required? |
|
|
523
636
|
|---|---|---|
|
|
524
637
|
| [super-ux](https://github.com/ssheleg/super-ux) | the stage-3 UX track | only for user-facing tasks |
|
|
525
638
|
| context7 (MCP) | stage-1 docs study | recommended — web-search fallback |
|
|
526
639
|
| [obsidian-wiki](https://github.com/ar9av/obsidian-wiki) | stage-0 harvest + stage-9 sync | recommended — never a gate |
|
|
640
|
+
| [graphify](https://github.com/Graphify-Labs/graphify) | stage-0 reach queries + stage-9 refresh + the graph↔docs divergence check | recommended — never a gate |
|
|
527
641
|
|
|
528
642
|
A single preflight block prints which are ready, which to install, and the model
|
|
529
643
|
recommendation, so you arm the whole run in one exchange. Detail:
|
|
@@ -539,6 +653,8 @@ recommendation, so you arm the whole run in one exchange. Detail:
|
|
|
539
653
|
| [`references/stages.md`](plugins/task-pipeline/skills/task-pipeline/references/stages.md) | per-stage detail and the exact gate criteria |
|
|
540
654
|
| [`references/artifacts.md`](plugins/task-pipeline/skills/task-pipeline/references/artifacts.md) | the canonical document layout each stage writes to |
|
|
541
655
|
| [`references/conventions.md`](plugins/task-pipeline/skills/task-pipeline/references/conventions.md) | how stages 6–10 read the host project's `CLAUDE.md` |
|
|
656
|
+
| [`references/knowledge-graph.md`](plugins/task-pipeline/skills/task-pipeline/references/knowledge-graph.md) | the code graph: install line, stage-0 reach queries, the stage-9 refresh, the graph↔docs divergence check |
|
|
657
|
+
| [`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 |
|
|
542
658
|
| [`references/model-tiering.md`](plugins/task-pipeline/skills/task-pipeline/references/model-tiering.md) | model policy, the `/model` reminder, overrides |
|
|
543
659
|
| [`templates/`](plugins/task-pipeline/skills/task-pipeline/templates/README.md) | brief, carry-over ledger, `CONTEXT.md` and ADR skeletons |
|
|
544
660
|
| [`CHANGELOG.md`](CHANGELOG.md) | every release, with the reasoning behind it |
|
|
@@ -31,7 +31,11 @@ task was already clear" exemption, no starting stage 1 while the user thinks. A
|
|
|
31
31
|
one-line task ("build feature X") is not enough to finish autonomously.
|
|
32
32
|
|
|
33
33
|
**Phase 1 — harvest the sources BEFORE the first question.** Find what the project
|
|
34
|
-
already knows about this task and read it: the code;
|
|
34
|
+
already knows about this task and read it: the code; **the code graph if one is
|
|
35
|
+
built** — [graphify](https://github.com/Graphify-Labs/graphify), detect
|
|
36
|
+
`graphify-out/graph.json`, and ask it what grep cannot (`graphify query "<the task,
|
|
37
|
+
as a question>"`, `graphify affected "<what is changing>"`, `graphify god-nodes`);
|
|
38
|
+
`CLAUDE.md` / `AGENTS.md`;
|
|
35
39
|
`CONTEXT.md` (or `CONTEXT-MAP.md`) and `docs/adr/`; `docs/` and `docs/ux/`; past
|
|
36
40
|
briefs/plans and their carry-over ledgers; **the knowledge wiki if one is
|
|
37
41
|
installed** — [obsidian-wiki](https://github.com/ar9av/obsidian-wiki), detect
|
|
@@ -40,10 +44,18 @@ or hosted doc system the project names as its docs** (read-only, and never a sou
|
|
|
40
44
|
you invented — it counts because the project names it). Query each by *this task's*
|
|
41
45
|
nouns; it is retrieval, not a full read; stop when the terms return nothing new.
|
|
42
46
|
Write a short **source ledger** into the brief — source, what it says about this
|
|
43
|
-
task, how fresh, and whether this run makes it stale. `none found` is a valid row
|
|
47
|
+
task, how fresh, and whether this run makes it stale. `none found` is a valid row;
|
|
48
|
+
the graph's row carries its build date, because a graph goes stale like any other
|
|
49
|
+
source, and it **points while the code decides** — never the tiebreaker.
|
|
50
|
+
**Read `docs/superpowers/retro.md` in full if it exists** — its *standing
|
|
51
|
+
instructions* are what previous runs of this pipeline got wrong in this project, and
|
|
52
|
+
they bind this run (they are capped at ten, so reading them all is cheap). Stamp
|
|
53
|
+
each one the moment it fires: that date is the only evidence behind the
|
|
54
|
+
cold-retirement rule at stage 10.
|
|
44
55
|
If no wiki is installed, recommend it once and continue:
|
|
45
|
-
`pip install obsidian-wiki` → `obsidian-wiki setup --vault <path>`.
|
|
46
|
-
|
|
56
|
+
`pip install obsidian-wiki` → `obsidian-wiki setup --vault <path>`. If no graph is
|
|
57
|
+
built, recommend it once and continue: `uv tool install graphifyy` →
|
|
58
|
+
`graphify install` → `/graphify .`. Neither is ever a gate.
|
|
47
59
|
|
|
48
60
|
**Phase 2 — grill the user against that harvest**, then run the rest without
|
|
49
61
|
mid-flight questions:
|
|
@@ -172,7 +184,18 @@ not authorize an outward, irreversible action — stage 7 stops and asks.
|
|
|
172
184
|
source the harvest read gets updated if this run changed or disproved it. Module
|
|
173
185
|
docs and runbooks in the SAME change; the knowledge wiki via `wiki-update` when
|
|
174
186
|
[obsidian-wiki](https://github.com/ar9av/obsidian-wiki) is installed (absent →
|
|
175
|
-
recommend once, never block)
|
|
187
|
+
recommend once, never block); **and the code graph via `/graphify . --update`**
|
|
188
|
+
when `graphify-out/` exists (absent → recommend once, never block). The close-out
|
|
189
|
+
has **three** artifacts, not two — the graph is what the *next* run's harvest
|
|
190
|
+
queries first, so a stale one is a false premise carrying the authority of a
|
|
191
|
+
machine: a wrong doc gets argued with, a wrong graph gets believed.
|
|
192
|
+
**Then check the graph against the docs:** a hub `graphify god-nodes` reports
|
|
193
|
+
that no document names is an undocumented seam; an edge the docs deny is either a
|
|
194
|
+
leak in the code or a lie in the docs; a doc naming a module the graph has no
|
|
195
|
+
node for describes something that no longer exists. Fix the doc-side findings
|
|
196
|
+
here; hand absences to stage 10's ladder walk as REQ rows. Never "fix" the graph
|
|
197
|
+
by hand — it is derived: fix the code or the doc and re-extract.
|
|
198
|
+
Docs in **another repository** are outward:
|
|
176
199
|
propose the edit and get an explicit go, or carry it over with the exact change
|
|
177
200
|
written down. A doc that was worth reading at stage 0 and is wrong now is the
|
|
178
201
|
next run's false premise.
|
|
@@ -223,8 +246,37 @@ not authorize an outward, irreversible action — stage 7 stops and asks.
|
|
|
223
246
|
`git -C <repo> status --porcelain`, `git -C <repo> log @{u}..HEAD --oneline`.
|
|
224
247
|
The fix is two commands and the second is the one that gets forgotten:
|
|
225
248
|
`git -C <submodule> push`, then `git add <submodule> && git commit`.
|
|
249
|
+
**The last act is the retrospective** — `docs/superpowers/retro.md`, **one file
|
|
250
|
+
per project, not per run**. Every gate above is good at *this* run and blind
|
|
251
|
+
across runs: the same class of failure gets caught, fixed and forgotten five
|
|
252
|
+
times and nothing notices it is the same one. So, in this order —
|
|
253
|
+
**1. Prune before you add.** Check every standing instruction against three
|
|
254
|
+
retirement triggers: it became a check (a test, a lint rule, a gate, a hook →
|
|
255
|
+
delete it; the check is the memory, and keeping both means it is read twice and
|
|
256
|
+
obeyed once); every path, command or stage it names is gone (→ delete, it
|
|
257
|
+
describes a system nobody runs); it has not fired in the last **five run
|
|
258
|
+
stamps** (→ delete, that is the evidence it was situational). Then the cap:
|
|
259
|
+
**ten standing instructions, hard** — at eleven the oldest never-fired row goes,
|
|
260
|
+
because "they all matter" is exactly the state in which the list stopped being
|
|
261
|
+
read. **Every deletion writes one line in the log; silent deletion is
|
|
262
|
+
forbidden** — the record stays, the instruction leaves.
|
|
263
|
+
**2. Stamp the run** — date, topic, verdict, counts. That stamp is what makes
|
|
264
|
+
"five runs" countable.
|
|
265
|
+
**3. Write an entry, only if the run diverged** — symptom with evidence, the
|
|
266
|
+
stage it *surfaced at*, the stage that **owned** it (usually earlier — a finding
|
|
267
|
+
recorded against the stage that tripped over it comes back), the root cause
|
|
268
|
+
("the agent was careless" is not a cause, it is the absence of one), the fix by
|
|
269
|
+
grade — **mechanical check > standing instruction (with its retire-when written
|
|
270
|
+
at birth) > a note that expires in two runs** — and the check that catches it
|
|
271
|
+
the first time from now on. A lesson true in any repository belongs upstream in
|
|
272
|
+
the skill's own doctrine, not in one project's file.
|
|
273
|
+
A retro left empty after a messy run is the failure it exists to stop. Phase 1
|
|
274
|
+
of the next run reads those standing instructions **in full**, which is why the
|
|
275
|
+
cap is not negotiable and the prune is a gate item, not a good intention.
|
|
226
276
|
Gate: ladder walk ran, no REQ `unknown`, no ledger row without
|
|
227
|
-
a home, every repository clean/pushed/pointed-at, user signs off
|
|
277
|
+
a home, every repository clean/pushed/pointed-at, user signs off, **and the
|
|
278
|
+
retro is written — pruned before anything was added, at or under its cap, every
|
|
279
|
+
deletion logged, the run stamped, and the counts printed beside this verdict**.
|
|
228
280
|
|
|
229
281
|
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
|
|
230
282
|
tasks, conventional commits, honest degradation (never claim a failed/skipped step
|
|
@@ -262,7 +314,10 @@ its own previous pass while the finding count still looked healthy. So:
|
|
|
262
314
|
**rotate the axis, don't look harder.** The axes are orthogonal by construction —
|
|
263
315
|
seams down one deliverable (the ladder above), then invariants *across*
|
|
264
316
|
deliverables (one name, one enum, one owner everywhere), then one class swept end
|
|
265
|
-
to end (every error path, every count, every status vocabulary)
|
|
317
|
+
to end (every error path, every count, every status vocabulary), then — where a
|
|
318
|
+
code graph exists — **the graph against the docs**, the only axis that finds an
|
|
319
|
+
absence without reading for it (a hub no document names, an edge the docs deny, a
|
|
320
|
+
doc naming a module the graph no longer has).
|
|
266
321
|
- **Audit bottom-up.** A missing artefact at a low rung makes everything above it
|
|
267
322
|
meaningless; top-down you polish a surface for a contract that doesn't exist.
|
|
268
323
|
- **A class that repeats twice becomes a check, not a note.** Once is an incident;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "task-pipeline-skill",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.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"
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "task-pipeline",
|
|
3
|
-
"displayName": "Task Pipeline",
|
|
4
3
|
"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.
|
|
4
|
+
"version": "1.6.0",
|
|
6
5
|
"author": {
|
|
7
6
|
"name": "ssheleg"
|
|
8
7
|
},
|
|
@@ -5,11 +5,17 @@ argument-hint: "<one-line task description>"
|
|
|
5
5
|
Use the `task-pipeline` skill to run the task below through all gated stages —
|
|
6
6
|
**stage 0 intake grill** → docs study → brainstorm → spec → plan → subagent
|
|
7
7
|
build → tests → lint/deploy → post-deploy → docs/wiki → **acceptance**. **Every stage's doctrine is
|
|
8
|
-
built into the skill** (`references/{knowledge-sources,grill,brainstorm,decomposition,spec,planning,build,review,tdd,acceptance,loop-guard}.md`)
|
|
8
|
+
built into the skill** (`references/{knowledge-sources,knowledge-graph,grill,brainstorm,decomposition,spec,planning,build,review,tdd,acceptance,retrospective,loop-guard}.md`)
|
|
9
9
|
— no companion plugin is required for any of them. **Stage 0 opens with the
|
|
10
10
|
knowledge harvest, before the first question** (`references/knowledge-sources.md`):
|
|
11
|
-
pull what the project already knows about this task from the code,
|
|
12
|
-
|
|
11
|
+
pull what the project already knows about this task from the code, **the code graph**
|
|
12
|
+
if one is built ([graphify](https://github.com/Graphify-Labs/graphify) —
|
|
13
|
+
`references/knowledge-graph.md`; recommended, never required; detect
|
|
14
|
+
`graphify-out/graph.json`; it answers *reach* — what calls this, what breaks if it
|
|
15
|
+
moves — which grep cannot), `CLAUDE.md`,
|
|
16
|
+
`CONTEXT.md`/ADRs, `docs/` + `docs/ux/`, past pipeline briefs, **the retro's standing
|
|
17
|
+
instructions** (`docs/superpowers/retro.md` — read in full, they bind this run;
|
|
18
|
+
`references/retrospective.md`), the **knowledge wiki**
|
|
13
19
|
if one is installed ([obsidian-wiki](https://github.com/ar9av/obsidian-wiki) —
|
|
14
20
|
recommended, never required; detect `~/.obsidian-wiki/config`) and any **other repo
|
|
15
21
|
or hosted doc system the project names as its docs**, then write the **source
|
|
@@ -22,10 +28,10 @@ only out loud, and a doc the run proves stale is logged for the stage-9 update
|
|
|
22
28
|
applying the
|
|
23
29
|
grill's **domain awareness** (challenge terms against `CONTEXT.md`, sharpen fuzzy
|
|
24
30
|
language, ADRs for hard-to-reverse calls) and covering the **autonomy sweep** (what
|
|
25
|
-
would otherwise stop stages 1→10: docs sources incl. doc repos and the
|
|
26
|
-
policy, test and lint commands, deploy target and authorization, log locations, docs/wiki targets, and for UI tasks whether the design is done visually in Figma or text-only, whether the Figma MCP is connected, and — if it isn't — whether to ship text-only or stop and connect it, since the UX chain degrades on its own and never blocks; **and with Figma on, the design destination: which team/org by name and which file** — the recorded one, a URL the operator gives, or creation in that named team explicitly authorized, written into the project's canonical record before the first frame, because a destination decided at drawing time is how a project ends up with three design files and no way to tell which is real. **Never create while a recorded file resolves; if it doesn't resolve, stop and ask — never create a replacement**) —
|
|
31
|
+
would otherwise stop stages 1→10: docs sources incl. doc repos, the wiki and the code graph, branch/tracker
|
|
32
|
+
policy, test and lint commands, deploy target and authorization, log locations, docs/wiki/graph targets, and for UI tasks whether the design is done visually in Figma or text-only, whether the Figma MCP is connected, and — if it isn't — whether to ship text-only or stop and connect it, since the UX chain degrades on its own and never blocks; **and with Figma on, the design destination: which team/org by name and which file** — the recorded one, a URL the operator gives, or creation in that named team explicitly authorized, written into the project's canonical record before the first frame, because a destination decided at drawing time is how a project ends up with three design files and no way to tell which is real. **Never create while a recorded file resolves; if it doesn't resolve, stop and ask — never create a replacement**) —
|
|
27
33
|
until the brief is locked — including the **REQ table**, the request as an addressable list where every row names how it is verified — so the rest runs autonomously and the final stage can account for all of it. The list is frozen: adding is free, removing needs the operator's agreement. Anything deferred goes into the carry-over ledger the moment it's said. For any user-facing task, recommend/use
|
|
28
|
-
**super-ux**. **If the brief describes a platform rather than a change**, stage 2 also cuts it into modules (`references/decomposition.md`) — module map committed, walking skeleton first, every REQ in exactly one module — and stages 3→10 then run per module, one brick at a time. **If any loop starts undoing an earlier pass** (same file edited twice for the same reason, a closed finding returning, a third entry into one stage), stop and run the loop guard (`references/loop-guard.md`): name both shapes, escalate to the layer that owns the conflict, re-plan the check as an ordered list, then go item by item. **The closing stage opens with the ladder walk** (`references/audit.md`): the REQ table finds what was named and lost, but a comparison needs two sides and an absence has one — so walk each REQ bottom-up through its rungs (decision → spec section → contract *and its failure behavior* → task → change → executed test → surface/docs), check the seam at each step, order findings by seam rather than by file, and turn every absence into a new REQ row **before** the coverage table is written. A green from a check nobody has watched fail against a planted defect is not evidence; a finding class seen twice becomes a script rather than a third ledger row; and the carry-over ledger's counts are printed beside every gate verdict, so "green" never reads as "verified". If a searching pass starts finding mostly what the previous pass's own fixes broke, the axis is exhausted — rotate it, don't look harder. **In a project of several repositories, stage 10 closes on the parent too:** a parent records each submodule as a pointer to one commit, and moving the submodule does not move the pointer — so the work can be committed, pushed and green while a clone of the parent still gets the commit before it. Neither repo looks wrong alone, which is why it survives every check that runs inside one. Require `git submodule status` with no line starting `+`, and every repo clean and pushed (`git -C <repo> status --porcelain`, `git -C <repo> log @{u}..HEAD`). The fix is two commands and the second gets forgotten: push the submodule, then `git add <submodule> && git commit`. Honor every stage gate by its type (`auto` = verify yourself;
|
|
34
|
+
**super-ux**. **If the brief describes a platform rather than a change**, stage 2 also cuts it into modules (`references/decomposition.md`) — module map committed, walking skeleton first, every REQ in exactly one module — and stages 3→10 then run per module, one brick at a time. **If any loop starts undoing an earlier pass** (same file edited twice for the same reason, a closed finding returning, a third entry into one stage), stop and run the loop guard (`references/loop-guard.md`): name both shapes, escalate to the layer that owns the conflict, re-plan the check as an ordered list, then go item by item. **The closing stage opens with the ladder walk** (`references/audit.md`): the REQ table finds what was named and lost, but a comparison needs two sides and an absence has one — so walk each REQ bottom-up through its rungs (decision → spec section → contract *and its failure behavior* → task → change → executed test → surface/docs), check the seam at each step, order findings by seam rather than by file, and turn every absence into a new REQ row **before** the coverage table is written. A green from a check nobody has watched fail against a planted defect is not evidence; a finding class seen twice becomes a script rather than a third ledger row; and the carry-over ledger's counts are printed beside every gate verdict, so "green" never reads as "verified". If a searching pass starts finding mostly what the previous pass's own fixes broke, the axis is exhausted — rotate it, don't look harder. **The docs stage closes three artifacts, not two:** module docs, the wiki, **and the code graph** (`/graphify . --update` where `graphify-out/` exists — `references/knowledge-graph.md`), because the graph is what the next run's harvest queries first and a stale one is a false premise carrying the authority of a machine. Then check the graph against the docs: a hub `graphify god-nodes` reports that no document names is an undocumented seam; an edge the docs deny is a leak in the code or a lie in the docs; a doc naming a module the graph no longer has is stale. Doc-side findings are fixed there, absences become REQ rows in the closing stage. **In a project of several repositories, stage 10 closes on the parent too:** a parent records each submodule as a pointer to one commit, and moving the submodule does not move the pointer — so the work can be committed, pushed and green while a clone of the parent still gets the commit before it. Neither repo looks wrong alone, which is why it survives every check that runs inside one. Require `git submodule status` with no line starting `+`, and every repo clean and pushed (`git -C <repo> status --porcelain`, `git -C <repo> log @{u}..HEAD`). The fix is two commands and the second gets forgotten: push the submodule, then `git add <submodule> && git commit`. **The run's last act is the retrospective** (`references/retrospective.md` → `docs/superpowers/retro.md`, one file per project): **prune before you add** — every standing instruction against its three retirement triggers (it became a check; the paths/commands it names are gone; it hasn't fired in five run stamps), the list held to a hard cap of ten, every deletion logged as one line and never silent — then stamp the run, then, only if the run diverged, write the entry: symptom with evidence, the stage it surfaced at, the stage that *owned* it, the root cause, the fix by grade (mechanical check > standing instruction > note that expires in two runs), and the check that catches it next time. Stage 0 reads those standing instructions in full, so the prune is a gate criterion, not a good intention: a rule nobody reads to the end is worse than no rule, because everyone believes it is covered. Honor every stage gate by its type (`auto` = verify yourself;
|
|
29
35
|
`manual` = wait for explicit go). Confirm the **model once at preflight** —
|
|
30
36
|
recommend the most capable one the environment offers, never a hardcoded id — then
|
|
31
37
|
run the whole pipeline on it without re-asking.
|
|
@@ -43,6 +43,7 @@ and no stage that can fail because a dependency is missing:
|
|
|
43
43
|
| Stage | Built-in doctrine |
|
|
44
44
|
|---|---|
|
|
45
45
|
| 0 Knowledge harvest (pre-grill) | [`references/knowledge-sources.md`](references/knowledge-sources.md) |
|
|
46
|
+
| 0 + 9 The code graph (graphify — recommended, never required) | [`references/knowledge-graph.md`](references/knowledge-graph.md) |
|
|
46
47
|
| 0 Intake grill | [`references/grill.md`](references/grill.md) |
|
|
47
48
|
| 2 Brainstorm | [`references/brainstorm.md`](references/brainstorm.md) |
|
|
48
49
|
| 2 Decompose (platforms only) | [`references/decomposition.md`](references/decomposition.md) |
|
|
@@ -51,6 +52,7 @@ and no stage that can fail because a dependency is missing:
|
|
|
51
52
|
| 5 Build (worktree, subagents, fix loop) | [`references/build.md`](references/build.md) + [`references/review.md`](references/review.md) |
|
|
52
53
|
| 5–6 TDD + suite gate | [`references/tdd.md`](references/tdd.md) |
|
|
53
54
|
| 10 Acceptance (REQ close-out) | [`references/acceptance.md`](references/acceptance.md) |
|
|
55
|
+
| 10 Retrospective (the run's last act) | [`references/retrospective.md`](references/retrospective.md) |
|
|
54
56
|
| 10 + any audit (what's *missing*) | [`references/audit.md`](references/audit.md) |
|
|
55
57
|
| any repeating loop | [`references/loop-guard.md`](references/loop-guard.md) |
|
|
56
58
|
|
|
@@ -95,9 +97,14 @@ for every one** — which is what turns the pipeline from a funnel into a circle
|
|
|
95
97
|
|
|
96
98
|
**Harvest before you ask.** Stage 0 opens with a **knowledge harvest**
|
|
97
99
|
([`references/knowledge-sources.md`](references/knowledge-sources.md)), not a
|
|
98
|
-
question: pull what the project already knows about this task from the code,
|
|
99
|
-
|
|
100
|
-
|
|
100
|
+
question: pull what the project already knows about this task from the code, the
|
|
101
|
+
**code graph** if one is built
|
|
102
|
+
([`references/knowledge-graph.md`](references/knowledge-graph.md) — graphify;
|
|
103
|
+
recommended, never required),
|
|
104
|
+
`CLAUDE.md`, `CONTEXT.md`/ADRs, `docs/` + `docs/ux/`, past pipeline briefs, **the
|
|
105
|
+
retro's standing instructions** — `docs/superpowers/retro.md`, read in full because
|
|
106
|
+
they *bind* this run ([`references/retrospective.md`](references/retrospective.md)) —
|
|
107
|
+
the **knowledge wiki** if one is installed
|
|
101
108
|
([obsidian-wiki](https://github.com/ar9av/obsidian-wiki) — recommended, never
|
|
102
109
|
required) and any **other repo or hosted doc system the project names as its
|
|
103
110
|
docs**. Write the source ledger into the brief, then interview *against* it: every
|
|
@@ -105,6 +112,29 @@ answer that touches a source is checked against that source, and the operator
|
|
|
105
112
|
outranks any document — but only out loud, so an override is a recorded decision
|
|
106
113
|
instead of an undetected divergence. The same ledger is stage 9's work list.
|
|
107
114
|
|
|
115
|
+
**Three artifacts close a run, not two.** Stage 9 syncs the docs, the wiki **and the
|
|
116
|
+
code graph** (`/graphify . --update`) — the graph is what the *next* run's harvest
|
|
117
|
+
queries first, so a stale one is a false premise carrying the authority of a
|
|
118
|
+
machine. Refreshing it also buys the **graph↔docs divergence check**: a hub no
|
|
119
|
+
document names, an edge the docs deny, a doc naming a module the graph no longer
|
|
120
|
+
has. Doc-side findings are fixed at stage 9; absences become REQ rows at stage 10
|
|
121
|
+
([`references/knowledge-graph.md`](references/knowledge-graph.md),
|
|
122
|
+
[`references/audit.md`](references/audit.md)).
|
|
123
|
+
|
|
124
|
+
**The run teaches the next run — and the list stays short.** Every gate is good at
|
|
125
|
+
*this* run and blind across runs, so the same class of failure can be caught, fixed
|
|
126
|
+
and forgotten five times with nothing noticing it is the same one. The last act of
|
|
127
|
+
stage 10 is therefore the **retrospective**
|
|
128
|
+
([`references/retrospective.md`](references/retrospective.md), written to
|
|
129
|
+
`docs/superpowers/retro.md`): **prune first** — every standing instruction checked
|
|
130
|
+
against its retirement triggers (it became a check · its surface is gone · it hasn't
|
|
131
|
+
fired in five runs), the list held to a hard cap of **ten**, every deletion logged —
|
|
132
|
+
then stamp the run, then write an entry **only if the run diverged** (symptom, the
|
|
133
|
+
stage that *owned* it, root cause, fix, and the check that catches it next time).
|
|
134
|
+
Stage 0 reads those standing instructions in full, which is exactly why the prune is
|
|
135
|
+
a gate criterion and not a good intention: a rule nobody reads to the end is worse
|
|
136
|
+
than no rule, because everyone believes it is covered.
|
|
137
|
+
|
|
108
138
|
Three things the grill does beyond clarifying the request:
|
|
109
139
|
- **Domain awareness.** It reads the project's own `CONTEXT.md` / `docs/adr/` and
|
|
110
140
|
holds the operator to them — challenging terms that conflict with the glossary,
|
|
@@ -123,7 +153,7 @@ Three things the grill does beyond clarifying the request:
|
|
|
123
153
|
with stage 0** (survives context loss; lets you resume). Then run the
|
|
124
154
|
**companion preflight** (`references/companion-skills.md`): the stage doctrine
|
|
125
155
|
is built in, so this only checks the *optional* companions (super-ux for UI
|
|
126
|
-
tasks, context7, wiki-update) and emits ONE block covering them
|
|
156
|
+
tasks, context7, wiki-update, graphify) and emits ONE block covering them
|
|
127
157
|
**and the model decision** (`references/model-tiering.md`): recommend
|
|
128
158
|
the most capable model available, let the operator confirm or override, record
|
|
129
159
|
it. Ask once, here.
|
|
@@ -194,8 +224,8 @@ capable available — see `references/model-tiering.md`).
|
|
|
194
224
|
| 6 | Tests | host test runner + built-in [`references/tdd.md`](references/tdd.md) + [`references/learned.md`](references/learned.md) | full suite green; new/changed code covered; **every new check probed both ways and asserted on its exit code**, and the suite run once against a cold environment | auto |
|
|
195
225
|
| 7 | Lint + deploy | host lint → deploy per host convention | lint clean + suite green before deploy; deploy needs a go (or the brief's specific standing authorization) | manual |
|
|
196
226
|
| 8 | Post-deploy | tail deploy logs / health-check | clean boot or honest degradation report | auto |
|
|
197
|
-
| 9 | Docs + wiki | host module docs/runbook rules → `wiki-update` ([obsidian-wiki](https://github.com/ar9av/obsidian-wiki), recommended) | every stale row of the stage-0 source ledger updated; docs synced; wiki synced; **every number computed rather than restated, every named command or file resolvable** ([`references/learned.md`](references/learned.md)) | auto |
|
|
198
|
-
| 10 | **Acceptance** | built in: [`references/audit.md`](references/audit.md) (ladder walk) → [`references/acceptance.md`](references/acceptance.md) (coverage table) | ladder walk ran, its absences became REQ rows; every REQ accounted for with evidence from a check seen failing once; ledger has no unresolved row; **axis rotation recorded** (new findings vs self-inflicted, rule 1 of [`references/learned.md`](references/learned.md)), **every closure verified against the artefact rather than the document describing it**, **each correction swept across its class**, **every deferral a printed ratchet rather than a TODO**; **in a multi-repository project, every repository is clean, pushed and pointed at** (below); operator signs off | manual |
|
|
227
|
+
| 9 | Docs + wiki | host module docs/runbook rules → `wiki-update` ([obsidian-wiki](https://github.com/ar9av/obsidian-wiki), recommended) → `/graphify . --update` ([`references/knowledge-graph.md`](references/knowledge-graph.md), recommended) | every stale row of the stage-0 source ledger updated; docs synced; wiki synced; **the code graph refreshed where one exists** and checked against the docs (a hub no doc names, a doc naming a node the graph lost); **every number computed rather than restated, every named command or file resolvable** ([`references/learned.md`](references/learned.md)) | auto |
|
|
228
|
+
| 10 | **Acceptance** | built in: [`references/audit.md`](references/audit.md) (ladder walk) → [`references/acceptance.md`](references/acceptance.md) (coverage table) → [`references/retrospective.md`](references/retrospective.md) (retro: prune, stamp, entry) | ladder walk ran, its absences became REQ rows; every REQ accounted for with evidence from a check seen failing once; ledger has no unresolved row; **axis rotation recorded** (new findings vs self-inflicted, rule 1 of [`references/learned.md`](references/learned.md)), **every closure verified against the artefact rather than the document describing it**, **each correction swept across its class**, **every deferral a printed ratchet rather than a TODO**; **in a multi-repository project, every repository is clean, pushed and pointed at** (below); operator signs off; **the retrospective written last — prune before entry, list at or under its cap, deletions logged, run stamped, counts printed** | manual |
|
|
199
229
|
|
|
200
230
|
|
|
201
231
|
### Stage 10 in a project of several repositories
|
|
@@ -256,8 +286,10 @@ automation is on — `pipeline.schema.json` is the only contract.
|
|
|
256
286
|
- `pipeline.schema.json` — the universal pipeline config contract (stages + release)
|
|
257
287
|
- `pipeline.example.json` — this plugin's default flow (stage 0 + 1→10) + release, as config
|
|
258
288
|
- `references/knowledge-sources.md` — stage-0 phase 1: the source list, the wiki, the ledger, the stage-9 loop-back
|
|
289
|
+
- `references/knowledge-graph.md` — the code graph (graphify): install line, stage-0 reach queries, the stage-9 refresh, the graph↔docs divergence check
|
|
259
290
|
- `references/grill.md` — the built-in stage-0 grill: loop, domain awareness, autonomy sweep
|
|
260
291
|
- `references/acceptance.md` — the built-in stage-10 close-out: REQ coverage, evidence, sign-off
|
|
292
|
+
- `references/retrospective.md` — stage 10's last act: the project retro (`docs/superpowers/retro.md`), the three grades of fix, the mandatory prune and its cap of ten
|
|
261
293
|
- `references/audit.md` — cross-cutting: the L0→L7 ladder and its seams (what was never written), axis rotation, ratchets, proven checks
|
|
262
294
|
- `references/learned.md` — cross-cutting: fourteen rules earned by failure on a real multi-repository build, each with the incident behind it, its check and its exit criterion; plus the two that no check can decide
|
|
263
295
|
- `references/brainstorm.md` — stage 2: design dialogue, approaches, UI detection, hard gate
|