task-pipeline-skill 1.8.0 → 1.9.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.
@@ -23,6 +23,8 @@ elsewhere and is not restated here:
23
23
 
24
24
  - Axis A — the stage gate type
25
25
  - Axis B — the enforcement mechanism
26
+ - Axis C — degrees of freedom
27
+ - Progressive arming
26
28
  - Before you run a check
27
29
  - Anatomy of a project gate
28
30
  - Writing the check itself
@@ -70,6 +72,53 @@ disprove. Left unwritten, it is indistinguishable from an omission.
70
72
 
71
73
  ---
72
74
 
75
+ ## Axis C — degrees of freedom
76
+
77
+ Axis B says how hard a rule bites. This one says how much latitude the *instruction*
78
+ leaves, and it is a separate choice: a low-freedom instruction guarded by nothing is
79
+ a wish, and a high-freedom instruction behind a blocking hook is a bottleneck.
80
+
81
+ Match the level to how **fragile** the step is, not to how important it feels:
82
+
83
+ | Level | Shape | Use when | Example here |
84
+ |---|---|---|---|
85
+ | **high** | prose direction, no prescribed sequence | many routes reach a good answer and context decides | stage 2 — the design conversation |
86
+ | **medium** | a named order with room inside each step | the sequence is fixed, the content is judgement | stage 0 — two phases, adaptive questions |
87
+ | **low** | run exactly this, in this order, no variation | the operation is fragile, irreversible, or must be identical every time | stage 5's TDD order · stage 7's deploy · stage 9's matrix walk |
88
+
89
+ The picture worth keeping is an **open field versus a narrow bridge**. In the field,
90
+ say where to go and let the agent find the route. On the bridge there is one safe way
91
+ across, and the guardrails are the instruction.
92
+
93
+ **Over-constraining costs as much as under-constraining and is harder to see.** A
94
+ high-freedom step written as low freedom produces an agent that follows the letter
95
+ past the point where the letter stopped fitting — and reports success, because it did
96
+ what it was told. Where a step is genuinely open, say so out loud; that sentence is
97
+ what stops the next reader from hardening it.
98
+
99
+ Every stage in [`stages.md`](stages.md) declares its level and its reason, on the
100
+ line under its heading.
101
+
102
+ ## Progressive arming
103
+
104
+ A gate seeded into a young project has almost nothing to check yet, and a gate that
105
+ starts red teaches everyone on day one that it is noise ([`learned.md`](learned.md)
106
+ rule 9). So each section reports one of four states and only one of them fails:
107
+
108
+ | State | Means | Fails? |
109
+ |---|---|---|
110
+ | `ok` | the check ran and passed | no |
111
+ | `dormant: … — no <artefact> yet` | the input does not exist yet | no |
112
+ | `skip: … — <why>` | the input exists, the check could not run here | no |
113
+ | `ERR` | the check ran and found something | **yes** |
114
+
115
+ `dormant` and `skip` are **printed, never silent** — that is the whole reason they do
116
+ not quietly become permanent.
117
+
118
+ They also force one more obligation on the verdict line: it must report **what the
119
+ run actually looked at**. Every section dormant is indistinguishable from a gate
120
+ blind to the shape in front of it, and exit 0 alone cannot tell those two apart.
121
+
73
122
  ## Before you run a check
74
123
 
75
124
  Four preconditions. Skipping any of them turns a run into a claim.
@@ -125,7 +125,7 @@ and the commit. Silent deletion is forbidden: the record is what survives, the
125
125
  instruction is what leaves.
126
126
 
127
127
  **Print the counts beside the gate verdict**, the same way the carry-over ledger
128
- does ([`audit.md`](audit.md) → *ratchet, never TODO*):
128
+ does ([`audit.md`](audit.md) → *What can't be fixed now becomes a ratchet, never a TODO*):
129
129
 
130
130
  ```
131
131
  GATE 10 acceptance: PASS — 14/14 REQ verified
@@ -182,7 +182,7 @@ exactly the sentence a future reader will hit in the code and re-litigate, so a
182
182
  ruling that outlives the run goes through the **Doc Loop**
183
183
  ([`documentation.md`](documentation.md)) — via the report and the ledger, written by
184
184
  the orchestrator after integration, never by a subagent
185
- ([`build.md`](build.md) → 4.1a*).
185
+ ([`build.md`](build.md) → *4.1a Decisions settled inside a task*).
186
186
 
187
187
  Run the final review on the **run's confirmed model** like everything else
188
188
  ([`model-tiering.md`](model-tiering.md)). It is the one review that sees the whole
@@ -53,7 +53,7 @@ never that the work was skipped quietly.
53
53
  - Cross-cutting — the audit
54
54
 
55
55
  ## 0 — Intake grill — MANDATORY
56
- - **Freedom: medium** — the interview adapts to the answers; its two phases and their order do not ([`gates.md`](gates.md) → *Axis B*).
56
+ - **Freedom: medium** — the interview adapts to the answers; its two phases and their order do not ([`gates.md`](gates.md) → *Axis C*).
57
57
  - **Stage 0 is not optional and not skippable.** There is no "small enough task"
58
58
  exemption, no "the request was already clear" exemption, no starting stage 1
59
59
  "while the operator thinks". The only sanctioned bypass is the
@@ -154,7 +154,7 @@ never that the work was skipped quietly.
154
154
  reversible calls can be deferred with a note). Only then start stage 1.
155
155
 
156
156
  ## 1 — Docs study
157
- - **Freedom: medium** — which sources to fetch is judgement; grounding contracts on fetched docs is not ([`gates.md`](gates.md) → *Axis B*).
157
+ - **Freedom: medium** — which sources to fetch is judgement; grounding contracts on fetched docs is not ([`gates.md`](gates.md) → *Axis C*).
158
158
  - **What:** ground every external library / API / SDK the task touches on the
159
159
  *current* docs, before locking any contract.
160
160
  - **Invoke:** the `context7` MCP — `context7:resolve-library-id` → `context7:query-docs`,
@@ -164,7 +164,7 @@ never that the work was skipped quietly.
164
164
  not recall. Unresolvable libraries are flagged in the spec.
165
165
 
166
166
  ## 2 — Brainstorm + decompose
167
- - **Freedom: high** — many designs are valid — this is the open field, and the only fixed thing is the gate ([`gates.md`](gates.md) → *Axis B*).
167
+ - **Freedom: high** — many designs are valid — this is the open field, and the only fixed thing is the gate ([`gates.md`](gates.md) → *Axis C*).
168
168
  - **How it runs: [`brainstorm.md`](brainstorm.md)** — built into this skill. Read
169
169
  the brief first (stage 0 already answered scope/constraints/done-criteria), then
170
170
  explore the codebase, scope-check for decomposition, one question at a time, 2–3
@@ -194,7 +194,7 @@ never that the work was skipped quietly.
194
194
  contracts named with their owner.
195
195
 
196
196
  ## 3 — Spec — with UX track for user-facing tasks
197
- - **Freedom: medium** — what the contract says is judgement; which contracts must be locked is a list ([`gates.md`](gates.md) → *Axis B*).
197
+ - **Freedom: medium** — what the contract says is judgement; which contracts must be locked is a list ([`gates.md`](gates.md) → *Axis C*).
198
198
  - **How it runs: [`spec.md`](spec.md)** — built into this skill: the UX-track order,
199
199
  what the spec must lock (types, schemas, signatures, file layout, the **Global
200
200
  Constraints** block stages 4–5 depend on), the self-review pass and the operator
@@ -250,7 +250,7 @@ never that the work was skipped quietly.
250
250
  starts before this — the chain comes BEFORE interface.
251
251
 
252
252
  ## 4 — Plan
253
- - **Freedom: low** — the task format is prescribed and the REQ set-comparison is mechanical ([`gates.md`](gates.md) → *Axis B*).
253
+ - **Freedom: low** — the task format is prescribed and the REQ set-comparison is mechanical ([`gates.md`](gates.md) → *Axis C*).
254
254
  - **How it runs: [`planning.md`](planning.md)** — built into this skill →
255
255
  `docs/superpowers/plans/YYYY-MM-DD-<topic>.md` (same slug as the brief and the
256
256
  spec). Zero-context tasks, exact
@@ -269,7 +269,7 @@ never that the work was skipped quietly.
269
269
  same change (super-ux *same-change* rule).
270
270
 
271
271
  ## 5 — Dev
272
- - **Freedom: low** — TDD order, worktree isolation and 'a subagent never writes the register' are the narrow bridge ([`gates.md`](gates.md) → *Axis B*).
272
+ - **Freedom: low** — TDD order, worktree isolation and 'a subagent never writes the register' are the narrow bridge ([`gates.md`](gates.md) → *Axis C*).
273
273
  - **How it runs: [`build.md`](build.md)** — built into this skill: isolate the
274
274
  workspace (native worktree tool first, git fallback, baseline tests), keep a
275
275
  ledger under `.task-pipeline/build/<plan>/` so a compacted context can resume,
@@ -291,7 +291,7 @@ never that the work was skipped quietly.
291
291
  "leave it" recorded).
292
292
 
293
293
  ## 6 — Tests
294
- - **Freedom: low** — green means the full suite, and no skip smuggles a red one past ([`gates.md`](gates.md) → *Axis B*).
294
+ - **Freedom: low** — green means the full suite, and no skip smuggles a red one past ([`gates.md`](gates.md) → *Axis C*).
295
295
  - **What:** consolidate test coverage for the change: confirm new functionality
296
296
  has tests (written test-first in stage 5), update/repair existing tests the
297
297
  change touched, and add edge-case + failure-path tests per DoD.
@@ -305,7 +305,7 @@ never that the work was skipped quietly.
305
305
  ([`audit.md`](audit.md)).
306
306
 
307
307
  ## 7 — Lint + deploy
308
- - **Freedom: low** — outward and irreversible — the authorization floor is exact or the stage stops ([`gates.md`](gates.md) → *Axis B*).
308
+ - **Freedom: low** — outward and irreversible — the authorization floor is exact or the stage stops ([`gates.md`](gates.md) → *Axis C*).
309
309
  - Read host conventions (`conventions.md`): run the linter; fix failures. The suite
310
310
  is already green from stage 6 — re-run it if code changed since. For UI projects,
311
311
  the **super-ux linter** (`python3 docs/ux/lint.py` / `/ux-lint`) is part of lint —
@@ -320,14 +320,14 @@ never that the work was skipped quietly.
320
320
  operator go. Respect deploy-from-main rules if the project mandates them.
321
321
 
322
322
  ## 8 — Post-deploy
323
- - **Freedom: medium** — where the logs live varies; 'clean boot or an honest degradation report' does not ([`gates.md`](gates.md) → *Axis B*).
323
+ - **Freedom: medium** — where the logs live varies; 'clean boot or an honest degradation report' does not ([`gates.md`](gates.md) → *Axis C*).
324
324
  - Tail deploy logs / health-check per conventions. Confirm clean boot, no error
325
325
  spike, live subsystems healthy.
326
326
  - **GATE (auto):** clean boot confirmed, or an **honest degradation report** with next
327
327
  steps — never silent success.
328
328
 
329
329
  ## 9 — Docs + wiki
330
- - **Freedom: low** — the matrix walk and the gate are mechanical; what a doc says is not this stage's call ([`gates.md`](gates.md) → *Axis B*).
330
+ - **Freedom: low** — the matrix walk and the gate are mechanical; what a doc says is not this stage's call ([`gates.md`](gates.md) → *Axis C*).
331
331
  - **The propagation sweep runs first** ([`documentation.md`](documentation.md)).
332
332
  The ledger below names the documents you **read**; the matrix in `docs/DOCMAP.md`
333
333
  names the documents you **owe**. They are not the same list, and the gap between
@@ -381,7 +381,7 @@ never that the work was skipped quietly.
381
381
  carry-over count printed beside this verdict**.
382
382
 
383
383
  ## 10 — Acceptance
384
- - **Freedom: medium** — the walk and the evidence rule are fixed; whether it is what was asked for is the operator's ([`gates.md`](gates.md) → *Axis B*).
384
+ - **Freedom: medium** — the walk and the evidence rule are fixed; whether it is what was asked for is the operator's ([`gates.md`](gates.md) → *Axis C*).
385
385
  - **What:** the closing stage — go back to the brief and account for **every**
386
386
  requirement. Doctrine: [`acceptance.md`](acceptance.md). Every earlier gate asks
387
387
  "is this artifact good?"; none asks "does this still contain everything that was
@@ -37,8 +37,19 @@ MAP_FILE=${MAP_FILE:-$DOCS_DIR/DOCMAP.md}
37
37
  RETRO_GLOB=${RETRO_GLOB:-$DOCS_DIR/superpowers}
38
38
 
39
39
  # ---------- ratchets: a floor may only fall. Raising one is a decision. ----------
40
- PROP_FLOOR=${PROP_FLOOR:-0} # allowed missing propagation citations
41
- RESIDUE_FLOOR=${RESIDUE_FLOOR:-0} # allowed unmarked citations of retired ids
40
+ # THE TWO FLOORS ARE DIFFERENT KINDS. Mixing them up is why this is spelled out.
41
+ #
42
+ # PROP_FLOOR is an ID THRESHOLD, not a count. An entry whose number is >= the floor
43
+ # must have propagated; everything older is a counted backlog that may only shrink.
44
+ # ADOPTING THIS GATE IN AN EXISTING REPOSITORY MEANS SETTING IT TO THE NEXT FREE
45
+ # ID: from today the rule binds, and the history becomes one printed number instead
46
+ # of a thousand failures nobody will fix. Lower it as tranches are cleared.
47
+ PROP_FLOOR=${PROP_FLOOR:-0} # id threshold — entries >= this must propagate
48
+ #
49
+ # RESIDUE_FLOOR is a COUNT: how many unmarked citations of retired decisions are
50
+ # tolerated. On adoption set it to what the repository measurably has today, then
51
+ # only ever lower it.
52
+ RESIDUE_FLOOR=${RESIDUE_FLOOR:-0} # count — tolerated unmarked citations, today's number
42
53
 
43
54
  TMP=$(mktemp -d 2>/dev/null || mktemp -d -t docgate)
44
55
  trap 'rm -rf "$TMP"' EXIT
@@ -82,7 +93,9 @@ find . -maxdepth 1 -type f -name '*.md' 2>/dev/null | sort >> "$TMP/files" || tr
82
93
  FILE_COUNT=$(wc -l < "$TMP/files" | tr -d ' ')
83
94
 
84
95
  if [ "$FILE_COUNT" = "0" ]; then
85
- echo "FAIL: documentation gate — no markdown found under $DOCS_DIR"
96
+ echo "FAIL: documentation gate — no markdown found in $DOCS_DIR/ or the repository root."
97
+ echo " Seed the doc map and the registers first (task-pipeline stage 0, phase 1b),"
98
+ echo " or point DOCS_DIR at wherever this project keeps its documentation."
86
99
  exit 1
87
100
  fi
88
101