Design Lifecycle
The design lifecycle governs how a project's user experience moves from
initial discovery through stakeholder approval and into the solutioning
phase. Every project that declares ui_present: true in its
configuration passes through these stages before architecture work can
begin.
1. Discovery
Discovery is the initial exploration of user needs, existing patterns, and design constraints. During this stage the UX designer gathers research inputs — personas, user journeys, competitive benchmarks — and identifies the key interaction surfaces the project will need. Discovery feeds directly into the questionnaire that captures concrete design parameters.
Run /gaia-create-ux
to begin the discovery process. The command creates or binds two
Claude Design projects: the design-system project managed through DesignSync
(tokens, reusable components, reusable page templates), and the
product design project managed through the Design artifact surface
(screens, flows, the
/design command). Discovery walks through a structured
conversation that covers user research, information architecture, and
interaction patterns.
2. Questionnaire
The questionnaire stage collects the structured inputs that drive the design specification: target devices, accessibility requirements, brand constraints, component library preferences, and interaction patterns. The questionnaire output becomes the authoritative design brief that the rest of the lifecycle works against.
The questionnaire runs as part of /gaia-create-ux. Its
answers feed only the design-system project; the product design
project receives no content during this phase. The questionnaire
answers are recorded in the design specification artifact and
referenced by downstream stages.
3. Publication
Publication is the act of writing the design specification and making it available for review. The specification covers wireframes, interaction flows, component inventories, accessibility annotations, and responsive breakpoints. Once published, the design record tracks the specification's provenance and version.
The design record at .gaia/state/design-record.yaml
captures who created the specification, when it was published, and
which version of the source it was built from.
Each publication pass persists the file set and content hashes at
.gaia/state/design-last-published.json. This persisted
manifest is read on subsequent publications for conflict detection
and orphan identification. The design-system manifest
(_ds_manifest.json) is rebuilt after each publication so
that every published specification appears as a browsable card.
Screens are published to the product design project via the Artifact
tool. Component specs remain in the design-system project. Each
published screen carries the design-system token values as
:root{--token:value} CSS custom-property blocks (the
token-by-value model). Because every screen carries the full resolved
token block, a token change also republishes the screens of the
product design project, after the design-system project. The canvas
designSystems list stays empty — this is the expected state.
A reserved future mode
(artifact-installed) would install a Design System
artifact into the canvas instead. After the first screens are published,
the framework verifies the canvas index read to confirm the expected
state.
When the stack does not include React, the design system is built as a brand-style artifact (fonts, colors, guidelines) instead of a compiled component bundle. The product design project is created regardless of sync mode.
4. Review
Review is a structured walkthrough of the published design with
stakeholders. The
/gaia-design-review
command drives this stage: it loads the design specification, runs a
rubric-guided review, and records the reviewer's findings. Review can
iterate — each round produces a new set of findings that the
designer addresses before requesting another review.
During review, designer-side component changes are read from the design-system project and reconciled into the derived UX design document via delta sync. Screen-level changes are read from the product design project, detected by comparing content hashes against the persisted publication manifest, and reported to the user with full content — screen prose is not auto-edited.
The dev agent and reviewers read tokens and components from the design-system project and screens from the product design project. When there is no product design project, they report “no screens available”.
5. Approval
Approval marks the point where stakeholders agree the design is ready
for implementation. The approval verdict is recorded in the design
record as design_state: approved with a timestamp and
the approver's identity in the approvals list. Once approved, the design becomes the binding
contract that solutioning works against.
An approved design unlocks the solutioning phase: architecture, threat modelling, infrastructure design, and epic decomposition can proceed. Without approval, every solutioning entry point refuses to start.
Approval requires at least one design/ux-tagged stakeholder in the
roster. The convergence check reads the stakeholder roster from both
.gaia/custom/stakeholders/ and
custom/stakeholders/ (merged, with .gaia/
taking precedence per slug). Without a tagged approver, the gate
halts with a remediation naming
/gaia-create-stakeholder. An empty or missing roster
never satisfies convergence. The roster reader refuses symlinked
roster directories, files, and parent path components. A stakeholder
file whose name contains a tab or newline character is skipped with
a warning.
6. Gate and Override
The design approval gate is enforced at every solutioning entry
point. A single composite approval state covers both the
design-system project and the product design project. The gate
reads only local state (zero integration calls) and checks three
conditions: the design record must be in the
approved state, stakeholder convergence must be
satisfied, and review coverage must include every project the
design record references. When a review did not cover a
referenced project, the gate halts with a remediation directing
the user to run /gaia-design-review.
Remediation names both projects and their surfaces (DesignSync for
the design-system project, the Design artifact surface for the
product design project).
In exceptional cases the gate can be overridden using the
force-design flag. An override is an audited event: the
design record logs the override reason (control characters in the
reason text are neutralised before storage), the person who
authorised it, the timestamp, and the sprint scope
(sprint_id). When the
override succeeds, a notice is surfaced to the developer with the
current design state, the reason, and a warning that the UX document
may be outdated. Overrides are visible in the sprint review and in
the design record history.
Note: the two-record consistency check that compares the gate classification against the implementation-status ledger is a drift detector. It catches cases where one record was updated without the other, but it does not prove either record is correct. Both records can agree and still be wrong. Treat its output as a quality signal, not a proof of correctness.
7. Stale on Change
A design that was approved can become stale if the project changes in
ways that affect the design assumptions. When a design-affecting
change lands — a new user journey, a modified data model, a revised
set of target devices — the framework marks the design record as
stale. Stale transitions are triggered by
/gaia-edit-ux
(always, since a direct UX edit is design-affecting) and by
/gaia-add-feature
(when the feature is design-affecting or ambiguous). A stale design
blocks solutioning just as an unapproved design does: the gate fires
with the same halt as any other non-approved state, and the design
must be re-approved through a review round.
To clear the stale state, run
/gaia-design-review
again. The review stage examines whether the change invalidates the
existing design or whether the design still holds. If it still holds,
the reviewer re-approves it and the gate clears.
When the stale transition completes with the Claude Design integration available, the changed specifications are republished based on scope: a token or component change republishes to the design-system project, a screen or flow change republishes to the product design project, and when both are affected the design-system project is republished first. Because each screen carries the full resolved token block, a token change also refreshes the screens of the product design project. The republish step reads the last-published manifest for conflict detection: files changed by both the framework and a designer are surfaced as conflicts rather than silently overwritten. When the manifest does not exist (projects published before manifest tracking), every differing remote file is treated as a conflict to confirm.
Both /gaia-create-ux and /gaia-design-review
check whether the Claude Design integration is available before their
first project call. A missing integration halts with a remediation
naming the DesignSync tool surface. An unauthorized integration halts
with a remediation covering both /design-login (API-token
sessions) and granting design access when prompted (claude.ai sessions).