task-pipeline-skill 1.94.1 → 1.95.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +40 -0
- package/CONTRIBUTING.md +32 -0
- package/HOW-IT-WORKS.md +4 -3
- package/README.md +18 -7
- package/SKILL-CARD.md +2 -2
- package/package.json +1 -1
- package/plugins/task-pipeline/.claude-plugin/plugin.json +1 -1
- package/plugins/task-pipeline/agents/verifier.md +1 -1
- package/plugins/task-pipeline/commands/task-pipeline.md +3 -2
- package/plugins/task-pipeline/hooks/release-gate.sh +1 -1
- package/plugins/task-pipeline/skills/task-pipeline/SKILL.md +11 -9
- package/plugins/task-pipeline/skills/task-pipeline/references/artifacts.md +1 -1
- package/plugins/task-pipeline/skills/task-pipeline/references/brainstorm.md +1 -1
- package/plugins/task-pipeline/skills/task-pipeline/references/browser.md +1 -1
- package/plugins/task-pipeline/skills/task-pipeline/references/certification.md +1 -1
- package/plugins/task-pipeline/skills/task-pipeline/references/companion-skills.md +3 -2
- package/plugins/task-pipeline/skills/task-pipeline/references/continuity.md +3 -1
- package/plugins/task-pipeline/skills/task-pipeline/references/doctrine-map.md +19 -2
- package/plugins/task-pipeline/skills/task-pipeline/references/grill.md +1 -1
- package/plugins/task-pipeline/skills/task-pipeline/references/portability.md +12 -1
- package/plugins/task-pipeline/skills/task-pipeline/references/spec.md +7 -5
- package/plugins/task-pipeline/skills/task-pipeline/references/stage-00-intake.md +158 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/stage-01-docs-study.md +10 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/stage-02-brainstorm.md +52 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/stage-03-spec.md +66 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/stage-04-plan.md +11 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/stage-05-dev.md +55 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/stage-06-tests.md +11 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/stage-07-lint-deploy.md +15 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/stage-08-post-deploy.md +29 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/stage-09-docs-wiki.md +45 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/stage-10-acceptance.md +91 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/stages.md +43 -482
- package/plugins/task-pipeline/skills/task-pipeline/references/verification.md +1 -1
- package/plugins/task-pipeline/skills/task-pipeline/scripts/graph.py +1 -1
- package/plugins/task-pipeline/skills/task-pipeline/scripts/stage_checkpoint.py +156 -33
- package/plugins/task-pipeline/skills/task-pipeline/templates/run.md +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,43 @@
|
|
|
1
|
+
## v1.95.0 — 2026-10-13
|
|
2
|
+
|
|
3
|
+
Source candidate; not published.
|
|
4
|
+
|
|
5
|
+
Guards: 438 → **439**; property checks 15 → **15**.
|
|
6
|
+
|
|
7
|
+
The default stage list keeps every full gate and routes each stage to its own
|
|
8
|
+
procedure before work on entry or resume. Custom profiles keep their own stages
|
|
9
|
+
and doctrine. The split preserves the original stage text and reduces the measured
|
|
10
|
+
entry reading component; it does not claim a native-host or billed-token result.
|
|
11
|
+
Scenario artifacts remain mandatory for user-facing work, while an equivalent
|
|
12
|
+
provider or the documented inline fallback can supply them without installing a
|
|
13
|
+
specific companion plugin. The new route refusal and relocated source checks keep
|
|
14
|
+
these obligations addressable after the split.
|
|
15
|
+
|
|
16
|
+
Checkpoint recovery now follows the selected project profile's declared stage order,
|
|
17
|
+
including custom names and nonconsecutive ids. Malformed or changed profiles refuse
|
|
18
|
+
instead of silently injecting default stages into a saved workflow. Run-local profile
|
|
19
|
+
binding survives record/retry; relocated ledgers can name their project root explicitly.
|
|
20
|
+
This is an offline-tested payload correction, not a live Observatory acceptance claim.
|
|
21
|
+
|
|
22
|
+
Owner release preparation now records an unpublished local annotated tag before the
|
|
23
|
+
complete suite, binds its exact source/context/evidence, and publishes only the
|
|
24
|
+
verified annotation to one destination. The existing release hook recognizes
|
|
25
|
+
explicit tag-destination refspecs. Mechanical evidence does not confer external
|
|
26
|
+
authority, native interception or successful registry publication.
|
|
27
|
+
|
|
28
|
+
Test runners use one safely opened family scratch lock across TMPDIR settings and
|
|
29
|
+
owners, matching their shared fixed scratch paths. The lock now stays held while a
|
|
30
|
+
plant's Bash or its synchronously writing child is alive, even if the runner itself is
|
|
31
|
+
killed; an interrupted runner signals and drains its own process groups before it
|
|
32
|
+
closes its copy, and on macOS a group of exited-but-unreaped members no longer aborts
|
|
33
|
+
that cancellation. An interrupted run no longer leaves its repository snapshot in
|
|
34
|
+
TMPDIR. Existing older runner versions, deliberately detached descendants and direct
|
|
35
|
+
plant invocation remain outside that mechanism.
|
|
36
|
+
|
|
37
|
+
The owner-gate helpers' seam headers declare `diverges: none` with their extraction
|
|
38
|
+
scope on a separate line, so the umbrella's shared-copy check reads them as identical
|
|
39
|
+
to the other members' copies.
|
|
40
|
+
|
|
1
41
|
## v1.94.1 — 2026-10-13
|
|
2
42
|
|
|
3
43
|
Records the missing retrospective declarations that stopped the v1.94.0 release
|
package/CONTRIBUTING.md
CHANGED
|
@@ -51,6 +51,38 @@ To try your change in a real agent:
|
|
|
51
51
|
node bin/task-pipeline.js --force # the same, through the npm installer
|
|
52
52
|
```
|
|
53
53
|
|
|
54
|
+
## Owner release admission
|
|
55
|
+
|
|
56
|
+
For this repository's release, the unpublished annotated candidate tag must exist
|
|
57
|
+
locally on the accepted commit **before** the complete suite runs. A green untagged
|
|
58
|
+
run is insufficient: inspect whether release-stamp checks actually looked.
|
|
59
|
+
`pipeline.json` stage7 and standing instruction R-010 in `docs/evidence/retro.md`
|
|
60
|
+
use this same order; R-004 requires the next operation to depend on gate success.
|
|
61
|
+
|
|
62
|
+
In a standalone full clone of the owning source repository, use the owner-only
|
|
63
|
+
`scripts/release_candidate.py`. Set `candidate_tag` to the chosen unpublished
|
|
64
|
+
version and `actual_project_root` to the same-source project holding the real
|
|
65
|
+
current run context. These are operator/run inputs, not generated approval:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
python3 scripts/release_candidate.py prepare --tag "$candidate_tag" --context-root "$actual_project_root" &&
|
|
69
|
+
python3 scripts/release_candidate.py check --tag "$candidate_tag" &&
|
|
70
|
+
python3 scripts/release_candidate.py publish --tag "$candidate_tag"
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
`prepare` creates and binds the owned local annotation; `check` runs the fixed
|
|
74
|
+
`npm run test:all` with that tag visible and retains its exact evidence.
|
|
75
|
+
`publish` requires faithful bound context, the existing release hook, unchanged
|
|
76
|
+
source/tag/evidence and the verified single destination/ref. The helper does not
|
|
77
|
+
verify external authorization or create a ledger. Without faithful context,
|
|
78
|
+
prepare/check remain usable and publication refuses. Never move a published tag;
|
|
79
|
+
changed or ambiguous state requires read-only reconciliation before another action.
|
|
80
|
+
|
|
81
|
+
Its PUBLISHED state confirms the tag's remote object and peel, not successful npm
|
|
82
|
+
publication. Watch every release job and verify the published payload separately.
|
|
83
|
+
The helper and private Git-directory receipts belong to the owner checkout and
|
|
84
|
+
are not a plugin API or part of the installed skill.
|
|
85
|
+
|
|
54
86
|
## Repository layout
|
|
55
87
|
|
|
56
88
|
| Path | What it is |
|
package/HOW-IT-WORKS.md
CHANGED
|
@@ -65,9 +65,10 @@ because it rots the moment the vendor ships a new one.
|
|
|
65
65
|
|
|
66
66
|
**Companions.** `super-ux`, `copywriting`, `sheleg-design`, `graphify`, the wiki.
|
|
67
67
|
The detection block prints once. A missing companion states its fallback and
|
|
68
|
-
**does not block
|
|
69
|
-
|
|
70
|
-
|
|
68
|
+
**does not block on installation**. For user-facing work, stage 3 requires a valid
|
|
69
|
+
scenario artifact under the [provider rule](plugins/task-pipeline/skills/task-pipeline/references/companion-skills.md).
|
|
70
|
+
Unavailable checks are named as NOT_RUN; a fallback is not evidence that a missing
|
|
71
|
+
tool ran.
|
|
71
72
|
|
|
72
73
|
---
|
|
73
74
|
|
package/README.md
CHANGED
|
@@ -167,9 +167,9 @@ ledgers, so the link is the repository's rather than the package's.
|
|
|
167
167
|
The doctrine each stage runs on ships inside the skill. Nothing to install for it,
|
|
168
168
|
nothing to resolve at preflight, no version skew with someone else's repo, and
|
|
169
169
|
**no stage blocks on an install** — stage 1 falls back to web search, the wiki and
|
|
170
|
-
the code graph are recommendations.
|
|
171
|
-
|
|
172
|
-
|
|
170
|
+
the code graph are recommendations. On user-facing tasks the stage-3 UX gate
|
|
171
|
+
requires a valid scenario artifact. The preferred provider, an equivalent provider
|
|
172
|
+
and the inline fallback satisfy the same [provider contract](plugins/task-pipeline/skills/task-pipeline/references/companion-skills.md).
|
|
173
173
|
|
|
174
174
|
| Stage | Built-in doctrine |
|
|
175
175
|
|---|---|
|
|
@@ -634,8 +634,8 @@ must say so.
|
|
|
634
634
|
### Held to Anthropic's own Skill authoring guidance
|
|
635
635
|
|
|
636
636
|
Audited against the four Agent Skills pages. Most of it already held — `name`
|
|
637
|
-
13/64 chars, `description` 887/1024 chars, `SKILL.md`
|
|
638
|
-
|
|
637
|
+
13/64 chars, `description` 887/1024 chars, `SKILL.md` 272/500 lines, all 52 references
|
|
638
|
+
reachable from `SKILL.md` through explicit reference routes, and the bundle far under the 30 MB ceiling. What
|
|
639
639
|
did not, now does:
|
|
640
640
|
|
|
641
641
|
- **Every reference over 100 lines carries a `## Contents` list**, and the list is
|
|
@@ -971,7 +971,7 @@ skill. Four optional companions make individual stages better:
|
|
|
971
971
|
|
|
972
972
|
| Companion | For | Required? |
|
|
973
973
|
|---|---|---|
|
|
974
|
-
| [super-ux](https://github.com/ssheleg/super-ux) | the stage-3 UX track |
|
|
974
|
+
| [super-ux](https://github.com/ssheleg/super-ux) | the stage-3 UX track | preferred provider; valid scenario artifact required for user-facing tasks |
|
|
975
975
|
| context7 (MCP) | stage-1 docs study | recommended — web-search fallback |
|
|
976
976
|
| [obsidian-wiki](https://github.com/ar9av/obsidian-wiki) | stage-0 harvest + stage-9 sync | recommended — never a gate |
|
|
977
977
|
| [graphify](https://github.com/Graphify-Labs/graphify) | stage-0 reach queries + stage-9 refresh + the graph↔docs divergence check | recommended — never a gate |
|
|
@@ -987,7 +987,18 @@ recommendation, so you arm the whole run in one exchange. Detail:
|
|
|
987
987
|
| File | What's in it |
|
|
988
988
|
|---|---|
|
|
989
989
|
| [`SKILL.md`](plugins/task-pipeline/skills/task-pipeline/SKILL.md) | the orchestrator: how to run, the stage table, the model decision |
|
|
990
|
-
| [`references/stages.md`](plugins/task-pipeline/skills/task-pipeline/references/stages.md) |
|
|
990
|
+
| [`references/stages.md`](plugins/task-pipeline/skills/task-pipeline/references/stages.md) | complete gate criteria and exact per-stage detail routes |
|
|
991
|
+
| [`references/stage-00-intake.md`](plugins/task-pipeline/skills/task-pipeline/references/stage-00-intake.md) | stage 0 procedure, read on entry or resume |
|
|
992
|
+
| [`references/stage-01-docs-study.md`](plugins/task-pipeline/skills/task-pipeline/references/stage-01-docs-study.md) | stage 1 procedure, read on entry or resume |
|
|
993
|
+
| [`references/stage-02-brainstorm.md`](plugins/task-pipeline/skills/task-pipeline/references/stage-02-brainstorm.md) | stage 2 procedure, read on entry or resume |
|
|
994
|
+
| [`references/stage-03-spec.md`](plugins/task-pipeline/skills/task-pipeline/references/stage-03-spec.md) | stage 3 procedure, read on entry or resume |
|
|
995
|
+
| [`references/stage-04-plan.md`](plugins/task-pipeline/skills/task-pipeline/references/stage-04-plan.md) | stage 4 procedure, read on entry or resume |
|
|
996
|
+
| [`references/stage-05-dev.md`](plugins/task-pipeline/skills/task-pipeline/references/stage-05-dev.md) | stage 5 procedure, read on entry or resume |
|
|
997
|
+
| [`references/stage-06-tests.md`](plugins/task-pipeline/skills/task-pipeline/references/stage-06-tests.md) | stage 6 procedure, read on entry or resume |
|
|
998
|
+
| [`references/stage-07-lint-deploy.md`](plugins/task-pipeline/skills/task-pipeline/references/stage-07-lint-deploy.md) | stage 7 procedure, read on entry or resume |
|
|
999
|
+
| [`references/stage-08-post-deploy.md`](plugins/task-pipeline/skills/task-pipeline/references/stage-08-post-deploy.md) | stage 8 procedure, read on entry or resume |
|
|
1000
|
+
| [`references/stage-09-docs-wiki.md`](plugins/task-pipeline/skills/task-pipeline/references/stage-09-docs-wiki.md) | stage 9 procedure, read on entry or resume |
|
|
1001
|
+
| [`references/stage-10-acceptance.md`](plugins/task-pipeline/skills/task-pipeline/references/stage-10-acceptance.md) | stage 10 procedure, read on entry or resume |
|
|
991
1002
|
| [`references/doctrine-map.md`](plugins/task-pipeline/skills/task-pipeline/references/doctrine-map.md) | which reference owns which stage — the map SKILL.md used to carry inline |
|
|
992
1003
|
| [`references/artifacts.md`](plugins/task-pipeline/skills/task-pipeline/references/artifacts.md) | the canonical document layout each stage writes to |
|
|
993
1004
|
| [`references/conventions.md`](plugins/task-pipeline/skills/task-pipeline/references/conventions.md) | how stages 6–10 read the host project's `CLAUDE.md`, and how the documentation regime is detected |
|
package/SKILL-CARD.md
CHANGED
|
@@ -12,9 +12,9 @@ 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.
|
|
15
|
+
| **Version** | 1.95.0 |
|
|
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
|
-
| **Dependencies** | None required. Optional: `context7` (MCP), `figma` (MCP), super-ux, agent-sync, graphify, obsidian-wiki, and **one of two browser channels** — `playwright` (CLI or MCP) or `chrome-devtools` (MCP); either satisfies the browser step and neither is required. Every stage's doctrine ships in-repo;
|
|
17
|
+
| **Dependencies** | None required. Optional: `context7` (MCP), `figma` (MCP), super-ux, agent-sync, graphify, obsidian-wiki, and **one of two browser channels** — `playwright` (CLI or MCP) or `chrome-devtools` (MCP); either satisfies the browser step and neither is required. Every stage's doctrine ships in-repo; user-facing stage 3 requires a valid scenario artifact; super-ux is preferred, with equivalent-provider and inline-fallback paths under the provider contract |
|
|
18
18
|
| **Evaluation status** | Suite authored, 5 categories. One recorded run, **self-observed by the author**; **zero blind runs on zero of three models** — the split, and the numbers, live in [`evals/RESULTS.md`](evals/RESULTS.md) and are computed by `evals/run.py` |
|
|
19
19
|
|
|
20
20
|
## Risk-tier disclosure
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "task-pipeline-skill",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.95.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"
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"name": "task-pipeline",
|
|
4
4
|
"displayName": "Task Pipeline",
|
|
5
5
|
"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/judgment/manual gates, a frozen requirement spine that closes with evidence, a work board and a verification ledger that outlive a run, an exposure line naming what shipped unconfirmed, a progress rail computed from the project's own config, a loop guard whose review ceiling measures rather than stops, and stage-3 tracks for what a product does, how it sounds and how it looks. Two modes need no task: `checkup` (what is unverified) and `setup` (audit existing docs); a third, `waves`, takes the whole board and closes it in waves that each finish in one pass. Retro insights can publish upstream as issues, opt-in and redacted.",
|
|
6
|
-
"version": "1.
|
|
6
|
+
"version": "1.95.0",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "ssheleg",
|
|
9
9
|
"url": "https://x.com/sshlg93"
|
|
@@ -111,6 +111,6 @@ ledger exists to catch.
|
|
|
111
111
|
|
|
112
112
|
## Where the doctrine is
|
|
113
113
|
|
|
114
|
-
`references/
|
|
114
|
+
`references/stage-08-post-deploy.md` for what verification means here;
|
|
115
115
|
`references/verification.md` for the ledger your evidence lands in;
|
|
116
116
|
`references/gates.md` for what a gate's exit code obliges.
|
|
@@ -35,8 +35,9 @@ naming the standard is one an operator can call out for missing it.
|
|
|
35
35
|
- **Model.** Recommend the most capable one the environment offers, never a hardcoded
|
|
36
36
|
id. Confirmed once, then the whole run uses it without re-asking.
|
|
37
37
|
- **Companions.** Print the detection block once (`references/companion-skills.md`).
|
|
38
|
-
Absent ones state their fallback
|
|
39
|
-
user-facing
|
|
38
|
+
Absent ones state their fallback and name any unavailable check as NOT_RUN.
|
|
39
|
+
On user-facing tasks stage 3 gates the valid scenario artifact, not package
|
|
40
|
+
presence; use the provider rule in that reference.
|
|
40
41
|
|
|
41
42
|
## Stage 0 — the harvest, then the grill
|
|
42
43
|
|
|
@@ -118,7 +118,7 @@ def outward(tokens):
|
|
|
118
118
|
if sub == "push":
|
|
119
119
|
if any(a in ("--tags", "--follow-tags") for a in args):
|
|
120
120
|
return "git push --tags"
|
|
121
|
-
if any(a.startswith("refs/tags/") or re.fullmatch(r"v?\d+\.\d+\.\d+.*", a) for a in args):
|
|
121
|
+
if any(a.startswith("refs/tags/") or a.partition(":")[2].startswith("refs/tags/") or re.fullmatch(r"v?\d+\.\d+\.\d+.*", a) for a in args):
|
|
122
122
|
return "git push <tag>"
|
|
123
123
|
if t.endswith("gh") and rest[:2] == ["release", "create"]:
|
|
124
124
|
return "gh release create"
|
|
@@ -59,9 +59,9 @@ the environment resolves.
|
|
|
59
59
|
plugin, nothing to resolve at preflight and no version skew with someone else's
|
|
60
60
|
repo. Stages 1 and 6–9 additionally run the *host's own* commands and optional
|
|
61
61
|
tools, and **no stage blocks on an install** — stage 1 falls back to web search, the
|
|
62
|
-
wiki and the code graph are recommendations.
|
|
63
|
-
|
|
64
|
-
|
|
62
|
+
wiki and the code graph are recommendations. On user-facing tasks stage 3 requires
|
|
63
|
+
a valid scenario artifact; the provider rule below governs equivalent providers
|
|
64
|
+
and the inline fallback.
|
|
65
65
|
|
|
66
66
|
Which reference owns which stage — all forty-odd of them, by stage number:
|
|
67
67
|
[`references/doctrine-map.md`](./references/doctrine-map.md).
|
|
@@ -153,12 +153,12 @@ before drawing, never invented by the drawing agent).
|
|
|
153
153
|
autonomy sweep is covered, **the REQ table is
|
|
154
154
|
written (one row per independently verifiable deliverable, each naming its
|
|
155
155
|
check)** and the brief is locked
|
|
156
|
-
(`references/
|
|
156
|
+
(`references/stage-00-intake.md`). Do not touch stage 1 before the brief is
|
|
157
157
|
committed and confirmed. **Entered from super-ux?**
|
|
158
158
|
(a validated `docs/ux/` chain and/or a `docs/ux/plans/…` fix plan already
|
|
159
159
|
exists — super-ux's `/ux` hands off here) → don't re-grill or rebuild the UX
|
|
160
160
|
chain: just check it's OK (`/ux-lint` green), confirm scope in one line, and
|
|
161
|
-
skip ahead to the first stage with real work (see `references/
|
|
161
|
+
skip ahead to the first stage with real work (see `references/stage-00-intake.md`).
|
|
162
162
|
3. Walk stages 1→10 on the model confirmed at preflight. **Don't re-ask about the
|
|
163
163
|
model at every boundary** — only when the operator recorded a per-stage override
|
|
164
164
|
map and the next stage's entry differs (`references/model-tiering.md`).
|
|
@@ -193,7 +193,7 @@ before drawing, never invented by the drawing agent).
|
|
|
193
193
|
unaccounted (`references/residue.md`). The rest are in
|
|
194
194
|
[`references/gates.md`](references/gates.md) → *Cross-cutting, at every stage*.
|
|
195
195
|
|
|
196
|
-
## Stages (
|
|
196
|
+
## Stages (gates and routes in `references/stages.md`)
|
|
197
197
|
|
|
198
198
|
All stages run on the **one model confirmed at preflight** (default: the most
|
|
199
199
|
capable available — see `references/model-tiering.md`).
|
|
@@ -213,9 +213,11 @@ capable available — see `references/model-tiering.md`).
|
|
|
213
213
|
| 10 | **Acceptance** | the ladder walk ran and its absences became REQ rows; every REQ accounted for with evidence from a check seen failing once; no unresolved ledger row; **every repository clean, pushed and pointed at**; the hand-back written and the environment given back; the retrospective written **last**, and in order | manual |
|
|
214
214
|
|
|
215
215
|
**Every gate above is the short form**, and the long form is the point of
|
|
216
|
-
[`references/stages.md`](references/stages.md) — one
|
|
217
|
-
|
|
218
|
-
|
|
216
|
+
[`references/stages.md`](references/stages.md) — one gate and exact detail route per
|
|
217
|
+
default stage. Before work on entry or resume, read that stage’s routed detail,
|
|
218
|
+
including waves and approved short paths; never preload all details. CUSTOM
|
|
219
|
+
profiles use their own declared doctrine; matching numeric ids do not select
|
|
220
|
+
default details. Full obligations stay in the spine and the selected detail.
|
|
219
221
|
|
|
220
222
|
**Several repositories?** A submodule is finished when its parent says so — a clone
|
|
221
223
|
can still get the commit before it while neither repository looks wrong alone. The
|
|
@@ -201,7 +201,7 @@ plugins/task-pipeline/
|
|
|
201
201
|
audit.md # cross-cutting: the ladder + seams
|
|
202
202
|
loop-guard.md # cross-cutting: churn detection
|
|
203
203
|
progress.md # cross-cutting: what the run prints about itself
|
|
204
|
-
stages.md model-tiering.md
|
|
204
|
+
stages.md stage-*.md model-tiering.md # gates, per-stage detail, model policy
|
|
205
205
|
conventions.md artifacts.md # host conventions, this layout
|
|
206
206
|
companion-skills.md # optional companions + preflight
|
|
207
207
|
templates/ # skeletons seeded into a host project
|
|
@@ -146,7 +146,7 @@ is either covered now or explicitly dropped by the operator, with the drop writt
|
|
|
146
146
|
into the carry-over ledger. For a platform, the module map
|
|
147
147
|
([`decomposition.md`](decomposition.md)) is committed and approved as part of this
|
|
148
148
|
same gate. Two more criteria close it, and the gate of record —
|
|
149
|
-
[`
|
|
149
|
+
[`stage-02-brainstorm.md`](stage-02-brainstorm.md) → *2 — Brainstorm + decompose* — states both in full:
|
|
150
150
|
**the queue is an artifact rather than a recollection** (where it is a work graph,
|
|
151
151
|
`graph.py validate` exits 0 and `graph.py coverage` names any requirement no node
|
|
152
152
|
serves), and **the loop's arming state is printed** — armed with its queue and
|
|
@@ -169,7 +169,7 @@ having read no pixels at all. The **functional look** and the **visual half** ar
|
|
|
169
169
|
checks; neither discharges the other.
|
|
170
170
|
|
|
171
171
|
**When it runs, and when it gates — by the brief's `surface_class`**
|
|
172
|
-
([`
|
|
172
|
+
([`stage-00-intake.md`](stage-00-intake.md) → *0 — Intake grill — MANDATORY*, the surface-class bullet):
|
|
173
173
|
|
|
174
174
|
| Class | Visual half at stages 5–6 | Human pass at stage 10 |
|
|
175
175
|
|---|---|---|
|
|
@@ -84,7 +84,7 @@ tier saw.
|
|
|
84
84
|
| `visual` | the contact sheet, the director record, the project linter's output, the rubric | a frame that contradicts the record's intent; a gate item failing under a PASS; a hole in the state × axes matrix; a judge verdict from an uncalibrated judge |
|
|
85
85
|
|
|
86
86
|
**When it runs.** A node that builds a user-facing surface copies the brief's
|
|
87
|
-
`surface_class` ([`
|
|
87
|
+
`surface_class` ([`stage-00-intake.md`](stage-00-intake.md) → *0 — Intake grill — MANDATORY*, the surface-class bullet). On
|
|
88
88
|
**`flagship` and `product`** the `visual` report is **required** — `graph.py certify`
|
|
89
89
|
refuses the round without it and names the tier. On `internal` and `ad` it is accepted
|
|
90
90
|
when given and counted like any other tier, and not demanded: an internal tool's floor
|
|
@@ -287,7 +287,8 @@ Rules:
|
|
|
287
287
|
nothing: **one self-observed run by the author, zero blind runs on zero models**, with
|
|
288
288
|
a preflight that reported companion availability in detail and its own confidence not
|
|
289
289
|
at all. A skill silent about its own evidence is read as tested.
|
|
290
|
-
- **Never gate any stage on an install
|
|
290
|
+
- **Never gate any stage on an install.** On UI tasks the stage-3 gate requires the
|
|
291
|
+
valid scenario artifact under the provider rule above, not a package.
|
|
291
292
|
- Optional tools missing → state the fallback, don't block.
|
|
292
293
|
- Re-detect after the operator installs; don't assume.
|
|
293
294
|
- The model answer goes into the brief. Don't ask again per stage
|
|
@@ -342,5 +343,5 @@ Both notices live in the repo `LICENSE` → *Third-party*.
|
|
|
342
343
|
## Hand-off the other direction
|
|
343
344
|
|
|
344
345
|
super-ux's `/ux` menu can hand off *to* this pipeline (its "execute autonomously"
|
|
345
|
-
action). When entered that way the UX chain already exists — see `
|
|
346
|
+
action). When entered that way the UX chain already exists — see `stage-00-intake.md`
|
|
346
347
|
*Entry-from-super-ux short-circuit*: verify, don't rebuild.
|
|
@@ -397,7 +397,9 @@ Project Observatory's memory tools, **every gate that returns also writes a work
|
|
|
397
397
|
checkpoint**, and the next executor continues from the last finished stage.
|
|
398
398
|
|
|
399
399
|
- **When.** After the `stage:` line is appended, every time a gate returns, whatever the verdict. A failed gate's checkpoint says `blocked` and keeps the stage open. Acceptance closes the workflow.
|
|
400
|
-
- **How.** `scripts/stage_checkpoint.py emit` prints the tool's arguments, built from the ledger
|
|
400
|
+
- **How.** `scripts/stage_checkpoint.py emit` prints the tool's arguments, built from the ledger and selected project profile: the topic, observed verdicts, next declared stage, operator's constraints and key names. Pass them to `observatory_checkpoint_write`, or to `memory.checkpoint.write` under memory/0.1. Then hand the answer to `stage_checkpoint.py record --answer -`.
|
|
401
|
+
- **Profile authority.** `pipeline.json` at the project root owns stage order; only genuinely absent config selects the bundled default. Unreadable/malformed config, ambiguous numeric ledger ids, unsupported mandatory capabilities or a ledger stage outside the selected profile refuse before producing tool arguments. Optional ids use array ordinals, optional names use stable state labels; explicit ids retain declared array order. This reader does not execute gates or replace full preflight/schema validation. A final skipped stage stays open for confirmation, never inventing a successor or closing by inference.
|
|
402
|
+
- **Root and recovery.** The usual ledger stays `.task-pipeline/run.md`; `paths.artifacts` relocates project documents, not this run state. For a relocated ledger use `emit --ledger <path> --project-root <project>` (an enclosing Git root can also establish the project). The first emit saves the selected profile's source/digest and run identity beside the ledger; record retains them. Same-run profile changes, a missing formerly selected config, or a different run reusing that state refuse. Restore the selected source and retry, or reconcile the old workflow and start a distinct ledger/state for the new run; never delete a lease to make the check green. A pre-existing custom workflow with no profile binding also needs reconciliation. Ledger file symlinks and state-file links refuse without migration or overwrite; accepted directory aliases resolve consistently for emit, record, state and handoff. Profile, ledger and existing state inputs must be regular files, so a FIFO is refused before reading. No live checkpoint or read-attestation is proved by a locally emitted payload.
|
|
401
403
|
- **The constraints.** Give the brief's restrictive rules once, as `--constraint`. They are carried to every later boundary, and a successor reads them first.
|
|
402
404
|
- **Keys.** Pass keys by name, as `--credential PROJECT/ENV/NAME`, never as a value.
|
|
403
405
|
- **Without the tools.** `stage_checkpoint.py record --unavailable "<why>"` appends one `event: memory — unavailable` line, and the run continues exactly as before. Missing memory is a state the ledger names, not a failure. When the tools are absent for the whole run — no Observatory on this machine — say it **once**: `record --unavailable "<why>" --for-run` appends one `unavailable for this run` line and leaves a marker in `.task-pipeline/memory.json`; no later gate is nudged or needs a line. Any later `record --answer` (the tools came back) clears the marker.
|
|
@@ -6,8 +6,9 @@ built-in doctrine lives, so an agent loads the one file the stage needs instead
|
|
|
6
6
|
carrying the whole index in every turn.
|
|
7
7
|
|
|
8
8
|
The rule the table serves stays in `SKILL.md`: every stage's doctrine ships inside this
|
|
9
|
-
skill
|
|
10
|
-
|
|
9
|
+
skill and no stage blocks on an install. The stage-3 UX gate on a user-facing task
|
|
10
|
+
requires a valid scenario artifact; [the provider rule](companion-skills.md) governs
|
|
11
|
+
the preferred provider, equivalent providers and inline fallback.
|
|
11
12
|
|
|
12
13
|
## Contents
|
|
13
14
|
|
|
@@ -15,8 +16,24 @@ UX track on a user-facing task.
|
|
|
15
16
|
|
|
16
17
|
## Which reference owns which stage
|
|
17
18
|
|
|
19
|
+
For the default profile, `references/stages.md` owns the full gates and exact
|
|
20
|
+
on-entry/resume route to each `references/stage-*.md` detail. Read the selected
|
|
21
|
+
stage detail before its work; this table routes additional subject doctrine.
|
|
22
|
+
Custom profiles use their own declared stages and doctrine, with the kernel intact.
|
|
23
|
+
|
|
18
24
|
| Stage | Built-in doctrine |
|
|
19
25
|
|---|---|
|
|
26
|
+
| 0 · Stage procedure | `references/stage-00-intake.md` |
|
|
27
|
+
| 1 · Stage procedure | `references/stage-01-docs-study.md` |
|
|
28
|
+
| 2 · Stage procedure | `references/stage-02-brainstorm.md` |
|
|
29
|
+
| 3 · Stage procedure | `references/stage-03-spec.md` |
|
|
30
|
+
| 4 · Stage procedure | `references/stage-04-plan.md` |
|
|
31
|
+
| 5 · Stage procedure | `references/stage-05-dev.md` |
|
|
32
|
+
| 6 · Stage procedure | `references/stage-06-tests.md` |
|
|
33
|
+
| 7 · Stage procedure | `references/stage-07-lint-deploy.md` |
|
|
34
|
+
| 8 · Stage procedure | `references/stage-08-post-deploy.md` |
|
|
35
|
+
| 9 · Stage procedure | `references/stage-09-docs-wiki.md` |
|
|
36
|
+
| 10 · Stage procedure | `references/stage-10-acceptance.md` |
|
|
20
37
|
| 0, 9 · The documentation system | `references/documentation.md` |
|
|
21
38
|
| any stage · The canons, and where each is enforced | [`evidence-docs`](../../evidence-docs/SKILL.md) — the sibling skill in this plugin |
|
|
22
39
|
| 6–10 · Gates | `references/gates.md` |
|
|
@@ -179,7 +179,7 @@ explicit "stop and ask me here":
|
|
|
179
179
|
| 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)) |
|
|
180
180
|
| 1 Docs | external libs/APIs/SDKs in play; any private ones context7 can't resolve → where their docs live |
|
|
181
181
|
| 2 Decompose | is this a platform (several capabilities/surfaces) or one module? if platform: deploy cadence — per module or once at the end |
|
|
182
|
-
| 2–3 Spec | UI verdict (arms super-ux) **and the surface class** — `flagship`, `product`, `internal` or `ad`, which selects the visual gate profile ([`
|
|
182
|
+
| 2–3 Spec | UI verdict (arms super-ux) **and the surface class** — `flagship`, `product`, `internal` or `ad`, which selects the visual gate profile ([`stage-00-intake.md`](stage-00-intake.md) → *0 — Intake grill — MANDATORY*, the surface-class bullet); any scenario-tracing waiver |
|
|
183
183
|
| 3 Design surface | UI tasks only: **Figma on or text-only** (super-ux's project-level choice, default on — check `docs/ux/foundation.md` → *Design tooling* before asking); is the Figma MCP connected; **and if it isn't — ship text-only, or stop here and connect it?** super-ux degrades to text-only on its own and never blocks, which means an unasked question here silently ships a UI feature with no mockups |
|
|
184
184
|
| 3 Design file | Figma on only: **exactly which files — one per surface (App, Web, ASO) — in which team/org** — the recorded ones, or a URL the operator gives, or *create one in a named team* with that creation explicitly authorized. A destination decided at drawing time is how a project ends up with three "design" files and no way to tell which is real. See *The design destination* below |
|
|
185
185
|
| 4–5 Dev | base branch; worktree/branch policy; is `main` off-limits; commit convention; task tracker |
|
|
@@ -39,8 +39,19 @@ a row pointing outside the bundle is the defect this file exists to catch.
|
|
|
39
39
|
|
|
40
40
|
| Workflow decision | Home |
|
|
41
41
|
|---|---|
|
|
42
|
+
| 0 · Stage procedure | `references/stage-00-intake.md` |
|
|
43
|
+
| 1 · Stage procedure | `references/stage-01-docs-study.md` |
|
|
44
|
+
| 2 · Stage procedure | `references/stage-02-brainstorm.md` |
|
|
45
|
+
| 3 · Stage procedure | `references/stage-03-spec.md` |
|
|
46
|
+
| 4 · Stage procedure | `references/stage-04-plan.md` |
|
|
47
|
+
| 5 · Stage procedure | `references/stage-05-dev.md` |
|
|
48
|
+
| 6 · Stage procedure | `references/stage-06-tests.md` |
|
|
49
|
+
| 7 · Stage procedure | `references/stage-07-lint-deploy.md` |
|
|
50
|
+
| 8 · Stage procedure | `references/stage-08-post-deploy.md` |
|
|
51
|
+
| 9 · Stage procedure | `references/stage-09-docs-wiki.md` |
|
|
52
|
+
| 10 · Stage procedure | `references/stage-10-acceptance.md` |
|
|
42
53
|
| The stage list, ids, names, gate types | `pipeline.example.json` |
|
|
43
|
-
|
|
|
54
|
+
| Full gates, freedom levels, the run checklist and exact stage-detail routes | `references/stages.md` |
|
|
44
55
|
| Which reference owns which stage (the doctrine map) | `references/doctrine-map.md` |
|
|
45
56
|
| What the intake grill asks, and the autonomy sweep | `references/grill.md` |
|
|
46
57
|
| **The escalation boundary** — what an agent may settle alone | `references/grill.md` |
|
|
@@ -28,9 +28,12 @@ spec*.
|
|
|
28
28
|
|
|
29
29
|
## UX track (user-facing tasks only)
|
|
30
30
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
Apply [the artifact-provider contract](companion-skills.md): super-ux is the
|
|
32
|
+
preferred provider; equivalent artifacts or the inline fallback remain valid.
|
|
33
|
+
Missing or invalid scenario artifacts stop the gate, regardless of provider.
|
|
34
|
+
Record each unavailable check by name as NOT_RUN; do not claim a linter ran.
|
|
35
|
+
The following chain describes the super-ux provider when available. Other
|
|
36
|
+
providers owe the same scenario quality and traces, not these package commands.
|
|
34
37
|
|
|
35
38
|
0. **The design destination is already decided — read it, don't re-open it.** When
|
|
36
39
|
Figma is on, the stage-0 brief names the team/org and the files — one per surface
|
|
@@ -94,8 +97,7 @@ green over both.
|
|
|
94
97
|
not checkable; a record is. The track writes a **director record** in the product's
|
|
95
98
|
repository, beside `docs/ux/`: `docs/design/<surface>/director-record.md`, a header
|
|
96
99
|
line `surface_class: <class>` and one `## <Field>` heading per field. Which fields are
|
|
97
|
-
owed is the brief's `surface_class` ([`
|
|
98
|
-
class*):
|
|
100
|
+
owed is the brief's `surface_class` ([`stage-00-intake.md`](stage-00-intake.md) → *0 — Intake grill — MANDATORY*, the surface-class bullet):
|
|
99
101
|
|
|
100
102
|
| Class | Fields the record owes |
|
|
101
103
|
|---|---|
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# Stage 0 detail
|
|
2
|
+
|
|
3
|
+
The full gate and freedom level remain in [stages.md](stages.md).
|
|
4
|
+
|
|
5
|
+
## Contents
|
|
6
|
+
|
|
7
|
+
- 0 — Intake grill — MANDATORY
|
|
8
|
+
|
|
9
|
+
## 0 — Intake grill — MANDATORY
|
|
10
|
+
- **Stage 0 is not optional and not skippable.** There is no "small enough task"
|
|
11
|
+
exemption, no "the request was already clear" exemption, no starting stage 1
|
|
12
|
+
"while the operator thinks". The only sanctioned bypass is the
|
|
13
|
+
entry-from-super-ux short-circuit below, and even that still requires a scope
|
|
14
|
+
confirmation and a record of what was adopted vs skipped. A run that reaches
|
|
15
|
+
stage 1 without a committed, operator-confirmed brief is a **failed run** —
|
|
16
|
+
stop and go back.
|
|
17
|
+
- **Entry-from-super-ux short-circuit (check FIRST).** task-pipeline is often
|
|
18
|
+
launched *from* super-ux — its `/ux` action menu offers "execute autonomously
|
|
19
|
+
via the task-pipeline plugin" once the UX chain (and often a
|
|
20
|
+
`docs/ux/plans/…` fix plan) is already built. Before grilling, detect that:
|
|
21
|
+
if `docs/ux/` already holds a validated chain (foundation → flows → screens →
|
|
22
|
+
scenarios) and/or a fresh fix plan, **do not re-run the grill or the stage-3
|
|
23
|
+
UX track from scratch.** Instead: (1) run a quick check — `/ux-lint`
|
|
24
|
+
(`docs/ux/lint.py`) green, chain present, plan (if any) readable; (2) confirm
|
|
25
|
+
the scope with the operator in ONE line; (3) skip to the first stage that
|
|
26
|
+
still has real work (usually stage 4 Plan if a UX fix plan already exists, or
|
|
27
|
+
stage 3 Spec to formalize it). Record what was adopted vs skipped. If the
|
|
28
|
+
check finds drift/gaps, fall back to the normal flow for the missing parts
|
|
29
|
+
only.
|
|
30
|
+
- **What (normal entry):** the operator's one-line task is almost never enough to
|
|
31
|
+
run autonomously. Before anything else, **grill the operator** to expand that
|
|
32
|
+
one line into a complete, unambiguous brief — resolve every decision branch
|
|
33
|
+
up front so stages 1→10 need no further human input beyond the manual gates.
|
|
34
|
+
This is input expansion, not design: turn "make me feature X" into locked
|
|
35
|
+
answers for scope, users, constraints, data, edge cases, done-criteria.
|
|
36
|
+
- **Phase 1 — harvest the knowledge sources FIRST**
|
|
37
|
+
([`knowledge-sources.md`](knowledge-sources.md)). Before the first question:
|
|
38
|
+
query what the project already knows about this task — code, **the code graph**
|
|
39
|
+
when one is built ([`knowledge-graph.md`](knowledge-graph.md): `graphify query` /
|
|
40
|
+
`affected` / `god-nodes` answer *reach*, which is what grep cannot), `CLAUDE.md`,
|
|
41
|
+
`CONTEXT.md`/ADRs, `docs/` + `docs/ux/`, past pipeline briefs and carry-over
|
|
42
|
+
ledgers, **the retro's standing instructions and run stamps** (`<artifacts>/retro.md`,
|
|
43
|
+
read **in full** — ten standing rows and ten stamps, both bounded **by a cap**, and they bind this
|
|
44
|
+
run; stamp each instruction as it fires. Its *Recent log* is **queried** by the
|
|
45
|
+
task's nouns, not read: uncapped narrative inside a binding source is what makes the
|
|
46
|
+
capped part get skimmed, [`retrospective.md`](retrospective.md)), **lessons from other
|
|
47
|
+
projects** (source 7b, [`knowledge-sources.md`](knowledge-sources.md): `scripts/lessons.py
|
|
48
|
+
query` over the local index, then a shared store where the session lists one — each
|
|
49
|
+
layer's state printed in the source ledger), the **knowledge wiki** if one is
|
|
50
|
+
installed
|
|
51
|
+
([obsidian-wiki](https://github.com/ar9av/obsidian-wiki) — recommended,
|
|
52
|
+
never required), and any **other repo or hosted doc system the project names as
|
|
53
|
+
its docs**. Write the **source ledger** into the brief (a row per source, or an
|
|
54
|
+
explicit "none found"; **the graph's row carries its measured lag — commits and
|
|
55
|
+
days behind `HEAD`, the signal that measured it, and `⚠ not trusted for reach
|
|
56
|
+
until refreshed` on anything but `current`**
|
|
57
|
+
([`knowledge-graph.md`](knowledge-graph.md) → *Measure the lag*; a build date is
|
|
58
|
+
the graph's own reply about itself, not a measurement of it). It is retrieval
|
|
59
|
+
scoped by the task's own nouns, not a read of everything — and it is what makes
|
|
60
|
+
phase 2's answers checkable instead of merely confident.
|
|
61
|
+
- **Phase 1b — the documentation inventory**
|
|
62
|
+
([`documentation.md`](documentation.md)). Four questions, answered before the
|
|
63
|
+
interview and written to `docs/DOCMAP.md` (seeded from
|
|
64
|
+
[`../templates/docmap.md`](../templates/docmap.md), **only when absent**): where
|
|
65
|
+
do settled things live, what is each fact's single home, what does a change of
|
|
66
|
+
type X oblige, and what proves it. A project with no answers gets them seeded —
|
|
67
|
+
registers, the matrix and `scripts/check-docs.sh` — and the seeding is itself
|
|
68
|
+
recorded as the register's first entry. **One decision home per project:** an
|
|
69
|
+
existing `docs/adr/` *is* the register and is recorded as such, never duplicated.
|
|
70
|
+
The gate is seeded so that it exits `0` on its own seeds; a project that starts
|
|
71
|
+
red learns on day one that the gate is noise.
|
|
72
|
+
- **Phase 1b+ — offer the entry audit, once** ([`setup.md`](setup.md)). When
|
|
73
|
+
`docs/DOCMAP.md` is absent or its regime line predates the project's last release,
|
|
74
|
+
ask whether to audit the documentation that already exists **before** building on
|
|
75
|
+
it. Record the answer — including a refusal — in the brief's autonomy sweep and
|
|
76
|
+
never ask again. `audit.md`'s ladder runs at the *end* over the change; this runs
|
|
77
|
+
at the *start* over what is already there.
|
|
78
|
+
- **Phase 1c — reconcile intent against as-built.** Git says how it *should* be;
|
|
79
|
+
the run record says how it *turned out*. Read both for the area you are about to
|
|
80
|
+
touch and resolve every divergence — the document is stale, the record is wrong,
|
|
81
|
+
or they genuinely disagree and that is a decision. There is no fourth option, and
|
|
82
|
+
starting on an unresolved divergence means building against a system that does
|
|
83
|
+
not exist.
|
|
84
|
+
- **Phase 1d — the short-path triage: printed, proposed, never taken silently.** This
|
|
85
|
+
pipeline's own boundary exempts a typo, a one-line fix and a mechanical rename — and
|
|
86
|
+
nothing measured that until 2026-08-10, so the exemption depended on an agent
|
|
87
|
+
remembering it while eleven stages and four manual gates stood in front of a
|
|
88
|
+
one-paragraph edit. Three questions, each with something behind it:
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
1. files the request names, resolved git ls-files -- <paths> -> N
|
|
92
|
+
2. any of them a public contract the surfaces the host's release
|
|
93
|
+
syncs, its schema or config
|
|
94
|
+
contracts, a shipped command,
|
|
95
|
+
its README -> yes/no
|
|
96
|
+
3. behaviour a user or a caller observes changes -> yes/no
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Few files, no contract, no observable change ⇒ **propose** the short path: stages 1,
|
|
100
|
+
2, 3 and 4 marked `⊘` with the triage answer as the reason, and 5→10 running
|
|
101
|
+
unchanged. **Propose, never take.** The answer goes in the brief's autonomy sweep and
|
|
102
|
+
silence takes the full flow — the same floor deploy authorization uses. The glyph is
|
|
103
|
+
what makes it safe: a skipped stage is printed on the rail **with its reason**
|
|
104
|
+
([`progress.md`](progress.md)), and a skip nobody can see is indistinguishable from a
|
|
105
|
+
stage that was never entered.
|
|
106
|
+
- **How it runs: [`grill.md`](grill.md)** — the full doctrine, built into this
|
|
107
|
+
skill (nothing to install). In short: close what the sources can, then ONE batch
|
|
108
|
+
of the material unknowns, ordered by dependency, a recommended answer with each —
|
|
109
|
+
one at a time only where answers depend on each other or the operator asks;
|
|
110
|
+
contradictions reconciled on the spot; **every answer that touches
|
|
111
|
+
a harvested source is checked against it** — the operator outranks any document,
|
|
112
|
+
but only out loud, and the losing side is logged for the stage-9 doc update; plus
|
|
113
|
+
**domain awareness**
|
|
114
|
+
(challenge terms against `CONTEXT.md`, sharpen fuzzy language, stress-test with
|
|
115
|
+
concrete scenarios, cross-reference the code, record ADRs for hard-to-reverse
|
|
116
|
+
calls) and the **autonomy sweep** that pre-resolves every stage-1→10 blocker.
|
|
117
|
+
Deploy authorization has a hard floor there: a standing go counts only when it
|
|
118
|
+
names the target and the preconditions.
|
|
119
|
+
- **The run mode is settled here too** ([`continuity.md`](continuity.md)): does
|
|
120
|
+
the run advance item-by-item with no check-in between items, and on what
|
|
121
|
+
interval? Exactly three sources arm it: `pipeline.json` → `run.loop` (read
|
|
122
|
+
first — a recorded mode is the answer and is not re-asked), the operator's answer
|
|
123
|
+
here, or a standing instruction the host already carries. The ledger names which, once:
|
|
124
|
+
`loop: armed by <source:line>`. **Absent all three, it is off.** It buys pacing, never
|
|
125
|
+
authorization: no loop mode collapses a `manual` gate or an outward act. The
|
|
126
|
+
same file carries the other half of pacing — the context budget, which fires
|
|
127
|
+
only on a harness signal or the operator's word, never on an estimate.
|
|
128
|
+
- **UI early-detect:** one branch of the grill is always "does this touch a
|
|
129
|
+
user-facing surface (web/mobile/CLI/TUI)?". If yes → surface **super-ux**
|
|
130
|
+
now (use it if installed; otherwise give the install line — see SKILL.md
|
|
131
|
+
*Prerequisites*); this arms the stage-3 UX track. **And the same branch records
|
|
132
|
+
the surface's class** — the next bullet.
|
|
133
|
+
- **The surface class.** Every user-facing task's brief carries
|
|
134
|
+
`surface_class: flagship | product | internal | ad`, and the class selects the gate
|
|
135
|
+
profile the visual layer is held to for the rest of the run:
|
|
136
|
+
|
|
137
|
+
| Class | What it is | Director record (stage 3) | Visual half (stages 5–6) | Stage 10 |
|
|
138
|
+
|---|---|---|---|---|
|
|
139
|
+
| `flagship` | the surface a product is judged by — landing, onboarding, paywall, a hero screen | the full record | **gate**: full matrix, pairwise across every axis, the full rubric | approved contact sheet |
|
|
140
|
+
| `product` | an ordinary screen of the product | the short record — Brief, Mode, References, Markers, Open | **gate**: every state and the mandatory pairs; the gate items of the rubric | approved contact sheet |
|
|
141
|
+
| `internal` | an admin panel, an internal tool, a CLI | none owed | recommended; the project linter is the floor | the functional look |
|
|
142
|
+
| `ad` | a creative that runs as an advertisement or a store asset | Brief, Mode, References, Markers, ADA (its rubric profile and safe zones), Open | **gate**: the ad profile and the safe zones | approved contact sheet |
|
|
143
|
+
|
|
144
|
+
Ask it as one question with a recommended answer read off the request — a landing or a
|
|
145
|
+
paywall is `flagship` unless the operator says otherwise — and never leave it to stage
|
|
146
|
+
5: a class decided at build time is decided by whoever wants the build to pass. A
|
|
147
|
+
work-graph node that builds the surface copies the class as `surface_class`, and
|
|
148
|
+
`graph.py certify` then owes the fourth, `visual` reading on `flagship` and `product`
|
|
149
|
+
([`certification.md`](certification.md) → *The fourth reading*).
|
|
150
|
+
- **Artifact:** lock the resolved decisions into a **task brief** committed at
|
|
151
|
+
`<artifacts>/specs/YYYY-MM-DD-<topic>-brief.md` (scope, users/UI verdict and,
|
|
152
|
+
for a user-facing task, `surface_class`, constraints, assumptions, explicitly-deferred items, done-criteria) **plus the
|
|
153
|
+
autonomy sweep's per-stage answers and the model decision**. Seed it from
|
|
154
|
+
the skill's `templates/brief.md` skeleton — but only when absent, never
|
|
155
|
+
overwrite an existing brief. Stages 2–4 build on this brief; stages 5–10 read
|
|
156
|
+
its autonomy section instead of asking. Where the session produced them, also:
|
|
157
|
+
an updated `CONTEXT.md` (terms written as they resolved) and any ADRs under
|
|
158
|
+
`docs/adr/` — see `grill.md` → *Domain awareness*.
|