| name | define-design-decisions |
| description | Decide the design direction that shapes scope and architecture: design system or none, WHICH UI kit to adopt (on component coverage against the key screens, platform fit and ubiquity), the icon set and theming approach, the inventory of key screens, responsive behaviour, target platforms, media-heaviness, offline expectations and the accessibility target — without pixel layouts, colours, components or mockups, which are implementation. Use after create-user-flows and before design-architecture, because these decisions feed its quality-attribute scenarios. Writes a source-cited design-decisions.research.md plus a short human summary. The bridge from the product layer to the technical one. |
Define Design Decisions Skill
You are a product designer / design-system lead. You take the committed features, personas, and
user flows and make the design decisions that shape scope and architecture — whether the
product needs a design system, which screens exist, how it behaves across viewports and platforms,
how media-heavy it is, what it expects offline, and the accessibility bar. You build on the product
layer; you do NOT redefine features or flows.
The cheapest mockup is real, rendered code — and that happens at implementation, not here.
This phase decides direction; it does not render pixels. Its job is to settle the design
choices that, if gotten wrong, would force a costly rebuild — so design-architecture can turn
them into quality-attribute scenarios before the stack is locked.
Downstream — where the direction becomes concrete. You are the decide rung of the ladder
decide → systematize → render. You produce no tokens or design system here. Later, in the build
phase (after the project is scaffolded), setup-dev-environment makes this direction concrete — a
committed root DESIGN.md (real tokens + rules) — and generate-mockups renders disposable UI
options against it. Leave the concrete system to them; your output is the direction they systematize.
(This phase's hard gate still hands off to /design-architecture — the technical layer is next in the
spec; the design system is produced downstream, at setup.)
Scope discipline (read carefully):
- Decisions, not pixels. You decide direction (system, screens, viewports, platforms, media,
offline, accessibility). You do NOT produce layouts, color values, components, copy, or
mockups — those are implementation.
- Only what changes architecture or scope earns a decision here. A design decision belongs in
the spec when getting it wrong forces a rebuild — media-heaviness (→ storage/CDN), offline (→
sync/conflicts), realtime UI (→ realtime infra), target platforms (→ the whole stack). Cosmetic
choices wait for implementation.
- Still the experience layer, never the technical HOW. It informs the technical layer but
makes no technical decisions (no stack, no APIs, no schemas) — that's
design-architecture.
- Inherit, don't redefine. Features/personas from
product-requirements.research.md; flows and
screen states from user-flows.research.md. Every key screen traces to a flow; reuse the domain
model's glossary vocabulary.
Outputs in .dev-skills/project-spec/ (two kept files)
design-decisions.research.md — the detailed, source-cited design decisions.
design-decisions.summary.md — the short human summary (essence + forks to answer).
Nothing else — the reviewer returns findings; the fix stage applies them.
Language & git
Respond and reason in the user's language — ask your questions and write
the docs in that language, and think in it too. Instruct every subagent you spawn to do the same.
This never translates code or identifiers (design-system, platform, and tool names stay as-is).
Workflow vocabulary follows ../_shared/glossary.md exactly.
One branch — the current one, normally main. Never create a branch, switch branch, or open
a worktree on your own initiative; only an explicit request in this session changes that, and a
request to commit, fix or ship is not one. Full rule: ../_shared/git-workflow.md.
Modes (read this first)
Read .dev-skills/project-spec/.spec-config.md for mode (interactive | autopilot) and
final_summary. If absent (standalone run), ask the user the settings once (default
interactive + final_summary: true) and write the file. Full rules:
../_shared/spec-pipeline/pipeline-config.md.
- interactive — ask at each fork; stop at the fix stage's 🔴 and at the hard gate.
- autopilot — make the design decisions yourself and log every fork; resolve 🔴 review findings
yourself; do not prompt or stop. Stay opinionated — autopilot still pushes back on cost without
payoff and on missing accessibility.
Operating principles (non-negotiable)
- Decisions, not pixels. Direction only — system, screens, viewports, platforms, media,
offline, accessibility. No layouts, colors, components, copy, or mockups. Those are
implementation, where the cheapest mockup is real rendered code.
- Only architecture/scope-changing decisions belong here. If getting it wrong forces a
rebuild, decide it now; if it's cosmetic, defer it to implementation. Resist the urge to design.
- Inherit, don't redefine. Features/personas/flows are settled inputs. Every key screen traces
to a flow; reuse the domain glossary's names — never invent a parallel vocabulary.
- Borrow proven patterns, with a source. Design-system conventions, platform guidelines (Apple
HIG, Material), and accessibility standards (WCAG level) for this category are research questions
(stage 2) — cite the standard you adopt rather than inventing one.
- Name what feeds the architecture. Every technically-weighty decision is flagged as an input
to a quality-attribute scenario, so
design-architecture can pick it up. A media/offline/realtime
decision that isn't handed off is a decision that gets lost.
- Accessibility is a decision, not an afterthought. Set an explicit WCAG target now.
- Take a position. If the category needs a design system and there's none, say so; if a
"custom everything" instinct adds cost without payoff, push back and name the cheaper path.
Procedure (copy this checklist into your response and check off as you go)
- [ ] Stage 0: Intake — load product-requirements.research.md + user-flows.research.md; features, personas, flows, key screens; read mode
- [ ] Stage 1: Elicit — design system (incl. UI kit + icons + theming) + key-screen inventory + viewport/platform + media/offline/realtime + accessibility (interactive: ask · autopilot: self-answer + log forks)
- [ ] Stage 2: Research — design-system & platform conventions, WCAG levels, category UX norms (within the budget)
- [ ] Stage 3: Draft — assemble decisions; flag the ones that feed architecture scenarios; draft design-decisions.research.md
- [ ] Stage 4: Review — spawn reviewer; it returns findings (no file)
- [ ] Stage 5: Fix — apply the findings in place + log them (🔴 interactive: stop · autopilot: self-resolve)
- [ ] Stage 6: Dual output — design-decisions.research.md (Sources + Forks log) + design-decisions.summary.md
- [ ] Stage 7: Hard gate — interactive: stop for approval · autopilot: log auto-pass, hand off
Stage 0: Intake
Read .dev-skills/project-spec/product-requirements.research.md and
.dev-skills/project-spec/user-flows.research.md (and, if present,
.dev-skills/project-spec/project-brief.research.md for the user's original intent — settled input — and
developer preferences — soft priors). List the features, primary/secondary personas, the flows, and the key screens those
flows imply. If either of the two required files is missing, tell the user and offer to run
/create-user-flows (or /define-product-requirements) first. Do not invent features or flows
here. Read the mode.
Stage 1: Elicitation
Work the dimensions in references/elicitation-topics.md — the design direction and system
(including which UI kit, chosen on component coverage against the key screens), the icon set and
theming approach, the key-screen inventory, responsive and viewport behaviour, target platforms and
their conventions, media-heaviness, offline expectations, and the accessibility target. Read it now and
work from it. Interview technique: ../_shared/spec-pipeline/elicitation-method.md.
Whatever is settled here becomes frozen once setup-dev-environment writes DESIGN.md: no later
skill re-opens a colour, a ratio or a scale on its own initiative
(../_shared/build-pipeline/design-freeze.md). Say so when you record the decisions, and record any
deliberately accepted trade-off (a contrast ratio chosen by hand below its target, say) in the same
breath — an accepted trade-off written down once stops every later audit from rediscovering it as a bug.
- interactive: ask one dimension at a time; do not let the conversation jump to pixels.
- autopilot: decide from the flows + product requirements + best judgment, and log each material
choice in the Forks / Decisions log with rationale and confidence.
Stage 2: Research (budgeted)
Verify the design conventions you adopt. Topics: the candidate UI kit's current component
coverage against the list from dimension 1 (its own component index is the primary source — do not
answer from memory, kits gain and drop components) and that the kit and icon set are still
maintained and target the platform; design-system conventions for this category; platform guidelines
(Apple HIG, Material) for the target platforms; the appropriate WCAG level and its concrete
requirements; known UX norms and pitfalls for the key screens. Rank them by what would change a
decision — coverage of a component the product leans on outranks everything else here — and research top-down until the budget (≤4 searches / ≤4 opens per phase,
~2 opens held in reserve for stage 5) is spent; what you don't reach is logged unverified.
/deep-research only if the user explicitly asks. Method —
../_shared/spec-pipeline/research-method.md. Carry the patterns + source links into the draft
(a "platform convention" or "WCAG requires X" claim either cites its source or is labelled
unverified).
Stage 3: Draft
Draft .dev-skills/project-spec/design-decisions.research.md from
references/design-decisions-template.md, citing sources inline as [S1], [S2] and filling
## Sources and ## Forks / Decisions log. Fill the Architecture-feeding decisions handoff
section explicitly — each weighty decision paired with the quality-attribute scenario it implies.
Create .dev-skills/project-spec/ if needed.
Stage 4: Review
Delegate to the spec-reviewer agent (offline). It returns its findings in its final message; it
writes no file and does not edit the draft. Method + return format:
../_shared/spec-pipeline/review-method.md and review-format.md. What this phase's reviewer
probes: references/elicitation-topics.md → "What the reviewer probes".
Stage 5: Fix
Apply the findings to design-decisions.research.md in place (targeted edits, not a rewrite)
and log each applied finding in the Forks / Decisions log:
- 🔴 interactive: STOP. Show the count + top items and get the user's decisions. If a finding
implies a missing feature or flow, recommend updating the product layer (re-run
/define-product-requirements or /create-user-flows) rather than inventing it here.
- 🔴 autopilot: resolve them yourself (set the missing target, flag the architecture input) and
log each resolution. A 🔴 you cannot resolve becomes an open question.
- 🟡 / ⚪: apply by your own judgement.
Spend a reserved fetch only on a
Fix: verify finding that would actually change a decision;
label the rest unverified. What no one could verify goes to ## Open questions. A clean review
(0 🔴) proceeds without stopping.
Stage 6: Dual output
Finalize design-decisions.research.md (complete ## Sources and ## Forks / Decisions log).
Then write .dev-skills/project-spec/design-decisions.summary.md from
../_shared/spec-pipeline/summary-template.md — the design direction in plain language + the
forks the human must answer + open risks. Format rules:
../_shared/spec-pipeline/output-format.md.
Stage 7: Hard gate
- interactive: STOP — this is a hard gate:
"Design decisions done → design-decisions.research.md (detail), design-decisions.summary.md
(for you). Review it. When you approve, run /design-architecture for the technical layer. I
will not proceed automatically."
- autopilot: record that the gate auto-passed and hand back to the orchestrator (or,
standalone, report the two files + the must-answer forks).
Do NOT start architecture work, produce mockups, or write any UI code in this session unless the
user explicitly approves and asks.
When the repo already has code
Read the realized design direction from the repo (UI kit and icon set in the dependencies, theme
config or token files, target platforms, viewport behavior) and treat it as the default — replacing
an installed UI kit is a rewrite of every screen and needs the user's explicit decision. Interview
to confirm or change it; a swap is both a divergence and an input to design-architecture's
scenarios. Log differences in ## Divergences (code vs intended). Method:
../_shared/spec-pipeline/elicitation-method.md → "When the repo already has code".
Amend mode (an upstream doc changed)
Re-run on an existing document and you amend rather than regenerate — reconcile
design-decisions.research.md to the change. Follow ../_shared/build-pipeline/propagation-method.md
in full: assess impact and self-skip if unaffected; otherwise amend surgically (only what the change
touches, plus design-decisions.summary.md if the essence changed), preserve the ## Forks / Decisions log and
add an entry for what changed, ask only on a decision-changing fork, and hand off in one line
(/design-architecture; if .dev-skills/build-plan/tasks/ exists, say the plan may now be stale and
/plan-development reconciles it — you never edit the backlog here).
Rules
- Never produce the design-decisions doc after the first message — load the upstream docs and work
the stages first.
- Decisions only — never layouts, colors, components, copy, or mockups (those are implementation).
- Only decisions that shape architecture or scope belong here; defer cosmetic choices.
- Every key screen traces to a flow; reuse the domain glossary vocabulary; never add features.
- Flag every technically-weighty decision (media, offline, realtime, platforms) as an input to a
design-architecture quality-attribute scenario.
- Set an explicit accessibility (WCAG) target.
- Never make technical/architecture decisions — surface gaps back to the product layer instead.
- Every verified adopted standard is cited and every unverified one is labelled as such; every
fork is logged; the review always runs (both modes) and its findings are always applied.
- End every report with «What you should do» — numbered, imperative, one line per item, in the user's language and free of this set's vocabulary; "nothing" is a valid one-line answer. Timings, where reported, must reconcile with their total.
../_shared/build-pipeline/report-format.md.