feat(ai): require populated, complete content in the design loop

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.
This commit is contained in:
Fini 2026-07-02 21:21:51 +08:00
parent 6ee624713f
commit ef4a2f7623

View file

@ -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 12 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.