Purpose: Where /devflow:ui-eval answers "is this screen BROKEN?" (and gates), this sweep answers "is this GOOD design, and how do we improve it?" — and NEVER gates. The heavy first-run produces a ranked design-debt backlog; its high-priority items become candidate todos / future UI objectives in the objective-work loop.
Output: design-review-report.md + design-review-report.json next to the manifest, plus an advisory rollup of design debt sorted high→low.
The design-critic ENGINE is already shipped
(plugins/devflow/devflow/bin/lib/flutter-ui-design-review.cjs) with the df-ui-evaluator model
profile and the df-tools arm flutter-ui design-review <manifest> [--live] [--raw]. It runs ONE
qualitative critique per state (NOT N-voted — design critique is a single pass), aggregates a
prioritized design-debt list, and writes the report next to the manifest. It emits advisory:true
ALWAYS and never sets a pass/fail gate. This skill consumes that engine; it does not re-implement the
critique and does not pick a vision model id.
@.planning/STATE.md @.planning/ROADMAP.md
This is the HEAVY first-run sweep:
- Capture or reuse screenshots for each declared state.
- Run
df-tools flutter-ui design-review <manifest> --live --raw(the live critique pass). - Present the prioritized design-debt report.
State clearly to the user that the result is ADVISORY — it NEVER gates — and that high-priority design-debt items feed the objective-work loop as candidate todos / future UI objectives.
For a deep sweep (capture + critique + report + a ≤300-token rollup), spawn the ui-evaluator agent via
the Task tool with the resolved manifest path; otherwise run the workflow steps inline for a quick
single-surface design pass.
Preserve the SKIPPED fall-through on a missing/invalid manifest (never a hard fail), and never present the report as a gate.