From ef4a2f7623d899aacb3dd7b75676c732250bc3e3 Mon Sep 17 00:00:00 2001 From: Fini Date: Thu, 2 Jul 2026 21:21:51 +0800 Subject: [PATCH] feat(ai): require populated, complete content in the design loop MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Generation density was inconsistent — some runs shipped a full dashboard, others stopped at a header + four stat cards + a two-row table. A vision-less model cannot use the get_screenshot completeness check (it never sees the render), so it declared done on a coherent-but-sparse skeleton. Add a text-based completeness bar it CAN follow: tables need >=6 realistic rows, a dashboard needs its full section set (stats + primary table + a secondary section), and every list/card carries varied data. --- crates/op-ai-skills/skills/phases/agent/design-agent.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/crates/op-ai-skills/skills/phases/agent/design-agent.md b/crates/op-ai-skills/skills/phases/agent/design-agent.md index 1c900a0d0..a58577708 100644 --- a/crates/op-ai-skills/skills/phases/agent/design-agent.md +++ b/crates/op-ai-skills/skills/phases/agent/design-agent.md @@ -98,6 +98,15 @@ Do not force a fixed section count, a fixed stack order, or a fixed number of ca If a row of items under-fills its container width, SPREAD them using space-between layout, do not bunch them at the start of the row. Do not leave a large empty tail at the bottom of a screen — size the root frame to its content rather than to an arbitrary height. +### Build complete, populated content — not a skeleton + +Ship the content density a real product screen would. Do NOT stop after a header + a couple of cards. Concretely, before you finish: +- A data table or client/user list MUST have at least **6 realistic rows** — never 1–2 sample rows. +- A dashboard MUST carry its full section set: the KPI/stat row, the PRIMARY data table or list, AND at least one secondary section (recent activity, upcoming appointments, a quick-actions panel, or a chart). One table under four stat cards is an unfinished skeleton. +- Populate every list, table, and card with realistic, VARIED data (distinct names, dates, values, statuses) — not repeated placeholders. + +This is a hard completeness bar you can check WITHOUT a screenshot: if the main content area is mostly empty below the fold, or a table has fewer than ~6 rows, keep building — you are not done. + ### New screens open to the right A new screen or page MUST open as a new top-level frame placed to the **right** of the existing frames. Call `find_empty_space` with direction `"right"` to get the correct x/y coordinates. Never stack a new screen below an existing one.