task-pipeline-skill 1.7.1 → 1.8.0

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