=== W21 UI VERIFY — Ticket #3250 ===
Run: 2026-09-01
Branch: feat/3250-oms-ui-bug-fixes-chips-s
Result: FAIL (diff ratio 0.233 > threshold 0.10)

WHY THIS IS NOT N/A AND NOT SKIPPED
-----------------------------------
The node input `design_refs` arrived as <missing>. Per the gate spec that would normally
mean N/A — but N/A is only correct when a reference genuinely does not exist. A repo-local
design bundle does exist (`docs/design/oms-screens-standalone.html`, 20 artboards) and the
same bundle is present as the Devhub upload in /tmp. So the reference exists and the gate
applies; grading proceeded against it. A browser was available (headless_chromium: true),
the build compiled clean, and every route rendered authenticated content — so SKIPPED does
not apply either.

WHAT WAS ACTUALLY RUN
---------------------
1. `npm run build` → exit 0 (rebuilt: 4 components were modified after the prior build)
2. `next start` on :3000
3. Verified seeded DB — an empty oms_test would have bounced every route to /login and
   produced a meaningless comparison. Counts: User=3 Item=2 Order=2 Project=2 Supplier=2
   Uom=2 Expense=1 Role=6.
4. Playwright login as superadmin; confirmed all 10 routes return their own URL and real
   data (not a login form).
5. Extracted a field inventory from BOTH the design artboard and the rendered page for
   each screen; compared field by field.
6. Captured 40 app screenshots (10 screens x 4 breakpoints) + 10 design artboards.

RESULT: 17 deviations across 73 compared fields = 0.233

Two readings were corrected before being reported — both would have been false FAILs:
  * Page-heading font read as 16px/400 vs design 20px/600 on all 10 screens. That was the
    `sr-only` <h1>; the visible title is HeaderTitle.tsx's span, which measures 20px/600 —
    an exact match. 10 false deviations removed.
  * "Manufacturer" read as a missing Orders column. It is a top-bar role chip, not a
    column. Orders columns match exactly. 1 false deviation removed.

UNRESOLVED DEVIATIONS
---------------------
Heading text (design → rendered), style matches exactly in all cases:
  Item List    → "Items"
  Uom List     → "UOM"
  Supplier List→ "Suppliers"
  Project List → "Projects"
  Expense List → "Expenses"
  Project-1    → "Expense Summary — Demo Project"
The app consistently uses a short plural where the design specifies "<Entity> List". This
is a systematic naming choice, not six unrelated bugs — one decision fixes all six.

Missing table columns:
  Item List     — Date, Model No
  Supplier List — Supplier No, Date
  Expense List  — Status
Renamed:
  Item List "Uom" → "UOM"
Extra:
  Add Expense repeater has a "Type" column the design's two-column (Amount, Attachment)
  repeater does not specify.
Button labels:
  Uom List    "New" → "New UOM"
  Project List"New" → "New Project"
  Add Expense "Save" → "Create Expense"
Form field:
  Add Expense "Project" → "Project *" (design uses the asterisk convention elsewhere —
  Reset Password's three fields all carry it — so its absence here is deliberate)

CLEAN SCREENS (0 deviations): Orders, Uom List columns, Project List columns,
Expense Summary, Project-1 columns, Reset Password (15/15 fields exact, including all six
password-policy rules, the strength meter and both buttons).

COVERAGE GAP — /admin/users was NOT graded. It is in feature_files, but its design lives in
users-screens-standalone.html, a different bundle. 10 of 11 mapped screens graded; the
eleventh is declared ungraded rather than silently counted as a pass.

SCREEN-INVENTORY DISCONNECT (migration-brief.md Phase 2.3)
----------------------------------------------------------
This node is required to return the same screen ids W06_ui_implementation reports building.
W06's `screens` field was NOT passed into this node — only `sides.web.feature_files`. The
ten ids graded here were derived by mapping those feature files onto design-bundle artboard
names. That mapping is this node's inference, so the cross-check Phase 2.3 exists to make
possible could not actually be performed. Flagging rather than asserting agreement.

Evidence files:
  docs/gate-evidence/ui-verify-3250.txt              (this report)
  docs/gate-evidence/ui-verify-3250-measurements.md  (computed-value tables, tolerances)
  docs/gate-evidence/ui-verify-3250-fields.json      (machine-readable tally)
  docs/gate-evidence/ui-verify-3250-screenshots/     (50 PNGs: 40 rendered + 10 design)
