Omni UI Harness v0 — reporting-dashboard Raw vs Full

Run ui-reporting-repairmode-k1-20260628T012257Z · same model/effort · symmetric post-run lab gates, screenshots, code judge, visual judge
revise_full_harness
effective Δ 10 · judge-blend Δ 2 · visual Δ 3 · low confidence: yes
Result read: Treat this primary analysis as the candidate-generation and visual/style shakedown. The contract conclusion now comes from the task-specific replay/rescore pass, which drives browser proof states for both arms.
n=1 per arm; this is a methods shakedown, not a promotion-grade estimate. The primary run score is useful for builder process, static/rendered lint, screenshots, and visual judge output, not as the final product-contract verdict. Use the replay/rescore report for contract preservation because it drives task-specific browser proof states. The primary screenshots remain visual shakedown states; deeper contract proof lives in the rescore artifacts. Use this report to compare builder process, static/rendered lint, screenshots, and visual judge output; use the rescore report to compare contract preservation.

full_ui_harness s1

claude:sonnet/medium · turns 19 · self gates 5 · correction loops 2

60
Blocking floor FAIL
Strict gate PASS recorded 76
Judge blend 76
Code judge 79
Visual judge 69
Cost $0.578

Desktop

Mobile

Invalid Desktop

missing screenshot

Invalid Mobile

missing screenshot

Gates

staticPASS== ui-lint-static: 0 BLOCKING, 0 flag(s) across 1 file(s) ==
eslintPASS
render desktopPASS== ui-lint /reporting — 0 BLOCKING, 0 flag(s) [flags by zone: comfort 0, compact 0] ==
render mobilePASS [compact] text overlaps text 43x12px (vs "Patients") @ tbody > tr.border-b > td.py-0.5 > span.inline-flex "Pending" | [compact] text overlaps text 12x7px (vs "Pending") @ table.w-full > tbody > tr.border-b > td.py-0.5 "Repair / Service" | [compact] text overlaps text 43x7px (vs "Pending") @ table.w-full > tbody > tr.border-b > td.py-0.5 "43" | [compact] text overlaps text 30x10px (vs "Repair / Service") @ table.w-full > tbody > tr.border-b > td.py-0.5 "Absolute Power Ear Mold, Absolute Pow..." | [compact] text overlaps text 50x10px (vs "Repair / Service") @ table.w-full > tbody > tr.border-b > td.py-0.5 "$-250"
mountPASSrender-proof /reporting | finalUrl: http://127.0.0.1:4022/reporting | onLogin: false | errorOverlay: false | textPresent("Revenue"): true | consoleErrors: 0 | RESULT: PASS

Visual Notes

Desktop is a strong, genuinely scannable clinic cockpit: all six data objects present (revenue pace with collections/AR/refunds, patient pipeline funnel, schedule gauges vs targets, sales line items with refund/credit handling, marketing attribution, recent activity feed), tabular-nums money, muted Omni-feel palette, good density in the first viewport. Edge cases are handled — negative/refund sale amounts ($-250, $-275 Credited), 'No patients currently in clinic', $0 marketing revenue all render without crashing. The big weakness is responsive behavior: the narrow viewport does not reflow the multi-column strips, producing heavy label/value overlap in Revenue, a clipped Marketing card, and truncated Sales rows — exactly the clipping/text-fit failures the brief called out. Desktop ~80, mobile drags overall down.

Agent Summary

All gates pass. Here's the summary: --- ## Summary **What changed:** `src/app/(app)/reporting/page.tsx` — replaced the placeholder `return` body with a full compact clinic cockpit. Auth + data-fetching (`requirePagePermission` + the six `Promise.all` calls) are untouched. **Layout:** 1. **Revenue strip** — 6 KPI tiles (MTD, YTD, avg transaction, collections rate, outstanding AR, refunds MTD); tabular-nums; warns when AR > $5k or refunds exceed MTD revenue; "No revenue yet" when $0 2. **Mid row (2-col grid):** - *Patient Pipeline* — funnel (Leads → Appts → Purchased → Follow-up) + retention/recall compliance KPIs - *Schedule* — table of all 6 `SchedulingRow` entries with inline progress bar + status dot 3. **Bottom row (2-col grid):** - *Sales Pipeline* — 4 summary KPIs + recent sales mini-table (patient name truncated, items truncated, amount, badge status) - *Marketing Attribution* — mini funnel + lead→appt / appt→sale conversion rates + channel table 4. **Activity feed** — timestamped items with color-coded tag pills; handles empty state **Edge cases handled:** - No revenue today → `$0` + "No revenue yet" sub-label - Refunds > payments → header Badge warning + Kpi colored warning - 0 leads → renders "—" in funnel cells - Empty activity feed → "No recent activity" message - Long patient/source names → `truncate` on all name cells **Files touched:** 1 (`src/ap

raw_ui_agent s1

claude:sonnet/medium · turns 8 · self gates 0 · correction loops 0

50
Blocking floor FAIL
Strict gate FAIL recorded 50
Judge blend 74
Code judge 79
Visual judge 66
Cost $0.360

Desktop

Mobile

Invalid Desktop

missing screenshot

Invalid Mobile

missing screenshot

Gates

staticFAIL 208: [FLAG] vertical-spacing: py-4 = 16px vertical padding (compact flag >6) | 264: [FLAG] type-scale: text-base = 16px off the compact scale (10/11/12/13/14) | == ui-lint-static: 6 BLOCKING, 5 flag(s) across 1 file(s) ==
eslintFAIL/tmp/agent-lab-ui-harness/ui-reporting-repairmode-k1-20260628T012257Z/raw_ui_agent-s1/accuhear/src/app/(app)/reporting/page.tsx | 14:3 warning 'ArrowRight' is defined but never used @typescript-eslint/no-unused-vars | 37:55 error `'` can be escaped with `'`, `‘`, `'`, `’` react/no-unescaped-entities | ✖ 2 problems (1 error, 1 warning)
render desktopPASS== ui-lint /reporting — 0 BLOCKING, 0 flag(s) [flags by zone: comfort 0, compact 0] ==
render mobileFAIL [compact] text overlaps text 48x13px (vs "— purchased Ear Mold") @ div.divide-y > a.block > div.flex > span.shrink-0 "Yesterday" | [compact] text overlaps text 48x13px (vs "— purchased More 1 miniRITE R") @ div.divide-y > a.block > div.flex > span.shrink-0 "Yesterday" | [compact] text overlaps text 27x13px (vs "— payment $198 received") @ div.divide-y > a.block > div.flex > span.shrink-0 "Jun 15" | [BLOCKING] viewport-overflow ×1 | [-] page scrolls at the body level by 28px — the page must fit the viewport (internal panels scroll, never the page) @ html ""
mountPASSrender-proof /reporting | finalUrl: http://127.0.0.1:4021/reporting | onLogin: false | errorOverlay: false | textPresent("Revenue"): true | consoleErrors: 0 | RESULT: PASS

Visual Notes

Desktop is a strong, genuinely dense clinic cockpit: all six data objects are present and labeled (revenue pace, patient pipeline, schedule utilization with status badges, sales pipeline, marketing attribution, recent activity feed), money is tabular and rounded, and edge cases are handled — refunds show as negative ($-250, $-275), 0 leads and empty in-clinic states render. That earns high task-completion and good scanability. But the build is not responsive: at narrow width the top-band money columns overlap into unreadable glyph soup and the entire right column is clipped off-screen, which is a hard fail on the 'clipping/overlap/text fit' axis. A secondary desktop defect is the MTD funnel whose bar lengths don't track their values (Leads=1 and Purchased=54 both near full width), making that visual misleading. Omni feel (badges, type, density) is solid. Mobile defects and the funnel/attribution reconciliation gaps cap the overall.

Agent Summary

Done. Here's a summary of what was built: **Clinic Reporting Cockpit** — replaces the stub render body with a full 2-column grid dashboard across 6 panels, each pulling from the pre-fetched data objects: 1. **Revenue** — MTD/YTD/Avg Txn KPIs + collections rate, outstanding AR (with invoice count), and MTD refunds. Refund amount highlights danger red if non-zero; a header alert fires if net revenue is negative (refunds exceed payments). 2. **Patient Pipeline** — New/Active/Recall% KPIs + an inline funnel bar chart (Leads → Appointments → Purchased → Follow-up), retention rate row. 3. **Schedule Utilization** — 6-row table (metric / value / target / status badge) with color-coded values (green/amber/red) sourced from the `SchedulingRow[]` data. 4. **Sales Pipeline** — 4 KPIs (open orders, closed MTD, avg sale, units fitted) + a 6-row recent-sales table with truncation on long patient names/items, status badges. 5. **Marketing Attribution** — 4 KPIs (leads/appts/sales/revenue) + conversion rates + per-channel table. Shows "No attribution data" if 0 leads or no channels. 6. **Recent Activity** — chronological feed with tag badge (sale/appointment/patient/payment/recall), bold name + description, relative timestamp. Linked rows are `<a>` tags; empty state handled. **Edge cases handled:** no revenue today (0 values display correctly), refunds exceeding payments (header alert