task-pipeline-skill 0.17.1 → 1.0.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 +161 -0
- package/README.md +261 -135
- package/cursor/rules/task-pipeline.mdc +40 -8
- package/package.json +7 -3
- package/plugins/task-pipeline/.claude-plugin/plugin.json +2 -2
- package/plugins/task-pipeline/commands/task-pipeline.md +15 -5
- package/plugins/task-pipeline/skills/task-pipeline/SKILL.md +32 -6
- package/plugins/task-pipeline/skills/task-pipeline/pipeline.example.json +7 -3
- package/plugins/task-pipeline/skills/task-pipeline/references/acceptance.md +3 -2
- package/plugins/task-pipeline/skills/task-pipeline/references/artifacts.md +22 -11
- package/plugins/task-pipeline/skills/task-pipeline/references/brainstorm.md +6 -4
- package/plugins/task-pipeline/skills/task-pipeline/references/build.md +2 -1
- package/plugins/task-pipeline/skills/task-pipeline/references/companion-skills.md +11 -2
- package/plugins/task-pipeline/skills/task-pipeline/references/conventions.md +17 -3
- package/plugins/task-pipeline/skills/task-pipeline/references/grill.md +37 -4
- package/plugins/task-pipeline/skills/task-pipeline/references/knowledge-sources.md +159 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/planning.md +5 -3
- package/plugins/task-pipeline/skills/task-pipeline/references/review.md +2 -1
- package/plugins/task-pipeline/skills/task-pipeline/references/stages.md +39 -9
- package/plugins/task-pipeline/skills/task-pipeline/templates/brief.md +24 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "task-pipeline",
|
|
3
|
-
"description": "
|
|
4
|
-
"version": "0.
|
|
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.",
|
|
4
|
+
"version": "1.0.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "ssheleg"
|
|
7
7
|
},
|
|
@@ -5,15 +5,25 @@ 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/{grill,brainstorm,decomposition,spec,planning,build,review,tdd,acceptance,loop-guard}.md`)
|
|
9
|
-
— no companion plugin is required for any of them.
|
|
8
|
+
built into the skill** (`references/{knowledge-sources,grill,brainstorm,decomposition,spec,planning,build,review,tdd,acceptance,loop-guard}.md`)
|
|
9
|
+
— no companion plugin is required for any of them. **Stage 0 opens with the
|
|
10
|
+
knowledge harvest, before the first question** (`references/knowledge-sources.md`):
|
|
11
|
+
pull what the project already knows about this task from the code, `CLAUDE.md`,
|
|
12
|
+
`CONTEXT.md`/ADRs, `docs/` + `docs/ux/`, past pipeline briefs, the **knowledge wiki**
|
|
13
|
+
if one is installed ([obsidian-wiki](https://github.com/ar9av/obsidian-wiki) —
|
|
14
|
+
recommended, never required; detect `~/.obsidian-wiki/config`) and any **other repo
|
|
15
|
+
or hosted doc system the project names as its docs**, then write the **source
|
|
16
|
+
ledger** into the brief. The **intake grill is
|
|
10
17
|
mandatory** (`references/grill.md`): interview the
|
|
11
18
|
operator one question at a time (with a recommended answer each, exploring the
|
|
12
|
-
codebase before asking) until every decision branch is resolved,
|
|
19
|
+
codebase before asking) until every decision branch is resolved, **validating every
|
|
20
|
+
answer against the harvested sources** — the operator outranks any document, but
|
|
21
|
+
only out loud, and a doc the run proves stale is logged for the stage-9 update —
|
|
22
|
+
applying the
|
|
13
23
|
grill's **domain awareness** (challenge terms against `CONTEXT.md`, sharpen fuzzy
|
|
14
24
|
language, ADRs for hard-to-reverse calls) and covering the **autonomy sweep** (what
|
|
15
|
-
would otherwise stop stages 1→10: docs sources
|
|
16
|
-
commands, deploy target and authorization, log locations, docs/wiki targets) —
|
|
25
|
+
would otherwise stop stages 1→10: docs sources incl. doc repos and the wiki, branch/tracker
|
|
26
|
+
policy, test and lint commands, deploy target and authorization, log locations, docs/wiki targets) —
|
|
17
27
|
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
|
|
18
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. Honor every stage gate by its type (`auto` = verify yourself;
|
|
19
29
|
`manual` = wait for explicit go). Confirm the **model once at preflight** —
|
|
@@ -27,7 +27,11 @@ tabled below) and an optional, toggleable `release` block. Any project replaces
|
|
|
27
27
|
wholesale — any number of stages, run by its own skills/agents, with its own gate
|
|
28
28
|
types (see *Bring your own skills*). Each gate has a **type**: `auto` (the
|
|
29
29
|
orchestrator verifies the `check` itself, pass/fail) or `manual` (wait for an
|
|
30
|
-
explicit operator go); which stages are manual is the operator's call.
|
|
30
|
+
explicit operator go); which stages are manual is the operator's call. In the
|
|
31
|
+
example's `skills[]`, `task-pipeline:<name>` denotes this skill's own built-in
|
|
32
|
+
doctrine (`references/<name>.md`) and `host:<name>` denotes the host project's own
|
|
33
|
+
command for that job (`references/conventions.md`); everything else is a real skill
|
|
34
|
+
the environment resolves.
|
|
31
35
|
|
|
32
36
|
## Prerequisites — none required
|
|
33
37
|
|
|
@@ -37,6 +41,7 @@ and no stage that can fail because a dependency is missing:
|
|
|
37
41
|
|
|
38
42
|
| Stage | Built-in doctrine |
|
|
39
43
|
|---|---|
|
|
44
|
+
| 0 Knowledge harvest (pre-grill) | [`references/knowledge-sources.md`](references/knowledge-sources.md) |
|
|
40
45
|
| 0 Intake grill | [`references/grill.md`](references/grill.md) |
|
|
41
46
|
| 2 Brainstorm | [`references/brainstorm.md`](references/brainstorm.md) |
|
|
42
47
|
| 2 Decompose (platforms only) | [`references/decomposition.md`](references/decomposition.md) |
|
|
@@ -86,7 +91,19 @@ requirements, each naming how it will be verified. Stages 3–5 trace to those i
|
|
|
86
91
|
stage 4's gate is a mechanical set-comparison against them, and **stage 10 accounts
|
|
87
92
|
for every one** — which is what turns the pipeline from a funnel into a circle.
|
|
88
93
|
|
|
89
|
-
|
|
94
|
+
**Harvest before you ask.** Stage 0 opens with a **knowledge harvest**
|
|
95
|
+
([`references/knowledge-sources.md`](references/knowledge-sources.md)), not a
|
|
96
|
+
question: pull what the project already knows about this task from the code,
|
|
97
|
+
`CLAUDE.md`, `CONTEXT.md`/ADRs, `docs/` + `docs/ux/`, past pipeline briefs, the
|
|
98
|
+
**knowledge wiki** if one is installed
|
|
99
|
+
([obsidian-wiki](https://github.com/ar9av/obsidian-wiki) — recommended, never
|
|
100
|
+
required) and any **other repo or hosted doc system the project names as its
|
|
101
|
+
docs**. Write the source ledger into the brief, then interview *against* it: every
|
|
102
|
+
answer that touches a source is checked against that source, and the operator
|
|
103
|
+
outranks any document — but only out loud, so an override is a recorded decision
|
|
104
|
+
instead of an undetected divergence. The same ledger is stage 9's work list.
|
|
105
|
+
|
|
106
|
+
Three things the grill does beyond clarifying the request:
|
|
90
107
|
- **Domain awareness.** It reads the project's own `CONTEXT.md` / `docs/adr/` and
|
|
91
108
|
holds the operator to them — challenging terms that conflict with the glossary,
|
|
92
109
|
sharpening overloaded words, stress-testing with concrete scenarios, and
|
|
@@ -108,8 +125,13 @@ Two things the grill does beyond clarifying the request:
|
|
|
108
125
|
**and the model decision** (`references/model-tiering.md`): recommend
|
|
109
126
|
the most capable model available, let the operator confirm or override, record
|
|
110
127
|
it. Ask once, here.
|
|
111
|
-
2. **Run stage 0
|
|
112
|
-
|
|
128
|
+
2. **Run stage 0 — always, no exceptions.** It opens with the **knowledge harvest**
|
|
129
|
+
(`references/knowledge-sources.md`): query the project's own sources — repo docs,
|
|
130
|
+
ADRs, `docs/ux/`, past briefs, the wiki if installed, any doc repo the project
|
|
131
|
+
names — for this task's terms, and write the **source ledger** into the brief
|
|
132
|
+
before question one. Then grill until shared
|
|
133
|
+
understanding is reached, **each answer checked against the harvest**, the
|
|
134
|
+
autonomy sweep is covered, **the REQ table is
|
|
113
135
|
written (one row per independently verifiable deliverable, each naming its
|
|
114
136
|
check)** and the brief is locked
|
|
115
137
|
(`references/stages.md` → 0). Do not touch stage 1 before the brief is
|
|
@@ -155,7 +177,7 @@ capable available — see `references/model-tiering.md`).
|
|
|
155
177
|
|
|
156
178
|
| # | Stage | Invoke | Gate | Type |
|
|
157
179
|
|---|---|---|---|---|
|
|
158
|
-
| 0 | Intake grill — **mandatory** | built in: [`references/grill.md`](references/grill.md) | shared understanding reached; autonomy sweep covered; brief locked + confirmed | manual |
|
|
180
|
+
| 0 | Intake grill — **mandatory** | built in: [`references/knowledge-sources.md`](references/knowledge-sources.md) (harvest) → [`references/grill.md`](references/grill.md) (interview) | source ledger written; shared understanding reached; autonomy sweep covered; brief locked + confirmed | manual |
|
|
159
181
|
| 1 | Docs study | `context7` (resolve-library-id → get-library-docs) / `context7-docs` | contracts grounded on fetched docs | auto |
|
|
160
182
|
| 2 | Brainstorm + decompose | built in: [`references/brainstorm.md`](references/brainstorm.md) + **UI detection** + [`references/decomposition.md`](references/decomposition.md) for platforms | design approved; UI verdict recorded; every REQ answered; platform: module map approved | manual |
|
|
161
183
|
| 3 | Spec | built in: [`references/spec.md`](references/spec.md) — **UI → super-ux chain first** (`/ux` → `ux-foundation` CJM → `ux-flows` screens → `ux-scenarios` → `/ux-lint`), then spec `docs/superpowers/specs/…-design.md` | committed + reviewed; UI: chain validated, linter green, scenarios/`SCR-` traced | manual |
|
|
@@ -164,7 +186,7 @@ capable available — see `references/model-tiering.md`).
|
|
|
164
186
|
| 6 | Tests | host test runner + built-in [`references/tdd.md`](references/tdd.md) | full suite green; new/changed code covered | auto |
|
|
165
187
|
| 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 |
|
|
166
188
|
| 8 | Post-deploy | tail deploy logs / health-check | clean boot or honest degradation report | auto |
|
|
167
|
-
| 9 | Docs + wiki | host module docs/runbook rules → `wiki-update` | docs synced
|
|
189
|
+
| 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 | auto |
|
|
168
190
|
| 10 | **Acceptance** | built in: [`references/acceptance.md`](references/acceptance.md) | every REQ accounted for with evidence; ledger has no unresolved row; operator signs off | manual |
|
|
169
191
|
|
|
170
192
|
## Model — ask once, at preflight
|
|
@@ -198,6 +220,7 @@ automation is on — `pipeline.schema.json` is the only contract.
|
|
|
198
220
|
|
|
199
221
|
- `pipeline.schema.json` — the universal pipeline config contract (stages + release)
|
|
200
222
|
- `pipeline.example.json` — this plugin's default flow (stage 0 + 1→10) + release, as config
|
|
223
|
+
- `references/knowledge-sources.md` — stage-0 phase 1: the source list, the wiki, the ledger, the stage-9 loop-back
|
|
201
224
|
- `references/grill.md` — the built-in stage-0 grill: loop, domain awareness, autonomy sweep
|
|
202
225
|
- `references/acceptance.md` — the built-in stage-10 close-out: REQ coverage, evidence, sign-off
|
|
203
226
|
- `references/brainstorm.md` — stage 2: design dialogue, approaches, UI detection, hard gate
|
|
@@ -211,3 +234,6 @@ automation is on — `pipeline.schema.json` is the only contract.
|
|
|
211
234
|
- `references/conventions.md` — how stages 6–10 read the host project's CLAUDE.md
|
|
212
235
|
- `references/companion-skills.md` — companion skills, install lines, preflight recommendation
|
|
213
236
|
- `references/artifacts.md` — the canonical document/artifact layout per stage
|
|
237
|
+
- `templates/` — skeletons seeded into the host project: `brief.md` (stage 0),
|
|
238
|
+
`carryover.md` (seeded at 0, appended by every stage, read in full at 10),
|
|
239
|
+
`context.md` and `adr.md` (format references the grill writes lazily)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "./pipeline.schema.json",
|
|
3
3
|
"version": 1,
|
|
4
|
-
"_note": "EXAMPLE ONLY — copy this file, rename to pipeline.json in your project, and rewrite it. This particular example encodes the plugin's own default flow (an up-front intake grill + this skill's own built-in stage doctrine + a super-ux UX track for user-facing tasks); it is NOT a fixed contract. Your project defines its own stages (any count), each executed by your own skills/agents, with your own gate types. Stage models use provider-agnostic tokens ('default' = the model confirmed for the run, 'inherit' = whatever the operator is on) — never hardcode a vendor model id, it goes stale. The universal contract is pipeline.schema.json; test/validate.py checks this example against it. gate.type: auto = orchestrator verifies the check itself (pass/fail); manual = wait for an explicit operator go. Which stages are manual vs auto is the operator's decision, not the plugin's. Any repeating loop in a run (fix loop, a re-entered stage, the per-module program loop) is bound by the loop guard: log every repeat touch, stop on oscillation, escalate to the layer that owns the conflict, then re-check in a planned order.",
|
|
4
|
+
"_note": "EXAMPLE ONLY — copy this file, rename to pipeline.json in your project, and rewrite it. This particular example encodes the plugin's own default flow (an up-front intake grill + this skill's own built-in stage doctrine + a super-ux UX track for user-facing tasks); it is NOT a fixed contract. Reading skills[] in THIS example: a 'task-pipeline:<name>' entry is not an installable skill — it names this skill's own built-in doctrine file (references/<name>.md, e.g. task-pipeline:grill -> references/grill.md); a 'host:<name>' entry is the host project's own command for that job, resolved from its CLAUDE.md (see references/conventions.md); every other entry is a real skill/agent your environment resolves (super-ux:*, context7, wiki-query, wiki-update). In YOUR pipeline.json, put whatever names your environment actually resolves. Your project defines its own stages (any count), each executed by your own skills/agents, with your own gate types. Stage models use provider-agnostic tokens ('default' = the model confirmed for the run, 'inherit' = whatever the operator is on) — never hardcode a vendor model id, it goes stale. The universal contract is pipeline.schema.json; test/validate.py checks this example against it. gate.type: auto = orchestrator verifies the check itself (pass/fail); manual = wait for an explicit operator go. Which stages are manual vs auto is the operator's decision, not the plugin's. Any repeating loop in a run (fix loop, a re-entered stage, the per-module program loop) is bound by the loop guard: log every repeat touch, stop on oscillation, escalate to the layer that owns the conflict, then re-check in a planned order.",
|
|
5
5
|
"stages": [
|
|
6
6
|
{
|
|
7
7
|
"id": 0,
|
|
@@ -9,11 +9,13 @@
|
|
|
9
9
|
"name": "Intake grill",
|
|
10
10
|
"model": "default",
|
|
11
11
|
"skills": [
|
|
12
|
+
"task-pipeline:knowledge-harvest",
|
|
13
|
+
"wiki-query",
|
|
12
14
|
"task-pipeline:grill"
|
|
13
15
|
],
|
|
14
16
|
"gate": {
|
|
15
17
|
"type": "manual",
|
|
16
|
-
"check": "MANDATORY stage — never skipped (only sanctioned bypass: the entry-from-super-ux short-circuit).
|
|
18
|
+
"check": "MANDATORY stage — never skipped (only sanctioned bypass: the entry-from-super-ux short-circuit). PHASE 1, before the first question: harvest the knowledge sources (references/knowledge-sources.md) — code, CLAUDE.md/AGENTS.md, CONTEXT.md + docs/adr, docs/ + docs/ux, past pipeline briefs and carry-over ledgers, the knowledge wiki when installed (obsidian-wiki — recommended, never required; detect ~/.obsidian-wiki/config), and any other repo or hosted doc system the project names as its docs — queried by this task's own terms, with the SOURCE LEDGER written into the brief (a row per source consulted, or an explicit 'none found'). PHASE 2, the grill, built into the skill (references/grill.md) — no companion to install. Per its contract: one question at a time, a recommended answer with each, explore the codebase/docs before asking, depth-first, contradictions reconciled; EVERY answer that touches a harvested source is validated against that source — the operator outranks any document, but only out loud, and the losing side is logged for the stage-9 doc update; domain awareness applied (terms challenged against CONTEXT.md, ADRs recorded for hard-to-reverse calls). The autonomy sweep is covered — every stage 1-10 has its blockers pre-resolved (docs sources, branch/tracker policy, test + lint commands, deploy target and authorization, log/health locations, docs+wiki targets) or is explicitly marked 'stop and ask here'. UI verdict recorded (arms super-ux); model decision recorded. All of it locked into a committed task brief the operator confirms before stage 1. The REQ table is written — one row per independently verifiable deliverable, each naming how it is verified — and frozen: adding later is free, removing or narrowing needs the operator's explicit agreement. The carry-over ledger is seeded."
|
|
17
19
|
}
|
|
18
20
|
},
|
|
19
21
|
{
|
|
@@ -50,9 +52,11 @@
|
|
|
50
52
|
"name": "Spec",
|
|
51
53
|
"model": "default",
|
|
52
54
|
"skills": [
|
|
55
|
+
"super-ux:ux",
|
|
53
56
|
"super-ux:ux-foundation",
|
|
54
57
|
"super-ux:ux-flows",
|
|
55
58
|
"super-ux:ux-scenarios",
|
|
59
|
+
"super-ux:ux-lint",
|
|
56
60
|
"task-pipeline:spec"
|
|
57
61
|
],
|
|
58
62
|
"gate": {
|
|
@@ -139,7 +143,7 @@
|
|
|
139
143
|
],
|
|
140
144
|
"gate": {
|
|
141
145
|
"type": "auto",
|
|
142
|
-
"check": "docs in sync with code in the same change; wiki synced; dangling links fixed"
|
|
146
|
+
"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 in sync with code in the same change; wiki synced via wiki-update when obsidian-wiki is installed (absent → recommended once, never a blocker); docs living in another repository are outward — proposed with an explicit go, or carried over with the exact edit; dangling links fixed"
|
|
143
147
|
}
|
|
144
148
|
},
|
|
145
149
|
{
|
|
@@ -63,8 +63,9 @@ Run: <branch/commit range> · Date: YYYY-MM-DD
|
|
|
63
63
|
| `deferred` | agreed not to do it now | the operator's agreement **and** a tracker entry |
|
|
64
64
|
| `dropped` | agreed it isn't wanted | the operator's agreement + the reason |
|
|
65
65
|
|
|
66
|
-
|
|
67
|
-
`unknown` fails the gate — that is the whole mechanism
|
|
66
|
+
Those four are the only ways a requirement may close. Anything that fits none of
|
|
67
|
+
them is `unknown`, and **`unknown` fails the gate** — that is the whole mechanism:
|
|
68
|
+
the run cannot end while a requirement is still unclassified.
|
|
68
69
|
|
|
69
70
|
## Evidence, not assertion
|
|
70
71
|
|
|
@@ -53,6 +53,7 @@ record (see `build.md`).
|
|
|
53
53
|
|
|
54
54
|
| Stage | Writes | Consumed by |
|
|
55
55
|
|---|---|---|
|
|
56
|
+
| 0 Harvest | the brief's **Knowledge sources** ledger — every source consulted, its freshness, whether this run makes it stale | the grill (validation), **stage 9** (the update work list) |
|
|
56
57
|
| 0 Intake | `specs/<topic>-brief.md` — incl. the **REQ table** (seed from `templates/brief.md`) | stages 2–5, 7, 10 |
|
|
57
58
|
| 0→10 all | `specs/<topic>-carryover.md` — append-only ledger (seed from `templates/carryover.md`) | stage 10, in full |
|
|
58
59
|
| 10 Acceptance | `specs/<topic>-acceptance.md` — every REQ with a status and evidence | the operator |
|
|
@@ -67,24 +68,34 @@ record (see `build.md`).
|
|
|
67
68
|
## This repo (task-pipeline itself), for reference
|
|
68
69
|
|
|
69
70
|
```
|
|
70
|
-
.claude-plugin/marketplace.json
|
|
71
|
+
.claude-plugin/marketplace.json # marketplace manifest
|
|
71
72
|
plugins/task-pipeline/
|
|
72
|
-
.claude-plugin/plugin.json
|
|
73
|
+
.claude-plugin/plugin.json # plugin manifest
|
|
73
74
|
commands/task-pipeline.md # /task-pipeline
|
|
74
75
|
skills/task-pipeline/
|
|
75
|
-
SKILL.md
|
|
76
|
+
SKILL.md # the orchestrator itself
|
|
76
77
|
pipeline.schema.json # generic pipeline contract
|
|
77
78
|
pipeline.example.json # this plugin's own flow, as config
|
|
78
|
-
references/
|
|
79
|
-
|
|
80
|
-
|
|
79
|
+
references/ # built-in stage doctrine:
|
|
80
|
+
knowledge-sources.md grill.md # stage 0 (harvest, then interview)
|
|
81
|
+
brainstorm.md decomposition.md # stage 2
|
|
82
|
+
spec.md planning.md # stages 3-4
|
|
83
|
+
build.md review.md tdd.md # stages 5-6
|
|
84
|
+
acceptance.md # stage 10
|
|
85
|
+
loop-guard.md # cross-cutting: churn detection
|
|
86
|
+
stages.md model-tiering.md # gates, model policy
|
|
87
|
+
conventions.md artifacts.md # host conventions, this layout
|
|
88
|
+
companion-skills.md # optional companions + preflight
|
|
89
|
+
templates/ # skeletons seeded into a host project
|
|
90
|
+
README.md brief.md carryover.md context.md adr.md
|
|
81
91
|
cursor/rules/task-pipeline.mdc # Cursor channel (self-contained rule)
|
|
82
|
-
plugins/task-pipeline/skills/task-pipeline/templates/{brief,carryover,context,adr}.md # stage-0 skeletons (ship on every channel)
|
|
83
92
|
bin/task-pipeline.js # npx installer (package task-pipeline-skill)
|
|
84
|
-
package.json
|
|
85
93
|
install.sh # POSIX installer
|
|
86
|
-
test/validate.py # structural validator
|
|
87
|
-
.github/workflows/{validate,release}.yml # CI + toggleable release
|
|
88
|
-
|
|
94
|
+
test/validate.py # structural validator (npm test)
|
|
95
|
+
.github/workflows/{validate,release}.yml # CI + toggleable release automation
|
|
96
|
+
.github/ISSUE_TEMPLATE/ .github/PULL_REQUEST_TEMPLATE.md
|
|
97
|
+
package.json .gitignore
|
|
98
|
+
README.md CHANGELOG.md LICENSE CLAUDE.md
|
|
99
|
+
CONTRIBUTING.md SECURITY.md CODE_OF_CONDUCT.md
|
|
89
100
|
docs/superpowers/{specs,plans}/ # this repo's own design history
|
|
90
101
|
```
|
|
@@ -37,10 +37,12 @@ not a question to re-open from scratch.
|
|
|
37
37
|
1. **Explore the current state.** Files, module docs, recent commits, the
|
|
38
38
|
conventions the repo already follows. Do this before asking anything.
|
|
39
39
|
2. **Scope check, early.** If the task actually describes several independent
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
40
|
+
capabilities or separately shippable surfaces, say so immediately: that is a
|
|
41
|
+
**platform**, and it gets cut into modules at the end of this stage by
|
|
42
|
+
[`decomposition.md`](decomposition.md), before any spec is written. Brainstorm
|
|
43
|
+
the platform's shape — the pieces, how they relate, what order they land in —
|
|
44
|
+
not the details of one corner; those belong to each module's own stage-3
|
|
45
|
+
dossier. Don't refine something that needs splitting first.
|
|
44
46
|
3. **Questions one at a time.** Never bundle. Multiple choice where it fits, open
|
|
45
47
|
where it doesn't. Purpose, constraints, success criteria — anything the brief
|
|
46
48
|
left at design level.
|
|
@@ -304,7 +304,8 @@ findings are neither fixed nor parked-with-ruling at the cap.
|
|
|
304
304
|
## 5. Final whole-branch review
|
|
305
305
|
|
|
306
306
|
After the last task: build a package over `MERGE_BASE`..`HEAD`
|
|
307
|
-
(`git merge-base
|
|
307
|
+
(`git merge-base "$BASE_BRANCH" HEAD`, where `$BASE_BRANCH` is the base recorded in
|
|
308
|
+
the stage-0 brief — never a hardcoded `main`), dispatch the whole-branch review
|
|
308
309
|
([`review.md`](review.md) → *Final review*; on the run's model, escalation offered
|
|
309
310
|
out loud per *Models* above), and point it at the
|
|
310
311
|
ledger's deferred-minor and parked lines so it can triage what must be fixed before
|
|
@@ -12,6 +12,7 @@ better, plus one that is required only for user-facing work.
|
|
|
12
12
|
|
|
13
13
|
| Stage | Doctrine |
|
|
14
14
|
|---|---|
|
|
15
|
+
| 0 Knowledge harvest (pre-grill) | `references/knowledge-sources.md` |
|
|
15
16
|
| 0 Intake grill | `references/grill.md` |
|
|
16
17
|
| 2 Brainstorm | `references/brainstorm.md` |
|
|
17
18
|
| 2 Decompose (platforms only) | `references/decomposition.md` |
|
|
@@ -28,7 +29,7 @@ better, plus one that is required only for user-facing work.
|
|
|
28
29
|
|---|---|---|---|
|
|
29
30
|
| **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`) |
|
|
30
31
|
| **context7** (MCP) | stage 1 docs study | Recommended (web-search fallback) | connect the context7 MCP server |
|
|
31
|
-
| **wiki-
|
|
32
|
+
| **[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` |
|
|
32
33
|
| ~~superpowers~~ | — | **Not a dependency.** Stages 2/4/5/6 run on the built-in doctrine above. See *Optional bridge* | — |
|
|
33
34
|
| ~~grill-me / grilling~~ | — | **Not a dependency.** The stage-0 grill is built in (`references/grill.md`) | — |
|
|
34
35
|
|
|
@@ -60,7 +61,11 @@ Pipeline companions (stage doctrine is built in — nothing to install for it):
|
|
|
60
61
|
/plugin marketplace add ssheleg/super-ux
|
|
61
62
|
/plugin install super-ux@super-ux
|
|
62
63
|
✓ context7 — ready
|
|
63
|
-
|
|
64
|
+
✗ obsidian-wiki — recommended: stage 0 queries it before grilling you,
|
|
65
|
+
stage 9 syncs back what this run learned:
|
|
66
|
+
pip install obsidian-wiki
|
|
67
|
+
obsidian-wiki setup --vault /path/to/your/vault
|
|
68
|
+
(running without it — the harvest uses repo docs only)
|
|
64
69
|
|
|
65
70
|
🧠 Model for this run: recommended <top tier available>. You're on <current>.
|
|
66
71
|
/model <id> to switch, or "keep current", or name per-stage overrides.
|
|
@@ -72,6 +77,10 @@ Rules:
|
|
|
72
77
|
|
|
73
78
|
- Only flag **super-ux** when the task implies a UI (the stage-0 grill decides;
|
|
74
79
|
when unsure, flag it — a false positive costs one install).
|
|
80
|
+
- **obsidian-wiki**: detect via `~/.obsidian-wiki/config` or a resolving
|
|
81
|
+
`wiki-query`/`wiki-update`. Present → say `✓ ready` and use it in the harvest.
|
|
82
|
+
Absent → print the two install lines **once** and continue; never ask twice in a
|
|
83
|
+
run and never block a stage on it ([`knowledge-sources.md`](knowledge-sources.md)).
|
|
75
84
|
- **Never gate any stage on an install** except the stage-3 UX track on a UI task.
|
|
76
85
|
- Optional tools missing → state the fallback, don't block.
|
|
77
86
|
- Re-detect after the operator installs; don't assume.
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
# Host conventions (stages 6–10)
|
|
1
|
+
# Host conventions (stage 0 harvest, stages 6–10)
|
|
2
2
|
|
|
3
3
|
The orchestrator is project-agnostic. For tests / lint / deploy / docs / wiki it reads the
|
|
4
4
|
**host project's `CLAUDE.md` / `AGENTS.md` first**, then falls back to detection.
|
|
5
|
+
The same files are the stage-0 harvest's first stop — they are where a project
|
|
6
|
+
names its doc repos, its knowledge base and its house rules
|
|
7
|
+
([`knowledge-sources.md`](knowledge-sources.md)).
|
|
5
8
|
Prefer explicit host instructions over detection; if a step's convention can't be
|
|
6
9
|
found, surface it and **ask** rather than guessing.
|
|
7
10
|
|
|
@@ -30,9 +33,20 @@ found, surface it and **ask** rather than guessing.
|
|
|
30
33
|
CI: the workflow run. Hit the health endpoint if one is defined.
|
|
31
34
|
|
|
32
35
|
## Docs + wiki
|
|
36
|
+
- **Start from the stage-0 source ledger** ([`knowledge-sources.md`](knowledge-sources.md)):
|
|
37
|
+
the sources the harvest read are the sources this stage updates. Anything the run
|
|
38
|
+
proved stale is already listed there with what's wrong.
|
|
33
39
|
- Host self-update rules (module docs, runbooks, agent-self cards, etc.) — update
|
|
34
|
-
in the same change.
|
|
35
|
-
|
|
40
|
+
in the same change. Fix dangling links.
|
|
41
|
+
- **Wiki:** [obsidian-wiki](https://github.com/ar9av/obsidian-wiki) — the
|
|
42
|
+
`wiki-update` skill (resolves the vault via `~/.obsidian-wiki/config`). Detect it
|
|
43
|
+
the same way the harvest does; if absent, recommend it once
|
|
44
|
+
(`pip install obsidian-wiki` → `obsidian-wiki setup --vault <path>`) and continue.
|
|
45
|
+
A project may of course use a different knowledge base — then its own
|
|
46
|
+
`CLAUDE.md` names the sync command, and that wins.
|
|
47
|
+
- **Docs in another repository** (a docs repo, a submodule, a sibling checkout the
|
|
48
|
+
project names): updating it is **outward** — propose the change, get an explicit
|
|
49
|
+
operator go, open a PR there. Never push to a repo the task didn't name.
|
|
36
50
|
|
|
37
51
|
## Issue tracker (stage 10)
|
|
38
52
|
|
|
@@ -12,7 +12,27 @@ 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
|
-
##
|
|
15
|
+
## Phase 1 — harvest before you ask
|
|
16
|
+
|
|
17
|
+
**Do not open the interview cold.** Stage 0 begins by finding what the project
|
|
18
|
+
already knows about this task: the code, `CLAUDE.md`, `CONTEXT.md` and the ADRs,
|
|
19
|
+
`docs/` and `docs/ux/`, past pipeline briefs, the **knowledge wiki** when one is
|
|
20
|
+
installed, and any **other repository or hosted doc system the project names as
|
|
21
|
+
its docs**. Full procedure, source order, the wiki's detection and install line,
|
|
22
|
+
and the ledger to write: [`knowledge-sources.md`](knowledge-sources.md).
|
|
23
|
+
|
|
24
|
+
Two things come out of it, both required before question one:
|
|
25
|
+
|
|
26
|
+
- the **source ledger** in the brief — one row per source consulted, what it says
|
|
27
|
+
about this task, and how fresh it is (`no sources found` is a valid row);
|
|
28
|
+
- the list of things you therefore **don't need to ask**, and the specific points
|
|
29
|
+
where a source looks stale or ambiguous — those become the sharpest questions.
|
|
30
|
+
|
|
31
|
+
Everything below runs against that harvest. An answer you can't check against a
|
|
32
|
+
source is a recollection, and the whole loop exists to stop the run from building
|
|
33
|
+
on one.
|
|
34
|
+
|
|
35
|
+
## Phase 2 — the loop
|
|
16
36
|
|
|
17
37
|
Interview the operator relentlessly about every aspect of the task until you reach
|
|
18
38
|
a **shared understanding**. Walk down each branch of the decision tree, resolving
|
|
@@ -73,6 +93,15 @@ Create these files **lazily** — only when you have something real to write.
|
|
|
73
93
|
check whether the code agrees, and surface contradictions: *"Your code cancels
|
|
74
94
|
entire Orders, but you just said partial cancellation is possible — which is
|
|
75
95
|
right?"*
|
|
96
|
+
- **Cross-reference with the harvest — every answer, not just the domain ones.**
|
|
97
|
+
Phase 1 put the ADRs, runbooks and wiki pages in your hands; use them the same
|
|
98
|
+
way: *"The March ADR says orders are written only through the command handler,
|
|
99
|
+
you just described a direct write — has that changed?"* The operator **outranks
|
|
100
|
+
every document**, but only out loud: an override quoted against its source is a
|
|
101
|
+
recorded decision, an unquoted one is an undetected divergence. When two sources
|
|
102
|
+
disagree, precedence is code > host docs/ADRs > wiki > memory, and the loser is
|
|
103
|
+
logged for the stage-9 update ([`knowledge-sources.md`](knowledge-sources.md) →
|
|
104
|
+
*Phase 2*).
|
|
76
105
|
- **Update `CONTEXT.md` inline.** Resolve a term → write it down right then, not in
|
|
77
106
|
a batch at the end. Format: [`templates/context.md`](../templates/context.md).
|
|
78
107
|
Keep it free of implementation detail — only terms a domain expert would
|
|
@@ -101,6 +130,7 @@ explicit "stop and ask me here":
|
|
|
101
130
|
| Stage | What to settle up front |
|
|
102
131
|
|---|---|
|
|
103
132
|
| run-wide | the model decision ([`model-tiering.md`](model-tiering.md)); what to decide autonomously vs escalate |
|
|
133
|
+
| 0 Harvest | doc sources beyond this repo — other repos, hosted doc systems, the knowledge wiki — and whether stage 9 may write to them (another repo is outward: propose + PR, never a direct push) |
|
|
104
134
|
| 1 Docs | external libs/APIs/SDKs in play; any private ones context7 can't resolve → where their docs live |
|
|
105
135
|
| 2 Decompose | is this a platform (several capabilities/surfaces) or one module? if platform: deploy cadence — per module or once at the end |
|
|
106
136
|
| 2–3 Spec | UI verdict (arms super-ux); any scenario-tracing waiver |
|
|
@@ -153,9 +183,12 @@ that shrank without anyone deciding it should.
|
|
|
153
183
|
Everything resolved goes into the **task brief**, seeded from
|
|
154
184
|
[`templates/brief.md`](../templates/brief.md) and committed to
|
|
155
185
|
`docs/superpowers/specs/YYYY-MM-DD-<topic>-brief.md` — scope, **the REQ table**,
|
|
156
|
-
users, UI verdict, constraints, locked decisions,
|
|
157
|
-
done-criteria, open assumptions. Seed the template only when
|
|
158
|
-
never overwrite an existing brief.
|
|
186
|
+
**the phase-1 source ledger**, users, UI verdict, constraints, locked decisions,
|
|
187
|
+
the autonomy table, done-criteria, open assumptions. Seed the template only when
|
|
188
|
+
the file is absent; never overwrite an existing brief.
|
|
189
|
+
|
|
190
|
+
The ledger is not decoration: **stage 9 updates exactly what stage 0 read**, and
|
|
191
|
+
every doc the grill proved stale is already listed there with what's wrong.
|
|
159
192
|
|
|
160
193
|
Alongside it, seed the **carry-over ledger** from
|
|
161
194
|
[`templates/carryover.md`](../templates/carryover.md) at
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# Knowledge sources — harvest before the grill, update after the build
|
|
2
|
+
|
|
3
|
+
Stage 0 has two phases. This file is **phase 1**: before the first question is
|
|
4
|
+
asked, find and read what the project already knows about this task. The interview
|
|
5
|
+
([`grill.md`](grill.md)) is phase 2, and it runs *against* what was harvested here.
|
|
6
|
+
|
|
7
|
+
The same source list closes the loop at **stage 9**: what was read at the start is
|
|
8
|
+
what gets updated at the end. A source good enough to answer a question is a source
|
|
9
|
+
that goes stale when the answer changes.
|
|
10
|
+
|
|
11
|
+
## Why this is a phase and not "explore a bit first"
|
|
12
|
+
|
|
13
|
+
An agent that starts asking without harvesting spends the operator's turns on
|
|
14
|
+
questions the project already answered — in an ADR, in a runbook, in a wiki page
|
|
15
|
+
written three months ago by the same person now being asked. That is the expensive
|
|
16
|
+
failure, but not the worst one.
|
|
17
|
+
|
|
18
|
+
The worst one is silent: **the operator misremembers, the agent believes them, and
|
|
19
|
+
the run builds on it.** People answer from memory about systems they wrote a year
|
|
20
|
+
ago. Without the documents in hand you cannot tell a decision from a recollection,
|
|
21
|
+
so every later gate passes honestly on a false premise. Harvesting first is what
|
|
22
|
+
makes the grill's answers *checkable* instead of merely confident.
|
|
23
|
+
|
|
24
|
+
## The sources, in the order to try them
|
|
25
|
+
|
|
26
|
+
| # | Source | How to find it | What it's good for |
|
|
27
|
+
|---|---|---|---|
|
|
28
|
+
| 1 | **The code** | the repo you're in | what actually runs — the tiebreaker |
|
|
29
|
+
| 2 | **Host agent docs** | `CLAUDE.md`, `AGENTS.md`, `.cursor/rules/` | conventions, commands, deploy path, house rules |
|
|
30
|
+
| 3 | **Domain docs** | `CONTEXT.md` / `CONTEXT-MAP.md`, `docs/adr/` | the glossary and the decisions with their reasons |
|
|
31
|
+
| 4 | **Product/UX docs** | `docs/ux/` (super-ux chain), `README`, runbooks | user-facing behavior that is already specified |
|
|
32
|
+
| 5 | **Pipeline history** | `docs/superpowers/specs/`, `plans/`, past `-carryover.md` | what a previous run of this pipeline decided or deferred |
|
|
33
|
+
| 6 | **The knowledge wiki** | see below | distilled cross-project knowledge, prior sessions, why decisions were made |
|
|
34
|
+
| 7 | **Other doc repos the project names** | a docs repo URL or submodule in `CLAUDE.md`/`README`, a sibling checkout, a `docs/` monorepo package | specs, contracts and runbooks that live outside this repo |
|
|
35
|
+
| 8 | **Hosted doc systems the project names** | Notion / Confluence / Google Docs referenced in the project | the same, when the team keeps them there |
|
|
36
|
+
|
|
37
|
+
Rules for the list:
|
|
38
|
+
|
|
39
|
+
- **Never invent a source.** A doc repo is in scope because the project names it,
|
|
40
|
+
not because it plausibly exists. Nothing is cloned or fetched on a guess.
|
|
41
|
+
- **Sources 7–8 are read-only at this stage**, and reading a hosted system needs a
|
|
42
|
+
connected tool — if there's no tool, record the gap and ask the operator to paste
|
|
43
|
+
what matters rather than pretending the source was covered.
|
|
44
|
+
- **The wiki is optional; the harvest is not.** With no wiki and no doc repos, the
|
|
45
|
+
harvest is sources 1–5 and takes two minutes. Skipping it is never the answer.
|
|
46
|
+
|
|
47
|
+
## The knowledge wiki — recommended
|
|
48
|
+
|
|
49
|
+
The wiki this pipeline is built to work with is
|
|
50
|
+
**[obsidian-wiki](https://github.com/ar9av/obsidian-wiki)** (Karpathy's LLM-wiki
|
|
51
|
+
pattern: raw sources → distilled wiki → schema). It is the one source that carries
|
|
52
|
+
*why* across projects and across months, which is exactly what a fresh context lacks.
|
|
53
|
+
|
|
54
|
+
**Detect it** — any of: `~/.obsidian-wiki/config` exists; the `wiki-query` /
|
|
55
|
+
`wiki-update` skills resolve.
|
|
56
|
+
|
|
57
|
+
- **Installed → use it.** Query it during the harvest (`wiki-query`, or the vault's
|
|
58
|
+
`index.md` + a targeted grep when the skill isn't loaded), and sync back at stage
|
|
59
|
+
9 (`wiki-update`).
|
|
60
|
+
- **Not installed → recommend it once, in the preflight block, with the line:**
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
pip install obsidian-wiki
|
|
64
|
+
obsidian-wiki setup --vault /path/to/your/vault
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Then continue without it. It is a **recommendation, never a gate** — no stage
|
|
68
|
+
blocks on a missing wiki, and the pipeline never nags twice in a run.
|
|
69
|
+
|
|
70
|
+
## How to harvest — retrieval, not reading
|
|
71
|
+
|
|
72
|
+
The harvest is bounded by the *task*, not by the size of the sources. You are not
|
|
73
|
+
reading the wiki; you are asking it about this task.
|
|
74
|
+
|
|
75
|
+
1. **Take the task's nouns** — the entities, the feature name, the subsystem, the
|
|
76
|
+
file paths the operator mentioned — plus their obvious synonyms.
|
|
77
|
+
2. **Query each source with those terms**: `wiki-query` for the wiki; `grep`/`Read`
|
|
78
|
+
for repo docs; the tracker/hosted-doc tool if one is connected.
|
|
79
|
+
3. **Follow one hop, not ten.** A hit that names an ADR, a scenario id or a module
|
|
80
|
+
is worth opening. A page three links away is context, not evidence.
|
|
81
|
+
4. **Stop when the terms stop returning anything new.** Same rule as the interview:
|
|
82
|
+
no grinding past diminishing returns.
|
|
83
|
+
|
|
84
|
+
## Record it — the source ledger
|
|
85
|
+
|
|
86
|
+
Write what you found into the brief's **Knowledge sources** section
|
|
87
|
+
([`templates/brief.md`](../templates/brief.md)) before the first question. One row
|
|
88
|
+
per source actually consulted:
|
|
89
|
+
|
|
90
|
+
| Source | What it says about this task | Fresh? | Authority |
|
|
91
|
+
|---|---|---|---|
|
|
92
|
+
| `docs/adr/0007-single-write-model.md` | orders are written only through the command handler | 2026-03 | decision |
|
|
93
|
+
| wiki: `projects/x/concepts/billing-seams` | why invoicing was split out; the retry rule | 2026-06 | context |
|
|
94
|
+
| `CLAUDE.md` | test = `npm test`, deploy from `main` only | current | convention |
|
|
95
|
+
| (none for the export UI) | — | — | — |
|
|
96
|
+
|
|
97
|
+
The ledger is what makes phase 2 work: during the interview you cite rows from it,
|
|
98
|
+
and at stage 9 you update the same rows. A source consulted but not recorded is a
|
|
99
|
+
source nobody will update.
|
|
100
|
+
|
|
101
|
+
**"No sources found" is a valid, recorded outcome.** Write the row. An empty ledger
|
|
102
|
+
tells the next run that the search happened and came back empty — silence doesn't.
|
|
103
|
+
|
|
104
|
+
## Phase 2 — validate the answers against the harvest
|
|
105
|
+
|
|
106
|
+
This is the payoff, and it belongs to the grill loop
|
|
107
|
+
([`grill.md`](grill.md) → *Domain awareness*). Every operator answer that touches a
|
|
108
|
+
harvested source gets checked against it, on the spot:
|
|
109
|
+
|
|
110
|
+
> "The ADR from March says orders are written only through the command handler —
|
|
111
|
+
> you just described a direct write. Has that changed, or should the export go
|
|
112
|
+
> through the handler?"
|
|
113
|
+
|
|
114
|
+
Three shapes and what to do with each:
|
|
115
|
+
|
|
116
|
+
| The answer… | Do |
|
|
117
|
+
|---|---|
|
|
118
|
+
| **agrees** with the source | nothing — note it, move on |
|
|
119
|
+
| **contradicts** a source | quote the source, name the conflict, ask which governs. The answer is either "the doc is stale" (→ it gets updated at stage 9, log it now) or "I misremembered" (→ the doc stands). Both are cheap here and expensive at stage 6 |
|
|
120
|
+
| **goes beyond** every source | this is new knowledge — it belongs in the brief, and usually in `CONTEXT.md` or an ADR as it lands |
|
|
121
|
+
|
|
122
|
+
**The operator outranks the docs — but only out loud.** A person may overrule any
|
|
123
|
+
document; they may not do it by accident. The point of quoting the source is that
|
|
124
|
+
the override becomes a recorded decision instead of an undetected divergence.
|
|
125
|
+
|
|
126
|
+
**Precedence when two sources disagree with each other:** code > host docs and
|
|
127
|
+
ADRs > the wiki > anyone's memory. The wiki is *distilled* knowledge and can lag
|
|
128
|
+
the repo by months; the code is what runs. A disagreement between them is a grill
|
|
129
|
+
question, never a silent pick — and it is usually a sign the doc is due an update.
|
|
130
|
+
|
|
131
|
+
## Close the loop — stage 9 updates what stage 0 read
|
|
132
|
+
|
|
133
|
+
The ledger is the stage-9 work list. For each row:
|
|
134
|
+
|
|
135
|
+
- **Host repo docs, ADRs, runbooks, `docs/ux/`** — updated in the **same change**,
|
|
136
|
+
per the host's own rules ([`conventions.md`](conventions.md)).
|
|
137
|
+
- **Anything the run proved stale** — including a doc that was "wrong but nobody
|
|
138
|
+
had time": that's why the conflict was logged in phase 2 instead of only being
|
|
139
|
+
resolved verbally.
|
|
140
|
+
- **The wiki** — `wiki-update` syncs what this run learned. Distil the *knowledge*
|
|
141
|
+
(decisions, seams, gotchas, why), never a diff summary.
|
|
142
|
+
- **Another repository's docs** — writing to a repo the operator didn't ask you to
|
|
143
|
+
touch is **outward**: propose the change, get an explicit go, then open a PR
|
|
144
|
+
there. Absent a go, it goes in the carry-over ledger with the exact edit needed.
|
|
145
|
+
|
|
146
|
+
A source that was worth reading at stage 0 and is wrong at stage 9 is the next
|
|
147
|
+
run's false premise. Closing that loop is the whole point of harvesting from a
|
|
148
|
+
written list instead of from whatever the search happened to surface.
|
|
149
|
+
|
|
150
|
+
## Rationalizations
|
|
151
|
+
|
|
152
|
+
| Excuse | Reality |
|
|
153
|
+
|---|---|
|
|
154
|
+
| "I'll just ask them, it's faster" | You'll ask about things a doc already answers, and you'll believe an answer you can't check. Retrieval is cheaper than a turn. |
|
|
155
|
+
| "The wiki's probably stale" | Then say so with the page in hand and get it corrected. "Probably stale" unread is an assumption; read, it's a finding. |
|
|
156
|
+
| "No docs in this repo" | Check `CLAUDE.md` for the repo that has them, and the wiki for the last time anyone touched this. Then record the empty ledger. |
|
|
157
|
+
| "The operator knows their own system" | They do — a year ago, before three other people changed it. That's the exact case where quoting the doc pays. |
|
|
158
|
+
| "Reading the whole wiki costs too much" | The harvest is a query per task noun, not a read. If it feels expensive, you're reading instead of retrieving. |
|
|
159
|
+
| "I'll update the docs at the end from memory" | The ledger exists because the end is exactly when you no longer remember which sources you leaned on. |
|
|
@@ -21,9 +21,11 @@ brief and the spec.
|
|
|
21
21
|
|
|
22
22
|
## Before writing tasks
|
|
23
23
|
|
|
24
|
-
**Scope check.**
|
|
25
|
-
one
|
|
26
|
-
|
|
24
|
+
**Scope check.** A plan covers exactly **one** spec — for a decomposed platform,
|
|
25
|
+
one module's dossier ([`decomposition.md`](decomposition.md)). If the spec in front
|
|
26
|
+
of you covers several independent subsystems, the decomposition was missed at stage
|
|
27
|
+
2: say so and go back there for a module map, rather than inventing the split here.
|
|
28
|
+
Whatever this plan covers must produce working, testable software on its own.
|
|
27
29
|
|
|
28
30
|
**Map the file structure.** List every file that will be created or modified and
|
|
29
31
|
what each one owns. This is where decomposition gets locked in:
|
|
@@ -29,7 +29,8 @@ this plan's git-ignored directory, `.task-pipeline/build/<plan-basename>/` — s
|
|
|
29
29
|
`BASE` is the commit you recorded **before** dispatching the implementer — never
|
|
30
30
|
`HEAD~1`, which silently drops every commit but the last of a multi-commit task.
|
|
31
31
|
For a scoped re-review, `BASE` is the head the previous review saw. For the final
|
|
32
|
-
review, `BASE` is `git merge-base
|
|
32
|
+
review, `BASE` is `git merge-base "$BASE_BRANCH" HEAD` — the base branch recorded
|
|
33
|
+
in the stage-0 brief, which is not always `main`.
|
|
33
34
|
|
|
34
35
|
Never dispatch a reviewer without a diff file.
|
|
35
36
|
|