task-pipeline-skill 1.9.1 → 1.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,98 @@
1
1
  # Changelog
2
2
 
3
+ ## v1.10.1 — 2026-08-03
4
+
5
+ ### Fixed — four surfaces that never heard about the last two releases
6
+
7
+ A fourth audit pass, on a fourth axis: **the claims of the last three releases,
8
+ checked against the tree.** All four findings are the same shape — a file shipped and
9
+ the surfaces that tell a reader it exists were never walked. Reachability from
10
+ `SKILL.md` was green throughout, because that check proves an agent can *find* a file,
11
+ not that anybody was *told* about it.
12
+
13
+ - **The Cursor rule was two releases behind** — and it is the surface that travels,
14
+ copied into foreign projects and required to be self-contained. It knew the
15
+ documentation track and nothing about adoption, the entry audit, portability, the
16
+ routing boundary or the opt-out phrase: an agent reading it in another repository
17
+ had no idea when the pipeline applies. Measured `0` for each. Now current.
18
+ - **The README's documentation map** listed `adoption.md` and named neither
19
+ `setup.md` nor `portability.md` — and had never named `learned.md` at all.
20
+ - **The portability manifest covered 14 of 26 references.** It claims *every workflow
21
+ decision*, and the twelve stage doctrines — spec, build, planning, review,
22
+ acceptance, brainstorm, decomposition, tdd, conventions, companion-skills,
23
+ knowledge-graph, model-tiering — had no row. The guard could not see it: it checked
24
+ that every listed path resolves, which is the direction that cannot find an absence.
25
+ - **Two seeded templates over 100 lines had no `## Contents`** — the doc map (eight
26
+ sections) and the brief (nine). The rule was scoped to `references/` while the files
27
+ a host project actually reads were outside it.
28
+
29
+ **Two new guards, and they are the point.** Every reference must appear in the README
30
+ map *and* in the manifest; every seeded template over 100 lines carries its own
31
+ Contents. Both check the direction that finds absences, and both were watched failing.
32
+
33
+ ## v1.10.0 — 2026-08-03
34
+
35
+ ### Added — the entry audit, and a boundary that keeps the workflow portable
36
+
37
+ **`references/setup.md` — the audit that runs *before* the feature.** The ladder in
38
+ `audit.md` runs at the end of a run, over the change; nothing ran at the start, over
39
+ the documentation a project already has. Seven passes, cheapest first — one decision
40
+ home, register integrity, propagation (ratcheted), the matrix's *Checked by* column,
41
+ declared terms, the UX chain, and the gate itself proven against a planted defect.
42
+ Findings carry `file:line`, the minimal fix and **the seam they belong to**, ordered
43
+ by seam rather than by file, because a file-ordered list reads as noise and a
44
+ seam-ordered one names the layer of the project's own process that is leaking. It
45
+ ends in a fix plan, not a lecture, and it **fixes nothing while reading** — that is
46
+ how a pass starts finding its own edits.
47
+
48
+ **Offered once, never imposed.** Stage 0 asks when the doc map is absent or stale;
49
+ the answer, including a refusal, is recorded in the brief and never asked again. A
50
+ check that runs before every feature is a check people learn to dismiss.
51
+
52
+ **`references/portability.md` — the boundary the whole bundle rests on.** A decision
53
+ about *how the pipeline behaves* belongs in the bundle; a decision about *what this
54
+ project decided* belongs in the project. Get it backwards and one of two quiet
55
+ failures follows: an optimisation stranded in one repository, or a skill that has
56
+ learned one project's answers and stopped being project-agnostic.
57
+
58
+ It ships a **manifest** — every workflow decision with its home inside the bundle —
59
+ and a guard that resolves every path. And it names both directions, because a
60
+ comparison needs two sides: *outward*, does every workflow decision have a home here;
61
+ *inward*, is this project holding a rule that would be true in a repository nobody
62
+ has seen. The inward test is one line — **does the rule name a path, a command or a
63
+ person?** If not, it is the bundle's, and keeping it local costs every future project.
64
+
65
+ **The routing rule now travels.** It was hand-installed into an operator's config
66
+ last release, which made it the one workflow decision living outside the bundle —
67
+ neither installer touches any `CLAUDE.md`. It ships as `templates/routing-rule.md`,
68
+ and `setup` **offers** to append it. Offers, never writes: it is the operator's
69
+ configuration.
70
+
71
+ ### Added — three smaller things the same run asked for
72
+
73
+ - **Self-currency.** Preflight compares the installed version with the released one
74
+ and recommends the **launcher** (`npx sshlg-skills update`), never the bare
75
+ per-skill form that re-creates the plain copy which shadows a plugin. Plus three
76
+ staleness signals that are not version numbers: a standing instruction that has not
77
+ fired in five stamps, a doc map older than the last release, a ratchet whose count
78
+ has not moved.
79
+ - **The escalation boundary.** The autonomy sweep gains the rule that lets a run go
80
+ further without stopping: decide alone while the cost of being wrong stays inside
81
+ the repository and is reversible; escalate a price, a legal posture, a promise, money,
82
+ reputation, and any irreversible outward act. **The tell is the cost of being wrong,
83
+ not the size of the change.**
84
+ - **User paths become a stage-2 output.** The contract layer was never the thin one —
85
+ the spec already locks error handling and a module dossier already has edge cases.
86
+ The thin layer was the *conversation*: `brainstorm.md` mentioned edge cases once and
87
+ scenarios not at all. Paths, states and error paths are now named where the design
88
+ is approved, and the gate says so. Scenario IDs stay the chain's job — two sources
89
+ for one scenario is worse than one.
90
+ - **Declared terms.** The seeded doc map gains a *Terms* table, and only terms it
91
+ declares are checked. A heuristic over every capitalised word cries wolf, and a gate
92
+ that cries wolf is removed by the third person who hits it.
93
+
94
+ Three new guards, each with a negative self-test watched failing.
95
+
3
96
  ## v1.9.1 — 2026-08-03
4
97
 
5
98
  ### Added — the direction of the artifact map that was missing
package/README.md CHANGED
@@ -490,6 +490,21 @@ now does:
490
490
  discover: author and reviewer are the same person, commits are unsigned, and the
491
491
  eval suite has not been executed.
492
492
 
493
+ ### The entry audit — before the feature, not after
494
+
495
+ `/task-pipeline setup` runs seven passes over the documentation a project already
496
+ has, and hands back a fix plan rather than a lecture: one decision home, register
497
+ integrity, ratcheted propagation, the matrix's *Checked by* column, declared terms,
498
+ the UX chain, and the gate itself proven against a planted defect. Findings carry
499
+ `file:line`, the minimal fix and **the seam** — ordered by seam, because that names
500
+ which layer of your process is leaking.
501
+
502
+ Offered once when the doc map is absent or stale, and the refusal is recorded. It
503
+ also runs the **inward check**: does this project hold a rule that would be true in a
504
+ repository nobody has seen? If it names no path, no command and no person, it is the
505
+ bundle's — and keeping it local costs every future project
506
+ ([`references/portability.md`](plugins/task-pipeline/skills/task-pipeline/references/portability.md)).
507
+
493
508
  ### Adopting it — a new project, and the one you actually have
494
509
 
495
510
  Greenfield is mechanical: stage 0 seeds `docs/DOCMAP.md`, the registers and the gate
@@ -762,6 +777,9 @@ recommendation, so you arm the whole run in one exchange. Detail:
762
777
  | [`references/model-tiering.md`](plugins/task-pipeline/skills/task-pipeline/references/model-tiering.md) | model policy, the `/model` reminder, overrides |
763
778
  | [`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 |
764
779
  | [`references/adoption.md`](plugins/task-pipeline/skills/task-pipeline/references/adoption.md) | the first run in a project: greenfield seeding, and the brownfield walkthrough |
780
+ | [`references/setup.md`](plugins/task-pipeline/skills/task-pipeline/references/setup.md) | the entry audit: seven passes over the docs a project already has, offered once, output as a fix plan |
781
+ | [`references/portability.md`](plugins/task-pipeline/skills/task-pipeline/references/portability.md) | the manifest of workflow decisions and their homes in the bundle, and the boundary against a project's own answers |
782
+ | [`references/learned.md`](plugins/task-pipeline/skills/task-pipeline/references/learned.md) | fifteen rules earned by failure on a real multi-repository build, each with its incident, its check and its exit criterion |
765
783
  | [`SKILL-CARD.md`](SKILL-CARD.md) | the registry entry and risk-tier disclosure a reviewer needs before deploying it |
766
784
  | [`evals/`](evals/RESULTS.md) | the behavioural evaluation suite, its protocol, and what has actually been observed |
767
785
  | [`CHANGELOG.md`](CHANGELOG.md) | every release, with the reasoning behind it |
package/SKILL-CARD.md CHANGED
@@ -12,7 +12,7 @@ harmless.
12
12
  |---|---|
13
13
  | **Purpose** | Runs a substantial task through ten gated delivery stages — intake grill, docs study, brainstorm, spec, plan, subagent build, tests, lint/deploy, post-deploy, docs+registers, acceptance — refusing to advance until each gate passes |
14
14
  | **Owner** | ssheleg ([github.com/ssheleg/task-pipeline](https://github.com/ssheleg/task-pipeline)) |
15
- | **Version** | 1.9.1 |
15
+ | **Version** | 1.10.1 |
16
16
  | **Surface** | Claude Code (filesystem skill + plugin) and the vercel `skills` CLI. **Not** uploaded to the Skills API; custom Skills do not sync across surfaces |
17
17
  | **Dependencies** | None required. Optional: `context7` (MCP), `figma` (MCP), super-ux, agent-sync, graphify, obsidian-wiki. Every stage's doctrine ships in-repo; the one conditional requirement is super-ux for the stage-3 UX track on a user-facing task |
18
18
  | **Evaluation status** | Suite authored (15 evals, 5 categories). **Never executed** — see [`evals/RESULTS.md`](evals/RESULTS.md) |
@@ -34,11 +34,11 @@ apply.
34
34
 
35
35
  ## What to check before you trust it
36
36
 
37
- 1. Read `SKILL.md` and the 24 files under `references/` — that is the whole
37
+ 1. Read `SKILL.md` and the 26 files under `references/` — that is the whole
38
38
  instruction surface, and every one is linked directly from `SKILL.md`.
39
39
  2. Read `templates/docgate.sh` before seeding it; it is the only shipped script a
40
40
  host project will run on its own repository.
41
- 3. Run `npm run test:all` — 56 guards, each with a negative self-test that plants a
41
+ 3. Run `npm run test:all` — 61 guards, each with a negative self-test that plants a
42
42
  defect and requires rejection.
43
43
  4. Run `python3 evals/run.py` for the behavioural protocol, and read
44
44
  `evals/RESULTS.md` for what has actually been observed.
@@ -54,7 +54,7 @@ apply.
54
54
  - **Versions are pinned by git tag** and mirrored into `sshlg-skills`'s catalogue.
55
55
  Rollback is `git checkout v<previous>` or pinning the previous plugin version;
56
56
  the previous version is never deleted.
57
- - **Behavioural evidence is missing, not merely thin.** 56 structural guards prove
57
+ - **Behavioural evidence is missing, not merely thin.** 61 structural guards prove
58
58
  the skill is well-formed. Until `evals/RESULTS.md` carries a dated run, nothing in
59
59
  this repository proves it *behaves* — triggers correctly, stays quiet on a
60
60
  question, or performs the steps it documents.
@@ -423,3 +423,45 @@ JTBD, customer journey maps, user stories) → flows + screens → scenarios (th
423
423
  source of truth) → run its linter. Otherwise still design that chain, get it
424
424
  approved, and trace every user-facing requirement to a scenario before building.
425
425
  Install (Cursor/Claude/others): `npx skills add ssheleg/super-ux`.
426
+
427
+ ## Routing — when this applies at all
428
+
429
+ **Work that CHANGES THE REPOSITORY goes through the pipeline** — a feature, fix,
430
+ refactor, migration, integration, rewrite, adoption or hardening pass, in any
431
+ phrasing. **Not** for a question, an explanation, reading code, a typo or a one-line
432
+ edit. The operator opts out of a qualifying task by saying "без пайплайна" or
433
+ "quick"; when they do, say out loud that the cycle was skipped at their request.
434
+
435
+ A borderline case is named, not silently chosen: state which route you are taking and
436
+ why, in one line.
437
+
438
+ **Escalation while running.** Decide alone while the cost of being wrong stays inside
439
+ the repository and is reversible. Escalate a price, a legal posture, a promise to
440
+ somebody outside the team, anything spending money or reputation, and any irreversible
441
+ outward act. The tell is the cost of being wrong, not the size of the change.
442
+
443
+ ## The first run in a project
444
+
445
+ Two entry conditions, and they are different problems.
446
+
447
+ **A new project:** stage 0 seeds the doc map, the registers and the documentation
448
+ gate before the first interview question. The gate is green on day one because
449
+ sections with nothing to check yet print `dormant`.
450
+
451
+ **An existing project:** offer the **entry audit** once — seven passes over the
452
+ documentation that already exists, *before* building on it: one decision home,
453
+ register integrity, propagation, the matrix's checked-by column, declared terms, the
454
+ UX chain, and the gate itself proven against a planted defect. Findings carry
455
+ `file:line`, the minimal fix and the **seam**, ordered by seam rather than by file.
456
+ It ends in a fix plan and **fixes nothing while reading**.
457
+
458
+ The step that decides whether adoption survives is **baselining the ratchets at
459
+ today**: the propagation floor to the next free id, the residue floor to the measured
460
+ count. A gate that is red on adoption day is switched off on day two. History is
461
+ **not** back-filled — an old decision enters the register the day somebody is about to
462
+ contradict it.
463
+
464
+ **Portability.** A decision about how the pipeline behaves belongs in the skill; a
465
+ decision about what this project decided belongs in the project. The test for a rule
466
+ you are about to write down: does it name a path, a command or a person? If not, it is
467
+ the pipeline's, and leaving it in one repository is a fork nobody named.
package/evals/RESULTS.md CHANGED
@@ -37,9 +37,9 @@ or it belongs in a check.
37
37
  | Dated runs recorded | **0** | 2026-08-03 |
38
38
 
39
39
  The bottom two numbers are the honest state of this skill's behavioural evidence.
40
- Everything else in this repository is proven by 56 structural guards that check the
40
+ Everything else in this repository is proven by 61 structural guards that check the
41
41
  *form*; these are the only checks that would speak to the *behaviour*, and they have
42
- not been run yet. Printed here so "56 of 56 green" is never read as "the skill is
42
+ not been run yet. Printed here so "61 of 61 green" is never read as "the skill is
43
43
  known to work".
44
44
 
45
45
  ## Runs
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "task-pipeline-skill",
3
- "version": "1.9.1",
3
+ "version": "1.10.1",
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.9.1",
5
+ "version": "1.10.1",
6
6
  "author": {
7
7
  "name": "ssheleg",
8
8
  "url": "https://x.com/sshlg93"
@@ -43,3 +43,9 @@ Idempotent entry — inspect state first, never restart blindly:
43
43
  **resume** from the first incomplete stage instead of starting over.
44
44
  - Otherwise, begin at stage 0 (intake grill). If no task is given above, the
45
45
  grill's first question asks the operator for the task in one line.
46
+
47
+ **`/task-pipeline setup`** — the entry audit instead of a feature. Runs seven passes
48
+ over the documentation this project already has, reports findings as `file:line` + the
49
+ minimal fix ordered by seam, and hands back a fix plan the pipeline can run. Offered
50
+ once at stage 0 when the doc map is absent or stale; run it directly any time.
51
+ Doctrine: `references/setup.md`.
@@ -62,6 +62,8 @@ gate stops until it is installed.
62
62
  | 10 Retrospective (the run's last act) | [`references/retrospective.md`](references/retrospective.md) |
63
63
  | 10 + any audit (what's *missing*) | [`references/audit.md`](references/audit.md) |
64
64
  | **first run in a project** (new or existing) | [`references/adoption.md`](references/adoption.md) |
65
+ | **first run · the entry audit** (offered once) | [`references/setup.md`](references/setup.md) |
66
+ | **what travels with the bundle vs stays in a project** | [`references/portability.md`](references/portability.md) |
65
67
  | any repeating loop | [`references/loop-guard.md`](references/loop-guard.md) |
66
68
 
67
69
  **Optional bridge.** If the operator already runs an equivalent skill set (e.g.
@@ -332,6 +334,11 @@ automation is on — `pipeline.schema.json` is the only contract.
332
334
  - `references/tdd.md` — stages 5–6: the iron law, red/green/refactor, the suite gate
333
335
  - `references/stages.md` — per-stage detail + exact gate criteria + gate types
334
336
  - `references/model-tiering.md` — model map, ids, the `/model` reminder mechanic, override
337
+ - `references/setup.md` — the entry audit: seven passes over the docs you already
338
+ have, offered once, output as a fix plan; plus the inward check for rules that
339
+ belong upstream
340
+ - `references/portability.md` — the manifest of workflow decisions and their homes
341
+ inside the bundle, and the boundary against a project's own answers
335
342
  - `references/adoption.md` — the first run in a project: greenfield seeding, and the
336
343
  brownfield walkthrough whose third step baselines the ratchets at today
337
344
  - `references/conventions.md` — how stages 6–10 read the host project's CLAUDE.md
@@ -21,6 +21,7 @@ approved design — not at code.
21
21
  - Working in an existing codebase
22
22
  - UI detection — a required output
23
23
  - The approved design is a set of decisions — record them
24
+ - User paths are a design output, not a spec detail
24
25
  - GATE (manual)
25
26
  - Rationalizations
26
27
 
@@ -112,10 +113,32 @@ The cost of skipping it is specific: a design approved in conversation and recor
112
113
  only in the spec dies with that spec, and the next run re-opens a question the
113
114
  operator already answered.
114
115
 
116
+ ## User paths are a design output, not a spec detail
117
+
118
+ For anything with a user-facing surface, the design is not done when the components
119
+ are named. Three things come out of **this** stage and feed the stage-3 chain:
120
+
121
+ 1. **The paths** — how a user actually reaches this, start to finish, including the
122
+ route they take when they arrive from somewhere unexpected.
123
+ 2. **The states** — every screen or command has more than the happy one: loading,
124
+ empty, partial, denied, expired, offline. Name them here; naming them in the spec
125
+ means the design was approved without them.
126
+ 3. **The error paths** — what the user sees when it fails, what they can do next, and
127
+ what the system says out loud versus logs quietly.
128
+
129
+ **Why here and not at stage 3.** The spec already locks *Error handling and
130
+ degradation*, and a module dossier already has *Edge and failure cases* — the
131
+ contract layer is not the thin one. What was thin is the conversation: a design
132
+ approved without its error paths is a design whose hardest third is invented later by
133
+ whoever implements it, alone, at stage 5.
134
+
135
+ Feed them into [`spec.md`](spec.md)'s UX track — super-ux turns them into flows,
136
+ screens and traced scenarios. **Do not draft scenario IDs here**; that is the
137
+ chain's job, and two sources for one scenario is worse than one.
138
+
115
139
  ## GATE (manual)
116
140
 
117
- The operator approves the design **and** the UI verdict is recorded **and every REQ
118
- in the brief is answered by the design** — a requirement the design doesn't address
141
+ The operator approves the design, **the UI verdict is recorded**, and — where that verdict is *yes* — **the paths, the states and the error paths are named** (above) rather than deferred to the spec. **Every REQ in the brief is answered by the design** — a requirement the design doesn't address
119
142
  is either covered now or explicitly dropped by the operator, with the drop written
120
143
  into the carry-over ledger. For a platform, the module map
121
144
  ([`decomposition.md`](decomposition.md)) is committed and approved as part of this
@@ -14,6 +14,7 @@ better, plus one that is required only for user-facing work.
14
14
  - The matrix
15
15
  - Optional bridge — substituting an external skill set
16
16
  - Preflight (emit before stage 0)
17
+ - Is this skill itself current?
17
18
  - Credit
18
19
  - Hand-off the other direction
19
20
 
@@ -144,6 +145,39 @@ Rules:
144
145
  - The model answer goes into the brief. Don't ask again per stage
145
146
  (`model-tiering.md` → *Mechanic*).
146
147
 
148
+ ## Is this skill itself current?
149
+
150
+ Preflight's other question, asked once beside the companion block. A pipeline running
151
+ on a stale copy of its own doctrine repeats a class of failure that was already fixed
152
+ upstream — and nothing in a run would ever reveal it.
153
+
154
+ ```bash
155
+ npx --yes sshlg-skills@latest list # what the current release of each member is
156
+ ```
157
+
158
+ Compare it with what is installed. Behind → offer the **launcher**, never the bare
159
+ per-skill form:
160
+
161
+ ```bash
162
+ npx --yes sshlg-skills@latest update
163
+ ```
164
+
165
+ The launcher moves the whole family, updates plugins and agent copies together, and
166
+ prunes the plain `~/.claude/skills/<name>/` copies that otherwise shadow a plugin and
167
+ serve the version they were copied from, forever. A bare `npx skills update <name>`
168
+ re-creates exactly that shadow.
169
+
170
+ **Three staleness signals worth naming**, because none of them is a version number:
171
+
172
+ | Signal | What it means |
173
+ |---|---|
174
+ | A standing instruction that has not fired in five run stamps | the rule was situational; the prune retires it ([`retrospective.md`](retrospective.md)) |
175
+ | A doc map older than the project's last release | the regime was decided for a project that has since changed shape — `setup` offers the entry audit ([`setup.md`](setup.md)) |
176
+ | A ratchet whose count has not moved in months | either the backlog is genuinely frozen, or nobody is looking at the number printed beside every verdict |
177
+
178
+ Recommend once, then continue. **Never a gate** — a run blocked on its own updater is
179
+ a run that cannot ship a fix to the updater.
180
+
147
181
  ## Credit
148
182
 
149
183
  The built-in doctrine is **ported, not depended on**:
@@ -141,6 +141,8 @@ explicit "stop and ask me here":
141
141
  |---|---|
142
142
  | run-wide | the model decision ([`model-tiering.md`](model-tiering.md)); what to decide autonomously vs escalate |
143
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 Setup audit | doc map absent or stale: run the entry audit over the existing documentation before building on it ([`setup.md`](setup.md))? Asked once; a refusal is recorded and never re-asked |
145
+ | run-wide Escalation | cost of being wrong: decide alone while it stays inside the repository and reversible; escalate price, legal posture, promise, money, reputation, irreversible outward acts. Project exceptions? |
144
146
  | 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)) |
145
147
  | 1 Docs | external libs/APIs/SDKs in play; any private ones context7 can't resolve → where their docs live |
146
148
  | 2 Decompose | is this a platform (several capabilities/surfaces) or one module? if platform: deploy cadence — per module or once at the end |
@@ -0,0 +1,127 @@
1
+ # Portability — what travels with the bundle, and what must not
2
+
3
+ **One job: keep every decision about *how the pipeline behaves* inside the bundle, and
4
+ every decision about *what a project decided* inside that project.** Get this backwards
5
+ in either direction and something breaks quietly: a workflow optimisation stranded in
6
+ one repository, or a skill that has quietly learned one project's answers.
7
+
8
+ ## Contents
9
+
10
+ - The boundary
11
+ - The manifest — every workflow decision and its home
12
+ - The two checks, in both directions
13
+ - What a host project is allowed to hold
14
+ - Rationalizations
15
+
16
+ ## The boundary
17
+
18
+ | Kind of decision | Example | Lives in | Travels? |
19
+ |---|---|---|---|
20
+ | **Workflow** — how the pipeline behaves anywhere | the gate types, the loop-guard caps, the Doc Loop's seven steps, the escalation rule, the routing boundary | `references/*.md`, `templates/*`, `pipeline.example.json` | **yes — this is the bundle** |
21
+ | **Project answer** — what *this* repository decided | which register it uses, its propagation matrix, its ratchet floors, its standing instructions | `docs/DOCMAP.md`, the register, `docs/superpowers/retro.md`, the brief | **no — and correctly so** |
22
+
23
+ Two failures follow from confusing them, and they look nothing alike:
24
+
25
+ - **A workflow decision left in a project** is a fork of the doctrine that nobody
26
+ named. The next project starts without it and nobody notices, because the first
27
+ project still works.
28
+ - **A project answer absorbed into the skill** ends project-agnosticism. The bundle
29
+ starts asserting things that are true in one repository and false in the next.
30
+
31
+ **The tell is the question it answers.** *"How does the pipeline behave?"* → bundle.
32
+ *"What did we decide here?"* → project. A rule that would be true in a repository you
33
+ have never seen belongs in the bundle even if you learned it in one.
34
+
35
+ ## The manifest — every workflow decision and its home
36
+
37
+ Every row's home is a path **inside this skill**. A guard checks each one resolves;
38
+ a row pointing outside the bundle is the defect this file exists to catch.
39
+
40
+ | Workflow decision | Home |
41
+ |---|---|
42
+ | The stage list, ids, names, gate types | `pipeline.example.json` |
43
+ | Per-stage criteria, freedom levels, the run checklist | `references/stages.md` |
44
+ | What the intake grill asks, and the autonomy sweep | `references/grill.md` |
45
+ | **The escalation boundary** — what an agent may settle alone | `references/grill.md` |
46
+ | The knowledge harvest and its source ledger | `references/knowledge-sources.md` |
47
+ | The documentation system, the Doc Loop, supersede semantics | `references/documentation.md` |
48
+ | Gate types, the enforcement ladder, degrees of freedom, probing | `references/gates.md` |
49
+ | The Claude Code hook contract | `references/hooks.md` |
50
+ | First run in a project: greenfield and brownfield | `references/adoption.md` |
51
+ | The entry audit and what it inspects | `references/setup.md` |
52
+ | The ladder, seams, axis rotation, ratchets | `references/audit.md` |
53
+ | Loop detection and its caps | `references/loop-guard.md` |
54
+ | The retro: prune, cap, commits, archive | `references/retrospective.md` |
55
+ | Rules earned by failure | `references/learned.md` |
56
+ | **The routing default and its boundary** | `templates/routing-rule.md` |
57
+ | The seeded doc map, registers and gate | `templates/docmap.md`, `templates/decisions.md`, `templates/open-questions.md`, `templates/docgate.sh` |
58
+ | What a stage reads, and which host files bind it | `references/artifacts.md` |
59
+ | The design conversation, its hard gate, UI detection, user paths | `references/brainstorm.md` |
60
+ | Cutting a platform into modules, brick criteria, build order | `references/decomposition.md` |
61
+ | What a spec must lock, the UX-track order, the module dossier | `references/spec.md` |
62
+ | The zero-context plan format, parallel groups, set equality | `references/planning.md` |
63
+ | Workspace isolation, the subagent loop, who may write the register | `references/build.md` |
64
+ | The review rubric, diff packages, the three verdicts | `references/review.md` |
65
+ | The TDD iron law and the suite gate | `references/tdd.md` |
66
+ | The REQ coverage table, evidence rules, the closing question | `references/acceptance.md` |
67
+ | How the host project's own conventions are read | `references/conventions.md` |
68
+ | Which companions exist, what is required, self-currency | `references/companion-skills.md` |
69
+ | The code graph: queries, refresh, the graph↔docs divergence | `references/knowledge-graph.md` |
70
+ | Model policy — tier not id, ask once at preflight | `references/model-tiering.md` |
71
+ | This boundary | `references/portability.md` |
72
+
73
+ **The routing rule is the row worth watching.** A skill's `description` raises the
74
+ odds it is selected and cannot make selection mandatory — only an instruction in a
75
+ `CLAUDE.md` can. That instruction is therefore *installed*, not shipped, which is
76
+ exactly how a workflow decision ends up living outside the bundle. The template above
77
+ is the fix: the rule travels as a file, and [`setup.md`](setup.md) **offers** to
78
+ append it. Offers, not writes — it is the operator's configuration.
79
+
80
+ ## The two checks, in both directions
81
+
82
+ One direction is not enough, for the same reason
83
+ [`learned.md`](learned.md) rule 2 gives: a comparison needs two sides and an absence
84
+ has one.
85
+
86
+ **Outward — does every workflow decision have a home here?** Mechanical: every path
87
+ in the manifest resolves inside the bundle, and no row names a path outside it. Run
88
+ by the validator on every commit. This catches *"we decided it and forgot to put it
89
+ anywhere portable"*.
90
+
91
+ **Inward — is this project holding something universal?** Judgemental, and it is
92
+ [`setup.md`](setup.md)'s job: read the host's `CLAUDE.md`/`AGENTS.md`, its doc map
93
+ and its standing instructions, and ask of each rule — *would this be true in a
94
+ repository I have never seen?* If yes, it is a workflow decision wearing a project's
95
+ clothes, and it should be proposed upstream rather than copied to the next project by
96
+ hand. This catches *"the optimisation lives in one repo and dies there"*.
97
+
98
+ Neither check can be skipped in favour of the other. The outward one is cheap and
99
+ constant; the inward one runs when a project is audited, and it is the only one that
100
+ can find a rule nobody ever wrote down as portable.
101
+
102
+ ## What a host project is allowed to hold
103
+
104
+ Not a restriction — a list of what *should* stay local, so the inward check does not
105
+ flag it:
106
+
107
+ - the answers in `docs/DOCMAP.md`: which register, which homes, which matrix rows;
108
+ - the ratchet **values** — floors are measurements of one repository's history;
109
+ - standing instructions that name this project's paths, commands or people;
110
+ - the deploy target, the test command, the branch policy;
111
+ - everything in `docs/ux/` — this project's users, flows and scenarios.
112
+
113
+ A standing instruction that names **no** path, command or person is a candidate for
114
+ the bundle. That is the cheapest inward test there is, and
115
+ [`retrospective.md`](retrospective.md) already states the rule it serves: a lesson
116
+ true in any repository belongs in the pipeline's own doctrine, not in one project's
117
+ retro.
118
+
119
+ ## Rationalizations
120
+
121
+ | Excuse | Reality |
122
+ |---|---|
123
+ | "It's in our CLAUDE.md, that's good enough" | Good enough for this repository on this machine. The next project starts without it, and nobody notices because this one still works. |
124
+ | "I'll copy the rule into the next project when I get there" | That is the fork, performed by hand, once per project, until two of them disagree and neither is wrong. |
125
+ | "The skill should just learn our conventions" | Then it stops working for anyone else, including you on the next repository. Conventions are answers; the bundle carries questions and procedures. |
126
+ | "This rule is obviously universal, it doesn't need a home" | Every rule is obvious to the person who just learned it. The manifest is one line; the fork is permanent. |
127
+ | "The manifest will go stale" | It is checked, not trusted: every path resolves or the build fails. A stale row is a red build, not a quiet lie. |
@@ -0,0 +1,124 @@
1
+ # Setup — the entry audit, before the first feature
2
+
3
+ **One job: find out what is already wrong with this project's documentation before
4
+ building on top of it.** [`audit.md`](audit.md)'s ladder runs at the *end* of a run,
5
+ over the change. This runs at the *start*, over what is already there — and until
6
+ this file existed, nothing did.
7
+
8
+ **Offered, never imposed.** Stage 0 asks once, when `docs/DOCMAP.md` is absent or its
9
+ regime line is older than the project's last release. The answer — including "no" —
10
+ is recorded in the brief's autonomy sweep and never asked again.
11
+
12
+ ## Contents
13
+
14
+ - When it runs
15
+ - What it inspects
16
+ - The finding shape
17
+ - The output is a fix plan, not a lecture
18
+ - The inward check — what this project holds that belongs upstream
19
+ - The offer to install the routing rule
20
+ - Rationalizations
21
+
22
+ ## When it runs
23
+
24
+ | Situation | What happens |
25
+ |---|---|
26
+ | First run in a repository, no `docs/DOCMAP.md` | [`adoption.md`](adoption.md) seeds; this audit runs against what the seeding found |
27
+ | Existing project, doc map present but stale | offered once at stage 0 |
28
+ | The operator asks for it — `/task-pipeline setup` | runs as the whole task; stages 3–5 produce findings and fixes rather than a feature |
29
+ | Every subsequent run | **not offered again.** The recorded answer stands until the doc map changes |
30
+
31
+ **Never as a recurring tax.** A check that runs before every feature is a check people
32
+ learn to dismiss. Once per project state, then it is the gate's job.
33
+
34
+ ## What it inspects
35
+
36
+ Seven passes, cheapest first. Each either reports `ok`, a finding, or **`skipped —
37
+ <why>`**; a silent pass is indistinguishable from a clean one.
38
+
39
+ 1. **The decision home.** Exactly one, and the doc map names it. Two homes is a fork;
40
+ zero is a project whose decisions live only in commit messages.
41
+ 2. **Register integrity.** Ids unique and never renumbered · status vocabulary closed
42
+ · supersede/contradict targets annotated · no resolved question deleted.
43
+ 3. **Propagation.** Every document named in an entry's `Consequences / affects:` line
44
+ cites that entry — ratcheted, so history is a printed number and not a wall of
45
+ failures ([`adoption.md`](adoption.md) → *Baseline the ratchets*).
46
+ 4. **The matrix.** Every row has a *Checked by* cell — a check, or `review` **with the
47
+ reason no check can decide it**. An empty cell is a finding, not a blank.
48
+ 5. **Terms.** Every term the doc map declares resolves to exactly one definition, and
49
+ the definition's home actually contains it. **Only declared terms are checked** —
50
+ a heuristic over every capitalised word cries wolf, and a gate that cries wolf is
51
+ removed by the third person who hits it ([`gates.md`](gates.md) → *The
52
+ false-positive budget*).
53
+ 6. **The UX chain**, when the project has a user-facing surface: scenarios exist,
54
+ trace to stories and flows, and the linter passes. A project with screens and no
55
+ scenarios is building interface before behaviour.
56
+ 7. **The gate itself.** It exists, it runs, it exits non-zero on a planted defect, and
57
+ its verdict prints its ratchets. **An unproven gate's green is worth nothing** —
58
+ plant one defect and watch it fail before quoting it as evidence.
59
+
60
+ ## The finding shape
61
+
62
+ Every finding carries three things and nothing else:
63
+
64
+ ```
65
+ docs/ARCHITECTURE.md:214 cites DEC-0081 (retired, superseded twice) without saying so
66
+ → add the marker beside the citation, or replace it with the live decision
67
+ seam: L1→L2 (the decision reached the doc and then stopped being true)
68
+ ```
69
+
70
+ `file:line` · the minimal fix · the seam it belongs to. **Ordered by seam, never by
71
+ file** — a file-ordered list reads as noise; a seam-ordered one tells you which layer
72
+ of the project's own process is leaking.
73
+
74
+ ## The output is a fix plan, not a lecture
75
+
76
+ The audit ends with `docs/superpowers/plans/YYYY-MM-DD-doc-audit.md` — the findings
77
+ turned into tasks the pipeline can run, in the order that makes them terminate:
78
+
79
+ 1. everything the gate can enforce **after** the fix, so the class stops recurring;
80
+ 2. the ratchet floors, baselined at today;
81
+ 3. the rest, largest seam first.
82
+
83
+ An audit that hands over a list and no plan is a list somebody will read once.
84
+
85
+ **Nothing is fixed during the audit.** Reading and repairing in one pass is how a
86
+ pass starts finding its own edits ([`audit.md`](audit.md) → *Every pass changes the axis, not the effort*).
87
+
88
+ ## The inward check — what this project holds that belongs upstream
89
+
90
+ The other direction, and the one nobody runs by themselves
91
+ ([`portability.md`](portability.md) → *The two checks*).
92
+
93
+ Read the host's `CLAUDE.md`/`AGENTS.md`, its doc map and its standing instructions,
94
+ and ask of each rule: **would this be true in a repository I have never seen?**
95
+
96
+ - **Names a path, a command, a person, a service** → it is this project's answer.
97
+ Leave it.
98
+ - **Names none of those** → it is a workflow decision wearing a project's clothes.
99
+ Report it, and propose it upstream to the bundle rather than copying it by hand
100
+ into the next project.
101
+
102
+ That hand-copy is the fork: performed once per project, until two of them disagree and
103
+ neither is wrong.
104
+
105
+ ## The offer to install the routing rule
106
+
107
+ If the operator's configuration carries no routing rule, offer to append
108
+ [`../templates/routing-rule.md`](../templates/routing-rule.md) — the version that
109
+ travels with the bundle.
110
+
111
+ **Offer, never write.** It is the operator's configuration, and appending to it
112
+ without asking is the same class of act as pushing to a repository nobody asked you
113
+ to touch. Print the diff, ask once, record the answer.
114
+
115
+ ## Rationalizations
116
+
117
+ | Excuse | Reality |
118
+ |---|---|
119
+ | "The docs are fine, we'd know" | You would know about the contradictions. Absences have one side, and nobody notices a decision that was never written. |
120
+ | "Let's audit after we ship this feature" | Then the feature is built on the part that was wrong, and the audit's first finding is the feature. |
121
+ | "This will take a week" | Seven passes, most of them mechanical, and the ratchet step means you fix nothing today. What takes a week is the fix plan — and that is work you were going to do blind otherwise. |
122
+ | "We'll fix things as we find them" | Then the pass starts finding its own edits and never terminates. Read, then plan, then fix. |
123
+ | "The gate is green, so the docs are good" | The gate proves what it checks. Read its scope header, and plant a defect before quoting its green. |
124
+ | "Our conventions are ours, upstream doesn't need them" | Some of them are, and the inward check leaves those alone. The ones naming no path and no command are the pipeline's, and keeping them local costs you every future project. |
@@ -107,6 +107,12 @@ never that the work was skipped quietly.
107
107
  existing `docs/adr/` *is* the register and is recorded as such, never duplicated.
108
108
  The gate is seeded so that it exits `0` on its own seeds; a project that starts
109
109
  red learns on day one that the gate is noise.
110
+ - **Phase 1b+ — offer the entry audit, once** ([`setup.md`](setup.md)). When
111
+ `docs/DOCMAP.md` is absent or its regime line predates the project's last release,
112
+ ask whether to audit the documentation that already exists **before** building on
113
+ it. Record the answer — including a refusal — in the brief's autonomy sweep and
114
+ never ask again. `audit.md`'s ladder runs at the *end* over the change; this runs
115
+ at the *start* over what is already there.
110
116
  - **Phase 1c — reconcile intent against as-built.** Git says how it *should* be;
111
117
  the run record says how it *turned out*. Read both for the area you are about to
112
118
  touch and resolve every divergence — the document is stale, the record is wrong,
@@ -18,6 +18,7 @@ from `super-ux`.
18
18
  | `open-questions.md` | `docs/OPEN_QUESTIONS.md` | 0 seeds it, the Doc Loop resolves rows |
19
19
  | `docgate.sh` | `scripts/check-docs.sh` | 0 seeds it · 9 runs it · 10 proves it |
20
20
  | `hooks.example.json` | the project's `.claude/settings.json` | 0 — offered, never installed silently |
21
+ | `routing-rule.md` | the operator's `CLAUDE.md` — **offered by `setup`, never written silently** | 0 / `setup` |
21
22
  | `retro.md` | `docs/superpowers/retro.md` — **one per project, not per run** | 10 writes (prune → stamp → entry), 0 reads it in full |
22
23
  | `retro-archive.md` | `docs/superpowers/retro/YYYY-QN.md` | 10 rotates into it, 0 **queries** it |
23
24
 
@@ -9,6 +9,18 @@
9
9
  - **UI verdict:** yes / no — does this touch a user-facing surface (web/mobile/CLI/TUI)?
10
10
  If yes, the stage-3 super-ux UX track is armed.
11
11
 
12
+ ## Contents
13
+
14
+ - Knowledge sources (the phase-1 harvest — written BEFORE the first question)
15
+ - Documentation (the phase-1b inventory — the four questions)
16
+ - Scope
17
+ - Requirements (the REQ spine — every later stage traces to these IDs)
18
+ - Users & context
19
+ - Decisions locked (the grill's output)
20
+ - Autonomy (the sweep — stages 1→10 read this instead of asking)
21
+ - Done-criteria
22
+ - Open assumptions / risks
23
+
12
24
  ## Knowledge sources (the phase-1 harvest — written BEFORE the first question)
13
25
 
14
26
  What the project already knew about this task, and where it said so. One row per
@@ -103,8 +115,10 @@ is not neutral — it is a scheduled interruption.
103
115
  | Stage | Question | Answer |
104
116
  |---|---|---|
105
117
  | run-wide | Model for this run | … (most capable available unless overridden; per-stage overrides here) |
118
+ | run-wide Escalation | … | cost of being wrong: decide alone while it stays inside the repository and reversible; escalate price, legal posture, promise, money, reputation, irreversible outward acts. Project exceptions? |
106
119
  | run-wide | Decide autonomously vs escalate to me | … |
107
120
  | 0 Harvest | Doc sources beyond this repo — other repos, hosted docs, the knowledge wiki, the code graph; and may stage 9 write to them? | … (another repo is outward: propose + PR, never a direct push; graph built / not built) |
121
+ | 0 Setup audit | … (yes / no — recorded either way) | doc map absent or stale: run the entry audit over the existing documentation before building on it (the skill's `references/setup.md`)? Asked once; a refusal is recorded and never re-asked |
108
122
  | 0 Docs regime | Where settled things live (register or ADR set — one home, never both); who may write it; lease mechanism present, or is this run `ungated`? Gate command + ratchet floors; may this run raise a floor? | … |
109
123
  | 1 Docs | External libs/APIs/SDKs in play; any context7 can't resolve → where their docs live | … |
110
124
  | 2 Decompose | Platform (several capabilities/surfaces) or one module? If platform — deploy cadence: per module, or once at the end | … |
@@ -10,6 +10,17 @@ elsewhere — where another file already says it, this one holds a **pointer lin
10
10
  not a copy. A doc map that duplicates `AGENTS.md` is the first violation of the
11
11
  rule it publishes.
12
12
 
13
+ ## Contents
14
+
15
+ - Regime
16
+ - Registers
17
+ - Single source of truth
18
+ - Propagation matrix
19
+ - Gates
20
+ - Ratchets
21
+ - Terms
22
+ - Navigation
23
+
13
24
  ## Regime
14
25
 
15
26
  `governed` — established <YYYY-MM-DD> by run `<topic>`, recorded as `DEC-0001`.
@@ -78,6 +89,21 @@ Raising a floor is a decision and belongs in the register.
78
89
  | Propagation backlog | `PROP_FLOOR` | 0 | <YYYY-MM-DD> |
79
90
  | `<fill me>` | … | … | … |
80
91
 
92
+ ## Terms
93
+
94
+ Only terms **declared here** are checked. A heuristic over every capitalised word
95
+ cries wolf, and a gate that cries wolf is removed by the third person who hits it —
96
+ so this table is the project's own list, and it may start with three rows.
97
+
98
+ | Term | Definition lives in | Anchor |
99
+ |---|---|---|
100
+ | `<Entity>` | `docs/DATA_MODEL.md` | `#entity` |
101
+ | `<fill me>` | `<the one document that defines it>` | `#anchor` |
102
+
103
+ Rules: **one definition per term**, the anchor resolves, and a document that uses the
104
+ term links to that anchor rather than restating it. A term with two definitions is
105
+ the same defect as a fact with two homes.
106
+
81
107
  ## Navigation
82
108
 
83
109
  - One definition per entity, with an explicit anchor.
@@ -0,0 +1,50 @@
1
+ # Routing rule — the portable version
2
+
3
+ **Copy this into the operator's `CLAUDE.md`** (global `~/.claude/CLAUDE.md`, or a
4
+ project's, or both). `setup` **offers** to append it; it never writes to an
5
+ operator's configuration silently.
6
+
7
+ **Why it is a file and not just the skill's description.** A skill's `description`
8
+ raises the odds the model selects it and cannot make selection mandatory — the choice
9
+ stays with the model, case by case. Only an instruction makes routing binding. That
10
+ instruction therefore has to be *installed*, which is exactly how a workflow decision
11
+ ends up living outside the bundle ([`../references/portability.md`](../references/portability.md)).
12
+ Shipping it as a template is what lets it travel.
13
+
14
+ **Keep the exclusions identical** to the skill's `description` and to the
15
+ `should_not_trigger` evaluations. Three copies of one boundary that drift are worse
16
+ than no boundary.
17
+
18
+ ---
19
+
20
+ ## Routing — repo-changing work goes through the pipeline
21
+
22
+ **When `task-pipeline` is installed, any work that CHANGES THE REPOSITORY goes
23
+ through it** — without being asked for. A feature, a fix, a refactor, a migration, an
24
+ integration, a rewrite, an adoption, a hardening pass; in any language and any
25
+ phrasing. Saying *"run this through the pipeline"* is an accelerator, not a
26
+ precondition.
27
+
28
+ **The boundary is "changes the repository", and it cuts both ways.** Not through the
29
+ pipeline:
30
+
31
+ - a question and its answer, an explanation, reading or mapping code;
32
+ - a typo, a one-line edit, a mechanical rename;
33
+ - reconnaissance or measurement that commits nothing.
34
+
35
+ Running ten gated stages for one character is the fastest way to teach an agent to
36
+ route around the pipeline entirely.
37
+
38
+ **The opt-out is "без пайплайна" or "quick".** It applies to a task that *would*
39
+ qualify: do it directly, and **say out loud** that the cycle was skipped at the
40
+ operator's request — never silently.
41
+
42
+ **A borderline case is named, not silently chosen.** *"Clean up the error handling"*
43
+ can be a two-line fix or a day's refactor. State which route you are taking and why,
44
+ in one line.
45
+
46
+ **Escalation while running.** Decide alone while the cost of being wrong stays inside
47
+ the repository and is reversible. Escalate a price, a legal posture, a promise made to
48
+ somebody outside the team, anything that spends money or reputation, any change to
49
+ what a customer's data is used for, and any irreversible outward act. The tell is the
50
+ **cost of being wrong**, not the size of the change.