task-pipeline-skill 1.1.1 → 1.3.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 +114 -0
- package/README.md +42 -0
- package/cursor/rules/task-pipeline.mdc +35 -5
- package/package.json +1 -1
- package/plugins/task-pipeline/.claude-plugin/plugin.json +1 -1
- package/plugins/task-pipeline/commands/task-pipeline.md +1 -1
- package/plugins/task-pipeline/skills/task-pipeline/SKILL.md +4 -1
- package/plugins/task-pipeline/skills/task-pipeline/pipeline.example.json +3 -2
- package/plugins/task-pipeline/skills/task-pipeline/references/audit.md +44 -1
- package/plugins/task-pipeline/skills/task-pipeline/references/companion-skills.md +17 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/conventions.md +6 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/grill.md +54 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/spec.md +15 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/stages.md +17 -2
- package/plugins/task-pipeline/skills/task-pipeline/templates/brief.md +2 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,119 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v1.3.0 — 2026-07-29
|
|
4
|
+
|
|
5
|
+
**One design file, in a named team, decided before anything is drawn.** Left to
|
|
6
|
+
drawing time, "where do I put this?" is answered by whichever agent is holding the
|
|
7
|
+
brush, and the answer is usually *create a new file* — which is how a project
|
|
8
|
+
acquires three files called some variation of "Design", each with real work in it
|
|
9
|
+
and no way to tell which one the team actually opens.
|
|
10
|
+
|
|
11
|
+
The duplicate is **silent by construction**: the second file is internally
|
|
12
|
+
consistent, its frames are named correctly, and the UX linter is green. Nothing
|
|
13
|
+
downstream notices that half the design now lives where nobody looks.
|
|
14
|
+
|
|
15
|
+
### Added — the design destination is a stage-0 decision
|
|
16
|
+
- **New sweep row `3 Design file`** (in both homes — `grill.md`'s table, which the
|
|
17
|
+
grill reads, and `templates/brief.md`, which records the answer): **which
|
|
18
|
+
team/org, by name, and which file.** Three legal answers: the file already
|
|
19
|
+
recorded, a URL the operator supplies, or **creation in that named team,
|
|
20
|
+
explicitly authorized**.
|
|
21
|
+
- **Creation follows the deploy-authorization floor.** *"Create the design file in
|
|
22
|
+
team `Acme Product`"* authorizes one creation in one place; a vague "set up Figma
|
|
23
|
+
for me" authorizes nothing, because deciding *where* on its own is the entire
|
|
24
|
+
failure. `grill.md` → **The design destination** is the new doctrine section.
|
|
25
|
+
- **The team is recorded, not just the file.** A file URL identifies a file; it does
|
|
26
|
+
not say whose workspace it lives in. super-ux runs `whoami` and asks which team
|
|
27
|
+
when there are several — but nothing wrote the answer down, and a design that
|
|
28
|
+
lands in someone's personal drafts is invisible to everyone who needs it.
|
|
29
|
+
- **Two rules that make it stick:** never create while a recorded file resolves;
|
|
30
|
+
and **if the recorded file does not resolve, stop and ask — never create a
|
|
31
|
+
replacement.** "I couldn't open it so I made a new one" is simultaneously the
|
|
32
|
+
duplicate and a hidden permissions problem that a new file does not fix.
|
|
33
|
+
- **Written before the first frame, not after.** A file created and then lost to a
|
|
34
|
+
crashed context is worse than none: it exists, it is empty, nobody knows it is
|
|
35
|
+
there.
|
|
36
|
+
|
|
37
|
+
### Added — the check that catches it mechanically
|
|
38
|
+
- Deep links are `figma.com/design/:fileKey/…`, so **comparing every `screens.md`
|
|
39
|
+
frame link's key against the canonical record is a string match**, not a
|
|
40
|
+
judgement. A differing key *is* a second file. This is now the stage-3 gate and
|
|
41
|
+
the audit ladder's **`→F`** seam; if it ever fires twice, it belongs in the host's
|
|
42
|
+
lint, per the repeats-twice rule.
|
|
43
|
+
|
|
44
|
+
### Changed
|
|
45
|
+
- **Canonical record: `docs/ux/foundation.md` → *Design tooling*** — super-ux owns
|
|
46
|
+
that section, it is per-project and it survives every run, which is exactly what
|
|
47
|
+
"the agents always know which file" requires. The brief holds the **decision and
|
|
48
|
+
the authorization** and points at it; it is a record, **not a second registry**,
|
|
49
|
+
and if the two disagree `foundation.md` wins. On a project with no `docs/ux/` the
|
|
50
|
+
brief is canonical instead, and **stage 9 writes the destination into the host's
|
|
51
|
+
own docs** (`conventions.md`) so the next run finds it without asking.
|
|
52
|
+
- **Creating** a shared design file joins the outward list beside *editing* one —
|
|
53
|
+
it is the stronger of the two, and it is the one that duplicates.
|
|
54
|
+
|
|
55
|
+
### Validator
|
|
56
|
+
- The shipped intake gate must settle the design destination; a config where stage 0
|
|
57
|
+
never names the team or the file now fails. Proven against a planted defect and
|
|
58
|
+
shipped with a CI negative self-test.
|
|
59
|
+
|
|
60
|
+
## v1.2.0 — 2026-07-29
|
|
61
|
+
|
|
62
|
+
The pipeline already knew about Figma — but only second-hand, through super-ux, and
|
|
63
|
+
**every one of its own promises had a Figma-shaped hole**. None of these required it
|
|
64
|
+
to learn Figma; super-ux owns that completely and keeps owning it.
|
|
65
|
+
|
|
66
|
+
### Fixed — four holes in the pipeline's own promises
|
|
67
|
+
- **The sweep never asked about the design surface.** super-ux asks "Figma or
|
|
68
|
+
text-only" once per project and stores the answer — but that first ask lands
|
|
69
|
+
*mid-run*, in the very run the sweep exists to make uninterrupted. Worse: when the
|
|
70
|
+
Figma MCP is absent, super-ux correctly recommends it and then **continues
|
|
71
|
+
text-only on its own, never blocking**. That is a scope change nobody agreed to —
|
|
72
|
+
a UI feature ships "described" instead of "designed" and no gate says so. New sweep
|
|
73
|
+
row **`3 Design surface`**: Figma on or text-only, is the MCP connected, and *if it
|
|
74
|
+
isn't, ship text-only or stop and connect it?*
|
|
75
|
+
- **The single-preflight promise was broken for UI tasks.** `companion-skills.md`
|
|
76
|
+
guarantees ONE block — companions plus the model — so the operator arms the whole
|
|
77
|
+
run in one exchange. The Figma MCP is a companion stage 3 needs, and its check
|
|
78
|
+
happened later, inside the stage. It is now in the matrix and in the preflight
|
|
79
|
+
block, flagged only when the task is user-facing *and* the project designs
|
|
80
|
+
visually (read `docs/ux/foundation.md` → Design tooling first; no record means the
|
|
81
|
+
choice itself is a stage-0 question).
|
|
82
|
+
- **The audit ladder had no rung for the frame.** Added as **`F`** — deliberately
|
|
83
|
+
*conditional and parallel*, not a step in the sequence, so `L0→L7` keeps its
|
|
84
|
+
numbering. A frame is **a second statement of the same surface, made in pictures.**
|
|
85
|
+
super-ux's linter proves a frame link exists, is named `SCR-NN/<Screen>/<state>`
|
|
86
|
+
and isn't stale; **it cannot read the picture.** A frame can pass every lint there
|
|
87
|
+
is while promising a retention window, a credit meter or a pricing tier the spec
|
|
88
|
+
never described and the code never built — a rendered claim about the product,
|
|
89
|
+
seen by more people than the spec, and often the version stakeholders believe.
|
|
90
|
+
Compare frames to frames and they agree; compare specs to specs and they agree;
|
|
91
|
+
the defect lives in the seam. Two new seam questions: **`L2→F`** does the frame
|
|
92
|
+
render what the spec says, and **`F→L7`** did what shipped stay matched to it. The
|
|
93
|
+
spec is the contract — name the document you propose to move instead of quietly
|
|
94
|
+
redrawing.
|
|
95
|
+
- **Editing a shared design file was missing from the outward list.** Frames are
|
|
96
|
+
read by designers and stakeholders; drawing in one is publishing, not local work.
|
|
97
|
+
It now sits beside deploy, publish, repo-create and opening a PR — the list an
|
|
98
|
+
agent actually reads.
|
|
99
|
+
|
|
100
|
+
### Added — validator
|
|
101
|
+
- **Autonomy-sweep drift guard.** The sweep lives twice: `grill.md`'s table is what
|
|
102
|
+
the agent *reads* while interviewing, `templates/brief.md`'s is what it *writes*.
|
|
103
|
+
A row added to one and not the other is a question never asked, or an answer with
|
|
104
|
+
nowhere to land. The validator now compares the stage numbers the two tables cover
|
|
105
|
+
and fails on a difference. Proven against two planted defects (a stage present
|
|
106
|
+
only in the grill; a stage dropped only from the brief) plus an unmodified control,
|
|
107
|
+
and shipped with a CI negative self-test. **Scope, stated honestly: it catches
|
|
108
|
+
stage-level drift, not row-level** — a row added under a stage number both tables
|
|
109
|
+
already mention passes.
|
|
110
|
+
|
|
111
|
+
### Changed
|
|
112
|
+
- The boundary is now written down in both directions: super-ux owns *how* to design
|
|
113
|
+
(the choice, the MCP preflight, frame naming, the drift linter); task-pipeline owns
|
|
114
|
+
*when to ask, what counts as degradation, and how to check afterwards that the
|
|
115
|
+
picture and the product still say the same thing*.
|
|
116
|
+
|
|
3
117
|
## v1.1.1 — 2026-07-29
|
|
4
118
|
|
|
5
119
|
Version bump only — a fresh npm artifact for the v1.1.0 content. **No changes to
|
package/README.md
CHANGED
|
@@ -297,6 +297,20 @@ Bottom-up is not taste: a missing artefact low on the ladder makes everything ab
|
|
|
297
297
|
it meaningless, so top-down you spend the pass polishing a surface for a contract
|
|
298
298
|
that does not exist.
|
|
299
299
|
|
|
300
|
+
**The frame is a rung too, where the project designs visually.** super-ux owns the
|
|
301
|
+
frame completely — the Figma on/off choice, the MCP preflight, the
|
|
302
|
+
`SCR-NN/<Screen>/<state>` naming, and a linter that catches a missing, misnamed or
|
|
303
|
+
stale link. What no linter can check is **what the frame says.** A link can be
|
|
304
|
+
present, correctly named and fresh while the picture behind it promises a retention
|
|
305
|
+
window, a credit meter or a pricing tier the spec never described and the code
|
|
306
|
+
never built — a rendered claim about the product, seen by more people than the
|
|
307
|
+
spec, and often the version stakeholders believe. Compare frames to frames and they
|
|
308
|
+
agree; compare specs to specs and they agree; the defect lives in the seam. So the
|
|
309
|
+
walk adds two questions on UI work: *does the frame render what the spec says*, and
|
|
310
|
+
*does what shipped still match the frame*. The spec is the contract — say which
|
|
311
|
+
document you propose to move, and remember that **editing a shared design file is
|
|
312
|
+
outward**, like a PR or a deploy.
|
|
313
|
+
|
|
300
314
|
Three rules keep the audit from becoming another loop:
|
|
301
315
|
|
|
302
316
|
- **Every pass changes the axis, not the effort.** A searching pass doesn't
|
|
@@ -343,6 +357,34 @@ in their DoD. Scenarios come before interface.
|
|
|
343
357
|
/plugin install super-ux@super-ux
|
|
344
358
|
```
|
|
345
359
|
|
|
360
|
+
**Figma is super-ux's, and the decision about it is stage 0's.** super-ux mirrors
|
|
361
|
+
every `SCR-` screen and state into a frame when the project designs visually, and
|
|
362
|
+
it handles all of it: the on/off choice, the MCP preflight, the naming contract,
|
|
363
|
+
the drift linter. task-pipeline only settles the part that would otherwise
|
|
364
|
+
interrupt a run — *is Figma on, is the MCP connected, and if it isn't, do we ship
|
|
365
|
+
text-only or stop and connect it?* That last clause matters: super-ux recommends
|
|
366
|
+
the MCP and then **continues text-only on its own, never blocking**, so an unasked
|
|
367
|
+
question quietly narrows the delivery from "designed" to "described". The stage-0
|
|
368
|
+
sweep decides it, and the preflight block flags the missing MCP in the same
|
|
369
|
+
exchange as everything else.
|
|
370
|
+
|
|
371
|
+
**One file, in a named team, decided before anything is drawn.** Left to drawing
|
|
372
|
+
time, "where do I put this?" gets answered by whichever agent is holding the brush,
|
|
373
|
+
and the answer is usually *create a new file* — which is how a project acquires
|
|
374
|
+
three files called some variation of "Design", each with real work in it. So the
|
|
375
|
+
sweep settles the **team or organization by name** (a file URL says which file, not
|
|
376
|
+
whose workspace — a design that lands in someone's personal drafts is invisible to
|
|
377
|
+
everyone who needs it) and **the file**: the one already recorded, a URL you supply,
|
|
378
|
+
or creation in that named team, explicitly authorized the same way a deploy target
|
|
379
|
+
is. Two rules make it stick: **never create while a recorded file resolves**, and
|
|
380
|
+
**if the recorded file doesn't resolve, stop and ask — never create a replacement**,
|
|
381
|
+
because "I couldn't open it so I made a new one" is both the duplicate and a hidden
|
|
382
|
+
permissions problem. The URL is written to the project's canonical record —
|
|
383
|
+
`docs/ux/foundation.md` → *Design tooling*, or the repo's own docs when there's no
|
|
384
|
+
UX chain — **before the first frame**, and the audit's `F` rung then checks it
|
|
385
|
+
mechanically: every `screens.md` deep link is `figma.com/design/:fileKey/…`, so a
|
|
386
|
+
key that differs from the recorded one is a second file, caught by a string match.
|
|
387
|
+
|
|
346
388
|
### Model policy — one model, confirmed once
|
|
347
389
|
|
|
348
390
|
The default recommendation is *the most capable reasoning model the environment
|
|
@@ -66,7 +66,22 @@ mid-flight questions:
|
|
|
66
66
|
in play and whether stage 9 may write to them**; UI verdict; base branch, branch policy,
|
|
67
67
|
commit convention, task tracker; the test command and what "green" means; the
|
|
68
68
|
lint command; the deploy target, release toggle and **deploy authorization**;
|
|
69
|
-
where logs/health live; which docs and runbooks this change updates.
|
|
69
|
+
where logs/health live; which docs and runbooks this change updates. For UI
|
|
70
|
+
tasks also: **is the design done visually (Figma) or text-only, is the Figma MCP
|
|
71
|
+
connected, and if it isn't — ship text-only or stop and connect it?** The UX
|
|
72
|
+
chain degrades to text-only on its own and never blocks, so an unasked question
|
|
73
|
+
there silently ships a UI feature with no mockups. **And with Figma on, settle
|
|
74
|
+
the destination here, never at drawing time: which team/org by name, and which
|
|
75
|
+
file** — the one already recorded, a URL the user gives, or *creation in that
|
|
76
|
+
named team, explicitly authorized*. A file URL says which file, not whose
|
|
77
|
+
workspace, and a design that lands in someone's personal drafts is invisible to
|
|
78
|
+
the people who need it. **Never create a file while a recorded one resolves; if
|
|
79
|
+
it doesn't resolve, stop and ask — never create a replacement**, because "I
|
|
80
|
+
couldn't open it so I made a new one" is how a project ends up with three design
|
|
81
|
+
files and hides a permissions problem at the same time. Write the URL into the
|
|
82
|
+
project's own record (`docs/ux/foundation.md` → Design tooling if the UX chain
|
|
83
|
+
exists, otherwise the repo's `CLAUDE.md`/README) **before the first frame** — a
|
|
84
|
+
file created and then lost to a crashed context is worse than none. Each item
|
|
70
85
|
gets an answer or an explicit "stop and ask me here" — an unasked question is a
|
|
71
86
|
scheduled interruption.
|
|
72
87
|
|
|
@@ -167,13 +182,25 @@ not authorize an outward, irreversible action — stage 7 stops and asks.
|
|
|
167
182
|
bottom-up through its rungs — recorded decision → spec section → contract *and
|
|
168
183
|
its failure behavior* → plan task with a satisfiable DoD → the change in the
|
|
169
184
|
tree → an **executed** named assertion → the surface a user reaches, and its
|
|
170
|
-
docs
|
|
185
|
+
docs, **plus, on UI work designed visually, the frame as a second parallel
|
|
186
|
+
statement of the same surface** — checking the seam between each pair: does the
|
|
187
|
+
decision reach the spec;
|
|
171
188
|
does the section say what happens when the contract fails; does every contract
|
|
172
189
|
have a task; did the DoD land in the diff; would that test still pass with the
|
|
173
190
|
production code deleted; can a user reach this and does a doc say so; and
|
|
174
191
|
finally, does what shipped satisfy the requirement's own *statement* rather
|
|
175
|
-
than the task's instructions.
|
|
176
|
-
|
|
192
|
+
than the task's instructions. **And for a frame: does it render what the spec
|
|
193
|
+
says, and does what shipped still match it?** A UX linter proves a frame link
|
|
194
|
+
exists, is named right and isn't stale — it cannot read the picture, so a frame
|
|
195
|
+
promising a retention window, a credit meter or a tier nobody built passes
|
|
196
|
+
every lint there is, while being the version stakeholders believe. The spec is
|
|
197
|
+
the contract: say which document you propose to move, don't quietly redraw, and
|
|
198
|
+
remember that editing a shared design file is outward. **Also check the file,
|
|
199
|
+
not just the frames:** deep links are `figma.com/design/:fileKey/…`, so
|
|
200
|
+
comparing each screen link's key against the recorded destination is a string
|
|
201
|
+
match — a differing key is a second design file with real work in it, and
|
|
202
|
+
nothing else notices, because that file is internally consistent and its frames
|
|
203
|
+
are named correctly. Order findings **by seam, not by file** — the seam tells you which layer of your process leaks. Every absence becomes a new
|
|
177
204
|
REQ row with its check **before** the table is written; appending afterwards is
|
|
178
205
|
how acceptance goes green over a gap. Findings owned by a lower layer go back
|
|
179
206
|
there (spec → stage 3, plan → stage 4).
|
|
@@ -190,7 +217,10 @@ not authorize an outward, irreversible action — stage 7 stops and asks.
|
|
|
190
217
|
Cross-cutting: answer from the brief's autonomy section rather than re-asking, log every deferral in the ledger, never narrow the task silently, track
|
|
191
218
|
tasks, conventional commits, honest degradation (never claim a failed/skipped step
|
|
192
219
|
succeeded), and get explicit go before any outward/irreversible action (deploy,
|
|
193
|
-
publish, repo create
|
|
220
|
+
publish, repo create, **editing a shared design file** — frames are read by
|
|
221
|
+
designers and stakeholders, so drawing in one is publishing, not local work — and
|
|
222
|
+
above all **creating** one, which needs a named team and never happens while a
|
|
223
|
+
recorded file resolves).
|
|
194
224
|
|
|
195
225
|
**Loop guard — break churn instead of iterating.** Every repeating pass (a fix
|
|
196
226
|
round, a re-entered stage, the next module) logs one line per touched file: the
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "task-pipeline-skill",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.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"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "task-pipeline",
|
|
3
3
|
"description": "Runs a substantial task through a mandatory built-in intake grill, then 10 gated stages (docs, brainstorm+decompose, spec, plan, subagent build, tests, lint/deploy, post-deploy, docs/wiki, acceptance). Every stage's doctrine is built into the skill — no companion plugin required — with typed auto/manual gates, a frozen requirement spine that must close with evidence, a loop guard that breaks churn, one provider-agnostic model confirmed up front, and an optional super-ux UX track for user-facing work.",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.3.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "ssheleg"
|
|
7
7
|
},
|
|
@@ -23,7 +23,7 @@ applying the
|
|
|
23
23
|
grill's **domain awareness** (challenge terms against `CONTEXT.md`, sharpen fuzzy
|
|
24
24
|
language, ADRs for hard-to-reverse calls) and covering the **autonomy sweep** (what
|
|
25
25
|
would otherwise stop stages 1→10: docs sources incl. doc repos and the wiki, branch/tracker
|
|
26
|
-
policy, test and lint commands, deploy target and authorization, log locations, docs/wiki targets) —
|
|
26
|
+
policy, test and lint commands, deploy target and authorization, log locations, docs/wiki targets, and for UI tasks whether the design is done visually in Figma or text-only, whether the Figma MCP is connected, and — if it isn't — whether to ship text-only or stop and connect it, since the UX chain degrades on its own and never blocks; **and with Figma on, the design destination: which team/org by name and which file** — the recorded one, a URL the operator gives, or creation in that named team explicitly authorized, written into the project's canonical record before the first frame, because a destination decided at drawing time is how a project ends up with three design files and no way to tell which is real. **Never create while a recorded file resolves; if it doesn't resolve, stop and ask — never create a replacement**) —
|
|
27
27
|
until the brief is locked — including the **REQ table**, the request as an addressable list where every row names how it is verified — so the rest runs autonomously and the final stage can account for all of it. The list is frozen: adding is free, removing needs the operator's agreement. Anything deferred goes into the carry-over ledger the moment it's said. For any user-facing task, recommend/use
|
|
28
28
|
**super-ux**. **If the brief describes a platform rather than a change**, stage 2 also cuts it into modules (`references/decomposition.md`) — module map committed, walking skeleton first, every REQ in exactly one module — and stages 3→10 then run per module, one brick at a time. **If any loop starts undoing an earlier pass** (same file edited twice for the same reason, a closed finding returning, a third entry into one stage), stop and run the loop guard (`references/loop-guard.md`): name both shapes, escalate to the layer that owns the conflict, re-plan the check as an ordered list, then go item by item. **The closing stage opens with the ladder walk** (`references/audit.md`): the REQ table finds what was named and lost, but a comparison needs two sides and an absence has one — so walk each REQ bottom-up through its rungs (decision → spec section → contract *and its failure behavior* → task → change → executed test → surface/docs), check the seam at each step, order findings by seam rather than by file, and turn every absence into a new REQ row **before** the coverage table is written. A green from a check nobody has watched fail against a planted defect is not evidence; a finding class seen twice becomes a script rather than a third ledger row; and the carry-over ledger's counts are printed beside every gate verdict, so "green" never reads as "verified". If a searching pass starts finding mostly what the previous pass's own fixes broke, the axis is exhausted — rotate it, don't look harder. Honor every stage gate by its type (`auto` = verify yourself;
|
|
29
29
|
`manual` = wait for explicit go). Confirm the **model once at preflight** —
|
|
@@ -170,7 +170,10 @@ Three things the grill does beyond clarifying the request:
|
|
|
170
170
|
tracker + conventional commits per host conventions; worktree isolation for the
|
|
171
171
|
build, integrated back per the brief's branch policy before stage 7; honest
|
|
172
172
|
degradation (never claim a failed/skipped step succeeded);
|
|
173
|
-
outward/irreversible actions (deploy, publish, repo create, opening a PR
|
|
173
|
+
outward/irreversible actions (deploy, publish, repo create, opening a PR,
|
|
174
|
+
**editing a shared design file — frames are read by designers and stakeholders,
|
|
175
|
+
so drawing in one is publishing — and above all *creating* one, which needs a
|
|
176
|
+
named team and never happens while a recorded file resolves**) need explicit
|
|
174
177
|
operator go — or a **specific** standing authorization recorded in the brief
|
|
175
178
|
(named target + preconditions; a vague "do everything" is not one).
|
|
176
179
|
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
],
|
|
16
16
|
"gate": {
|
|
17
17
|
"type": "manual",
|
|
18
|
-
"check": "MANDATORY stage — never skipped (only sanctioned bypass: the entry-from-super-ux short-circuit). PHASE 1, before the first question: harvest the knowledge sources (references/knowledge-sources.md) — code, CLAUDE.md/AGENTS.md, CONTEXT.md + docs/adr, docs/ + docs/ux, past pipeline briefs and carry-over ledgers, the knowledge wiki when installed (obsidian-wiki — recommended, never required; detect ~/.obsidian-wiki/config), and any other repo or hosted doc system the project names as its docs — queried by this task's own terms, with the SOURCE LEDGER written into the brief (a row per source consulted, or an explicit 'none found'). PHASE 2, the grill, built into the skill (references/grill.md) — no companion to install. Per its contract: one question at a time, a recommended answer with each, explore the codebase/docs before asking, depth-first, contradictions reconciled; EVERY answer that touches a harvested source is validated against that source — the operator outranks any document, but only out loud, and the losing side is logged for the stage-9 doc update; domain awareness applied (terms challenged against CONTEXT.md, ADRs recorded for hard-to-reverse calls). The autonomy sweep is covered — every stage 1-10 has its blockers pre-resolved (docs sources, branch/tracker policy, test + lint commands, deploy target and authorization, log/health locations, docs+wiki targets) or is explicitly marked 'stop and ask here'. UI verdict recorded (arms super-ux); model decision recorded. All of it locked into a committed task brief the operator confirms before stage 1. The REQ table is written — one row per independently verifiable deliverable, each naming how it is verified — and frozen: adding later is free, removing or narrowing needs the operator's explicit agreement. The carry-over ledger is seeded."
|
|
18
|
+
"check": "MANDATORY stage — never skipped (only sanctioned bypass: the entry-from-super-ux short-circuit). PHASE 1, before the first question: harvest the knowledge sources (references/knowledge-sources.md) — code, CLAUDE.md/AGENTS.md, CONTEXT.md + docs/adr, docs/ + docs/ux, past pipeline briefs and carry-over ledgers, the knowledge wiki when installed (obsidian-wiki — recommended, never required; detect ~/.obsidian-wiki/config), and any other repo or hosted doc system the project names as its docs — queried by this task's own terms, with the SOURCE LEDGER written into the brief (a row per source consulted, or an explicit 'none found'). PHASE 2, the grill, built into the skill (references/grill.md) — no companion to install. Per its contract: one question at a time, a recommended answer with each, explore the codebase/docs before asking, depth-first, contradictions reconciled; EVERY answer that touches a harvested source is validated against that source — the operator outranks any document, but only out loud, and the losing side is logged for the stage-9 doc update; domain awareness applied (terms challenged against CONTEXT.md, ADRs recorded for hard-to-reverse calls). The autonomy sweep is covered — every stage 1-10 has its blockers pre-resolved (docs sources, branch/tracker policy, test + lint commands, deploy target and authorization, log/health locations, docs+wiki targets, and for UI tasks the design surface: Figma on or text-only, is the Figma MCP connected, and if it is not — ship text-only or stop and connect it, since the UX chain degrades on its own and never blocks; plus, with Figma on, the DESIGN DESTINATION — which team/org by name and which file (the recorded one, a URL the operator gives, or creation in that named team with the creation explicitly authorized), written into the project's canonical record before the first frame, and never created while a recorded file resolves — an unreachable recorded file means stop and ask, never make a replacement) or is explicitly marked 'stop and ask here'. UI verdict recorded (arms super-ux); model decision recorded. All of it locked into a committed task brief the operator confirms before stage 1. The REQ table is written — one row per independently verifiable deliverable, each naming how it is verified — and frozen: adding later is free, removing or narrowing needs the operator's explicit agreement. The carry-over ledger is seeded."
|
|
19
19
|
}
|
|
20
20
|
},
|
|
21
21
|
{
|
|
@@ -57,11 +57,12 @@
|
|
|
57
57
|
"super-ux:ux-flows",
|
|
58
58
|
"super-ux:ux-scenarios",
|
|
59
59
|
"super-ux:ux-lint",
|
|
60
|
+
"figma",
|
|
60
61
|
"task-pipeline:spec"
|
|
61
62
|
],
|
|
62
63
|
"gate": {
|
|
63
64
|
"type": "manual",
|
|
64
|
-
"check": "UX track ran FIRST for user-facing tasks (/ux -> ux-foundation CJM -> ux-flows screens -> ux-scenarios -> /ux-lint green); spec committed and user-reviewed; every user-facing requirement traces to a scenario ID. Every spec section carries covers: REQ-... and every REQ appears in at least one section."
|
|
65
|
+
"check": "UX track ran FIRST for user-facing tasks (/ux -> ux-foundation CJM -> ux-flows screens -> ux-scenarios -> /ux-lint green); spec committed and user-reviewed; every user-facing requirement traces to a scenario ID. Every spec section carries covers: REQ-... and every REQ appears in at least one section. With Figma on: the destination the brief named was used — the canonical record (docs/ux/foundation.md -> Design tooling) holds exactly one file, no file was created while a recorded one resolved, and every screens.md frame link carries that same :fileKey (a string match, not a judgement — a differing key means the run drew in a second file nobody will open)."
|
|
65
66
|
}
|
|
66
67
|
},
|
|
67
68
|
{
|
|
@@ -74,6 +74,7 @@ absence findable.
|
|
|
74
74
|
| **L5** | Change | the commits — the thing actually in the tree |
|
|
75
75
|
| **L6** | Test | an **executed** assertion, by name — never "the tests pass" |
|
|
76
76
|
| **L7** | Surface | what a user reaches: scenario, screen state, CLI output, runbook |
|
|
77
|
+
| **F** | Frame — *conditional* | UI work with Figma on: one frame per `SCR-NN/<Screen>/<state>`, **in the one file the project recorded**. Not a step in the sequence — a **second, parallel statement of the same surface**, made in pictures |
|
|
77
78
|
|
|
78
79
|
**Audit the seams, not the artifacts.** Each rung is internally consistent most of
|
|
79
80
|
the time — that is exactly what the horizontal pass is good at, and it has already
|
|
@@ -89,10 +90,49 @@ done it. What survives lives between rungs:
|
|
|
89
90
|
| L5→L6 | is there an executed observable? | "tests pass"; a test that still passes with the production code deleted |
|
|
90
91
|
| L6→L7 | can a user reach it, and does a doc say so? | shipped behavior with no scenario, no `--help` line, no runbook entry |
|
|
91
92
|
| L7→L0 | does the shipped surface satisfy the requirement's **statement**? | it does what the task said and not what the requirement meant |
|
|
93
|
+
| L2→F | *(UI)* does the frame render what the spec **says**? | a frame that promises a capability, limit or number the product does not have |
|
|
94
|
+
| F→L7 | *(UI)* did what shipped match the frame, or did the frame become fiction? | the frame is still the design of record and no longer describes anything that exists |
|
|
95
|
+
| →F | *(UI)* is every frame **in the recorded file**? | a second design file nobody opens, holding real work — the check is a `:fileKey` string match, so it is a gate, not an opinion |
|
|
92
96
|
|
|
93
|
-
The
|
|
97
|
+
The L7→L0 seam is stage 10's question, expressed as a seam. When it fails, the run
|
|
94
98
|
did every instruction correctly and delivered the wrong thing.
|
|
95
99
|
|
|
100
|
+
### The frame is a second claim, and nothing compares it to the first
|
|
101
|
+
|
|
102
|
+
Where the project designs in Figma, **super-ux owns the frame entirely** — the
|
|
103
|
+
on/off choice, the MCP preflight, the `SCR-NN/<Screen>/<state>` naming, and a
|
|
104
|
+
linter that catches a missing link, a broken trace or a stale one. That is a lot,
|
|
105
|
+
and none of it is this file's business.
|
|
106
|
+
|
|
107
|
+
What no linter can check is **what the frame says.** A frame link can be present,
|
|
108
|
+
correctly named, non-stale — and the picture behind it can state a retention
|
|
109
|
+
window, a credit meter, a pricing tier or a button whose promise the spec never
|
|
110
|
+
made and the code never implements. It is a *claim about the product*, rendered,
|
|
111
|
+
usually seen by more people than the spec, and frequently the thing a stakeholder
|
|
112
|
+
believes. Compare frames to frames and they are consistent; compare specs to specs
|
|
113
|
+
and they are consistent; the defect lives in the seam, and only a walk finds it.
|
|
114
|
+
|
|
115
|
+
So on UI work with Figma on, the walk carries one extra step in each direction:
|
|
116
|
+
read the frame against the spec section that covers its `SCR-` id (`L2→F`), then
|
|
117
|
+
against what actually shipped (`F→L7`). A mismatch is a finding like any other —
|
|
118
|
+
and it is usually the **frame** that must change, because the spec is the contract.
|
|
119
|
+
Say which one you are proposing to move, and why, rather than quietly redrawing.
|
|
120
|
+
|
|
121
|
+
**Editing someone else's Figma file is outward.** Frames live in a shared file that
|
|
122
|
+
designers and stakeholders read; changing one is publishing, not local work.
|
|
123
|
+
Propose the change, get an explicit go, and only then draw — the same rule as a PR,
|
|
124
|
+
a deploy, or docs in another repository. **Creating** one is stronger still: it
|
|
125
|
+
needs a named team and an explicit authorization recorded at intake
|
|
126
|
+
([`grill.md`](grill.md) → *The design destination*).
|
|
127
|
+
|
|
128
|
+
**And check the file, not just the frames.** Every deep link is
|
|
129
|
+
`figma.com/design/:fileKey/…`, so comparing each `screens.md` link's key against
|
|
130
|
+
the canonical record (`docs/ux/foundation.md` → *Design tooling*) is a string
|
|
131
|
+
match. A key that differs is a **second file with real work in it** — the failure
|
|
132
|
+
that starts with one agent unable to open the recorded file and quietly making a
|
|
133
|
+
new one. Nothing else in the chain notices: the new file is internally consistent,
|
|
134
|
+
its frames are named correctly, and the linter is green.
|
|
135
|
+
|
|
96
136
|
## How one audit pass runs
|
|
97
137
|
|
|
98
138
|
**Scope: one deliverable, all rungs.** One REQ, one module, one capability. Not
|
|
@@ -222,3 +262,6 @@ a script — and if it cannot be, **that is the finding: write the check.**
|
|
|
222
262
|
| "Findings grouped by file are easier to fix" | And impossible to learn from. Group by seam; the seam names which layer of your process leaks. |
|
|
223
263
|
| "The ledger has it, we won't forget" | Only if it is printed beside every verdict. Unprinted, it is a TODO, and TODOs are invisible by construction. |
|
|
224
264
|
| "This is out of scope for the audit" | Then it is a carry-over row with a home, right now. An audit that silently declines findings is worse than none. |
|
|
265
|
+
| "The UX linter is green, the frames are fine" | It proved the links exist, are named right and aren't stale. It cannot read the picture. A frame that promises a feature nobody built passes every lint there is. |
|
|
266
|
+
| "The frame is wrong, I'll just redraw it" | Editing a shared design file is outward, and the spec is the contract. Say which document you are moving and get the go. |
|
|
267
|
+
| "I couldn't open the recorded file, so I made a new one" | That is the duplicate, and it hides a permissions problem a new file does not fix. Unreachable means stop and ask. |
|
|
@@ -30,6 +30,7 @@ better, plus one that is required only for user-facing work.
|
|
|
30
30
|
|---|---|---|---|
|
|
31
31
|
| **super-ux** (`ux-foundation`, `ux-flows`, `ux-scenarios`, `ux-audit`, `/ux`, `/ux-lint`) | stage 3 UX track | **Required for any user-facing task** | `/plugin marketplace add ssheleg/super-ux` → `/plugin install super-ux@super-ux` (or `npx skills add ssheleg/super-ux`) |
|
|
32
32
|
| **context7** (MCP) | stage 1 docs study | Recommended (web-search fallback) | connect the context7 MCP server |
|
|
33
|
+
| **Figma** (MCP) | stage 3 UX track, when the project designs visually — super-ux mirrors each `SCR-` screen/state into a frame | Optional, **UI + Figma-on only**. Absent → super-ux degrades to text-only *by itself and never blocks*, so shipping a UI feature with no mockups becomes a silent scope call — which is why the stage-0 sweep decides it | connect the Figma MCP server (`/mcp`, or your claude.ai connectors) |
|
|
33
34
|
| **[obsidian-wiki](https://github.com/ar9av/obsidian-wiki)** (`wiki-query`, `wiki-update`) | **stage 0 harvest** (query what's already known) **+ stage 9 sync** | **Recommended** — never a gate; absent → harvest runs on repo docs alone | `pip install obsidian-wiki` → `obsidian-wiki setup --vault /path/to/your/vault` |
|
|
34
35
|
| ~~superpowers~~ | — | **Not a dependency.** Stages 2/4/5/6 run on the built-in doctrine above. See *Optional bridge* | — |
|
|
35
36
|
| ~~grill-me / grilling~~ | — | **Not a dependency.** The stage-0 grill is built in (`references/grill.md`) | — |
|
|
@@ -62,6 +63,11 @@ Pipeline companions (stage doctrine is built in — nothing to install for it):
|
|
|
62
63
|
/plugin marketplace add ssheleg/super-ux
|
|
63
64
|
/plugin install super-ux@super-ux
|
|
64
65
|
✓ context7 — ready
|
|
66
|
+
✗ Figma MCP — this task is user-facing and the project designs in Figma
|
|
67
|
+
(docs/ux/foundation.md → Design tooling). Without it the
|
|
68
|
+
UX chain still runs, text-only — no mockups this run:
|
|
69
|
+
connect the Figma MCP via /mcp
|
|
70
|
+
(say "text-only is fine" and I'll record that instead)
|
|
65
71
|
✗ obsidian-wiki — recommended: stage 0 queries it before grilling you,
|
|
66
72
|
stage 9 syncs back what this run learned:
|
|
67
73
|
pip install obsidian-wiki
|
|
@@ -82,6 +88,17 @@ Rules:
|
|
|
82
88
|
`wiki-query`/`wiki-update`. Present → say `✓ ready` and use it in the harvest.
|
|
83
89
|
Absent → print the two install lines **once** and continue; never ask twice in a
|
|
84
90
|
run and never block a stage on it ([`knowledge-sources.md`](knowledge-sources.md)).
|
|
91
|
+
- **Figma MCP**: flag it only when the task is user-facing **and** the project
|
|
92
|
+
designs visually — read `docs/ux/foundation.md` → *Design tooling* first; no
|
|
93
|
+
record yet means the choice itself is a stage-0 question (super-ux's default is
|
|
94
|
+
on). Detect the official Figma MCP tools; **how** frames get built, named and
|
|
95
|
+
linted is entirely super-ux's — its own `figma-integration.md` and
|
|
96
|
+
`figma-structure.md` own that — while this preflight only decides whether the run
|
|
97
|
+
has the capability
|
|
98
|
+
and, if not, what ships instead. That last part is the point: super-ux recommends
|
|
99
|
+
the MCP and then *continues text-only on its own*, so without a recorded answer
|
|
100
|
+
the run silently narrows from "designed" to "described". The sweep row is
|
|
101
|
+
`3 Design surface` ([`grill.md`](grill.md) → *The autonomy sweep*).
|
|
85
102
|
- **Never gate any stage on an install** except the stage-3 UX track on a UI task.
|
|
86
103
|
- Optional tools missing → state the fallback, don't block.
|
|
87
104
|
- Re-detect after the operator installs; don't assume.
|
|
@@ -38,6 +38,12 @@ found, surface it and **ask** rather than guessing.
|
|
|
38
38
|
proved stale is already listed there with what's wrong.
|
|
39
39
|
- Host self-update rules (module docs, runbooks, agent-self cards, etc.) — update
|
|
40
40
|
in the same change. Fix dangling links.
|
|
41
|
+
- **The design destination, on a project with no `docs/ux/`.** When the work uses
|
|
42
|
+
Figma but super-ux isn't in play, there is no `foundation.md` to hold the file, so
|
|
43
|
+
the brief is canonical — and a brief is per-run. Write the team and the file URL
|
|
44
|
+
into the host's own docs (`CLAUDE.md`, or the README) in this change, so the next
|
|
45
|
+
run reads the destination instead of creating a second file
|
|
46
|
+
([`grill.md`](grill.md) → *The design destination*).
|
|
41
47
|
- **Wiki:** [obsidian-wiki](https://github.com/ar9av/obsidian-wiki) — the
|
|
42
48
|
`wiki-update` skill (resolves the vault via `~/.obsidian-wiki/config`). Detect it
|
|
43
49
|
the same way the harvest does; if absent, recommend it once
|
|
@@ -134,6 +134,8 @@ explicit "stop and ask me here":
|
|
|
134
134
|
| 1 Docs | external libs/APIs/SDKs in play; any private ones context7 can't resolve → where their docs live |
|
|
135
135
|
| 2 Decompose | is this a platform (several capabilities/surfaces) or one module? if platform: deploy cadence — per module or once at the end |
|
|
136
136
|
| 2–3 Spec | UI verdict (arms super-ux); any scenario-tracing waiver |
|
|
137
|
+
| 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 |
|
|
138
|
+
| 3 Design file | Figma on only: **exactly which file, in which team/org** — the recorded one, 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 |
|
|
137
139
|
| 4–5 Dev | base branch; worktree/branch policy; is `main` off-limits; commit convention; task tracker |
|
|
138
140
|
| 5 Integration | how the branch lands (merge / PR + approver / "leave it unmerged"); parallel fan-out wanted (one worktree per implementer)? |
|
|
139
141
|
| 6 Tests | the test command; what "green" means here; known-red baseline; coverage expectation |
|
|
@@ -149,6 +151,58 @@ preconditions ("staging once lint and the full suite are green; production alway
|
|
|
149
151
|
asks"). Specific and recorded → it satisfies the stage-7 manual gate. Broader,
|
|
150
152
|
absent or ambiguous → stage 7 stops and asks.
|
|
151
153
|
|
|
154
|
+
## The design destination — one file, decided here, never invented later
|
|
155
|
+
|
|
156
|
+
When the project designs in Figma, **the destination is a stage-0 decision, not a
|
|
157
|
+
stage-3 side effect.** Left to drawing time, the question "where do I put this?"
|
|
158
|
+
gets answered by whichever agent happens to be holding the brush, and the answer is
|
|
159
|
+
usually *create a new file* — which is how a project acquires three files called
|
|
160
|
+
some variation of "Design", each with real work in it and no way to tell which one
|
|
161
|
+
the team actually opens.
|
|
162
|
+
|
|
163
|
+
**Settle three things, in this order:**
|
|
164
|
+
|
|
165
|
+
1. **Is there already a file?** Read `docs/ux/foundation.md` → *Design tooling*
|
|
166
|
+
first. A recorded, resolving file ends the question — record "use the recorded
|
|
167
|
+
file" and move on. Do not ask the operator something the project already answered.
|
|
168
|
+
2. **Which team / organization**, by name. A file URL identifies a file; it does not
|
|
169
|
+
say whose workspace it lives in, and a design that lands in someone's personal
|
|
170
|
+
drafts instead of the team space is invisible to everyone who needs it. When the
|
|
171
|
+
operator belongs to several teams, the choice is theirs and it gets written down —
|
|
172
|
+
`whoami` tells you which are available, it does not tell you which is right.
|
|
173
|
+
3. **Which file** — an existing URL the operator supplies, or **creation in that
|
|
174
|
+
named team, explicitly authorized.**
|
|
175
|
+
|
|
176
|
+
**Creating a file in a shared workspace is outward and irreversible enough to need a
|
|
177
|
+
named target.** It follows the same floor as deploy authorization above: *"create
|
|
178
|
+
the design file in team `Acme Product`"* authorizes one creation in one place. A
|
|
179
|
+
vague "set up Figma for me" does not — the whole failure this row prevents is an
|
|
180
|
+
agent deciding *where* on its own.
|
|
181
|
+
|
|
182
|
+
**Two rules that make it stick:**
|
|
183
|
+
|
|
184
|
+
- **Never create when a recorded file resolves.** Check before you create, every
|
|
185
|
+
time, in every run.
|
|
186
|
+
- **If the recorded file does not resolve** — deleted, moved, no access — **stop and
|
|
187
|
+
ask. Never create a replacement.** A replacement is exactly the duplicate this
|
|
188
|
+
section exists to prevent, and "I couldn't open it so I made a new one" is how it
|
|
189
|
+
always happens. An unreachable file is usually a permissions problem, which a new
|
|
190
|
+
file does not solve and does hide.
|
|
191
|
+
|
|
192
|
+
**Where it lives, and which copy wins.** `docs/ux/foundation.md` → *Design tooling*
|
|
193
|
+
is **canonical** — super-ux owns that section, it is per-project, and it survives
|
|
194
|
+
every run, which is exactly what "the agents always know which file" requires. The
|
|
195
|
+
brief records the **decision and the authorization** and points at it; it is a
|
|
196
|
+
record, not a second registry. If the two ever disagree, `foundation.md` wins and
|
|
197
|
+
the brief is the thing that was stale. On a project with no `docs/ux/` at all, the
|
|
198
|
+
brief is canonical instead, and **stage 9 writes the destination into the host's own
|
|
199
|
+
docs** (`CLAUDE.md` or the README) so the next run finds it without asking.
|
|
200
|
+
|
|
201
|
+
**Write it down before drawing, not after.** The URL goes into the canonical record
|
|
202
|
+
the moment the file is chosen or created — before the first frame. A file created
|
|
203
|
+
and then lost to a crashed context is worse than no file: it exists, it is empty,
|
|
204
|
+
and nobody knows it is there.
|
|
205
|
+
|
|
152
206
|
## The REQ spine — the grill's other hard output
|
|
153
207
|
|
|
154
208
|
Prose scope is not checkable. Before the brief is confirmed, the grill must turn
|
|
@@ -21,6 +21,14 @@ Runs on **super-ux** — the one companion this pipeline recommends by name
|
|
|
21
21
|
([`companion-skills.md`](companion-skills.md)). If it isn't installed on a UI task,
|
|
22
22
|
give the install line and stop; don't improvise a half-chain.
|
|
23
23
|
|
|
24
|
+
0. **The design destination is already decided — read it, don't re-open it.** When
|
|
25
|
+
Figma is on, the stage-0 brief names the team/org and the file
|
|
26
|
+
([`grill.md`](grill.md) → *The design destination*), and
|
|
27
|
+
`docs/ux/foundation.md` → *Design tooling* is the canonical record. Confirm the
|
|
28
|
+
recorded file **resolves** before any drawing. **Never create a file when a
|
|
29
|
+
recorded one resolves; if it doesn't resolve, stop and ask — never create a
|
|
30
|
+
replacement.** A creation happens at most once per project, in the team the
|
|
31
|
+
brief names, and its URL goes into the canonical record before the first frame.
|
|
24
32
|
1. `/ux` — the single super-ux entry: reports which `docs/ux/` layers exist,
|
|
25
33
|
repairs the skeleton, records the Figma on/off choice, recommends the next
|
|
26
34
|
action. Never make the operator pick skills.
|
|
@@ -141,4 +149,11 @@ designed, validated and approved; `/ux-lint` green; every user-facing requiremen
|
|
|
141
149
|
traced to a scenario ID — or an explicit waiver from the operator recorded in the
|
|
142
150
|
spec.
|
|
143
151
|
|
|
152
|
+
With Figma on, one more, and it is mechanical: **the canonical record names a file,
|
|
153
|
+
and every frame link in `screens.md` carries that same file key.** Deep links are
|
|
154
|
+
`figma.com/design/:fileKey/…`, so this is a string comparison, not a judgement — a
|
|
155
|
+
link whose key differs points at a *second* file, which means the run drew
|
|
156
|
+
somewhere nobody will look. Same check at the audit's `F` rung
|
|
157
|
+
([`audit.md`](audit.md)); if it ever fires twice, it belongs in the host's lint.
|
|
158
|
+
|
|
144
159
|
No plan starts before this gate passes.
|
|
@@ -131,6 +131,13 @@ stages/agents/types (see SKILL.md → *Bring your own skills*).
|
|
|
131
131
|
ssheleg/super-ux` → `/plugin install super-ux@super-ux`, or `npx skills add
|
|
132
132
|
ssheleg/super-ux`). super-ux builds a traced chain — walk it top-down (see its
|
|
133
133
|
`system-map.md`):
|
|
134
|
+
0. **Destination first, when Figma is on.** The brief already names the team/org
|
|
135
|
+
and the file; `docs/ux/foundation.md` → *Design tooling* is the canonical
|
|
136
|
+
record. Confirm it **resolves** before drawing. **Never create a file while a
|
|
137
|
+
recorded one resolves; if it doesn't resolve, stop and ask — never create a
|
|
138
|
+
replacement** (that is the duplicate, and it hides a permissions problem).
|
|
139
|
+
A creation happens at most once, in the named team, and its URL is written to
|
|
140
|
+
the canonical record before the first frame.
|
|
134
141
|
1. `/ux` (the only super-ux entry) — reports which `docs/ux/` layers exist,
|
|
135
142
|
repairs the skeleton, records the Figma on/off choice, recommends the next
|
|
136
143
|
action. Never make the operator pick skills.
|
|
@@ -162,7 +169,10 @@ stages/agents/types (see SKILL.md → *Bring your own skills*).
|
|
|
162
169
|
additionally: the super-ux chain (foundation → flows → screens → scenarios) is
|
|
163
170
|
designed, validated and approved; scenarios validated in `docs/ux/scenarios.md`;
|
|
164
171
|
the linter passes; every user-facing spec requirement traces to a scenario ID
|
|
165
|
-
(or an explicit v1-mode/tiny-project waiver by the operator).
|
|
172
|
+
(or an explicit v1-mode/tiny-project waiver by the operator). **With Figma on:
|
|
173
|
+
the canonical record names one file, and every `screens.md` frame link carries
|
|
174
|
+
that same `:fileKey`** — a string match, not a judgement; a differing key means
|
|
175
|
+
the run drew in a second file nobody will open. No plan (stage 4)
|
|
166
176
|
starts before this — the chain comes BEFORE interface.
|
|
167
177
|
|
|
168
178
|
## 4 — Plan
|
|
@@ -267,7 +277,12 @@ stages/agents/types (see SKILL.md → *Bring your own skills*).
|
|
|
267
277
|
comparison needs two sides and an absence has one. So before the table: walk each
|
|
268
278
|
REQ bottom-up through its rungs (decision → spec section → contract **and its
|
|
269
279
|
failure behavior** → task → change → executed test → surface/docs), check the
|
|
270
|
-
seam at each step, and order the findings **by seam, not by file**.
|
|
280
|
+
seam at each step, and order the findings **by seam, not by file**. On UI work
|
|
281
|
+
designed visually, the frame is a **second, parallel statement of the same
|
|
282
|
+
surface**: read it against the spec section that covers its `SCR-` id and against
|
|
283
|
+
what shipped. The super-ux linter proves a frame link exists, is named right and
|
|
284
|
+
is not stale — it cannot read the picture, so a frame promising a limit, a meter
|
|
285
|
+
or a tier nobody built passes every lint there is. An absence
|
|
271
286
|
becomes a **new REQ row with its check** and *then* the table is written;
|
|
272
287
|
appending after the table is how acceptance goes green over a gap. Findings that
|
|
273
288
|
belong to a lower layer go back to that layer (spec → stage 3, plan → stage 4).
|
|
@@ -83,6 +83,8 @@ is not neutral — it is a scheduled interruption.
|
|
|
83
83
|
| 1 Docs | External libs/APIs/SDKs in play; any context7 can't resolve → where their docs live | … |
|
|
84
84
|
| 2 Decompose | Platform (several capabilities/surfaces) or one module? If platform — deploy cadence: per module, or once at the end | … |
|
|
85
85
|
| 2–3 Spec | UI verdict (arms super-ux); scenario-tracing waiver, if any | … |
|
|
86
|
+
| 3 Design surface | UI only: Figma on or text-only (check `docs/ux/foundation.md` → Design tooling first); Figma MCP connected? **If not — ship text-only, or stop and connect it?** | … (super-ux never blocks on a missing MCP, so an unanswered row here ships the feature without mockups) |
|
|
87
|
+
| 3 Design file | Figma on only: **which team/org + which file** — existing URL, or "create one in team `<name>`" **with creation authorized**. Canonical record: `docs/ux/foundation.md` → Design tooling | … (team: `<name>` · file: `<url>` \| `create in <team>, authorized` — never create when a recorded file resolves) |
|
|
86
88
|
| 4–5 Dev | Base branch; worktree/branch policy; is `main` off-limits; commit convention; task tracker | … |
|
|
87
89
|
| 5 Integration | How the branch lands — direct merge, PR (who approves), or "leave it, I'll merge"; is parallel fan-out (one worktree per implementer) wanted? | … |
|
|
88
90
|
| 6 Tests | Test command; what "green" means; known-red baseline; coverage expectation | … |
|