Skip to content

test(mobile): automated mobile-UI audit system (layout / contrast / dialogs) in CI - #86

Merged
mvalancy merged 1 commit into
developfrom
feat/mobile-audit-system
Jun 17, 2026
Merged

test(mobile): automated mobile-UI audit system (layout / contrast / dialogs) in CI#86
mvalancy merged 1 commit into
developfrom
feat/mobile-audit-system

Conversation

@mvalancy

Copy link
Copy Markdown
Member

Builds repeatable detectors for the mobile bug classes we kept finding by hand, and runs them across every screen in CI so they're caught automatically.

Auditors — tests/helpers/mobileAudit.ts

  • auditLayout: page horizontal overflow, swipe-sideways scroll containers (with a greppable data-audit-scroll-ok opt-out for intentional cases like data tables), labels squeezed unreadable.
  • auditContrast: WCAG contrast of every visible text vs its effective background → catches invisible / black-on-dark text (the dark:-not-applying class). Skips gradient (bg-clip-text) headings.
  • auditDialog: a modal fits the viewport AND sits on top (not clipped by/under the bottom nav) → catches the stacking-context trap.

Suites (@audit, via npm run test:mobile + a new CI step next to the smoke gate)

  • mobile-audit.spec.ts: sweeps every screen at 390px — 7 workspace views, 6 pages, sign-in (14 tests).
  • mobile-dialogs.spec.ts: edit modal (tap card) + create modal (FAB).

Real issues it found & I fixed (to reach a green baseline)

  • Backend: light-mode -600 status colors on the dark page (red-600 "down", contrast 2.13) → -400; white-on-yellow "Check Data" button (2.94) → dark text.
  • CreateWorkItemModal: not portaled → painted under the nav (same trap as the edit modal) → createPortal(document.body).
  • Admin user table: dense data grid, horizontal-scroll by design → data-audit-scroll-ok.

26/26 mobile+audit green; smoke 5/5; typecheck clean. From now on these regressions fail CI instead of needing a human to spot them.

…ialogs) in CI

Build repeatable detectors for the bug classes we kept finding by hand, and run
them on every screen in CI so they're caught automatically.

New auditors — tests/helpers/mobileAudit.ts:
- auditLayout: horizontal page overflow, swipe-sideways scroll containers (with a
  greppable `data-audit-scroll-ok` opt-out for intentional cases), squeezed labels.
- auditContrast: WCAG contrast of every visible text vs its effective background;
  catches invisible / black-on-dark text (the dark:-variant-not-applying class).
  Skips gradient (bg-clip-text) headings.
- auditDialog: a modal fits the viewport AND sits on top (not clipped by/under the
  bottom nav) — catches the stacking-context trap.

New suites (@Audit, run via `npm run test:mobile` + a new CI step):
- mobile-audit.spec.ts: sweeps every screen at 390px — 7 workspace views, 6 pages,
  sign-in (14 tests).
- mobile-dialogs.spec.ts: the edit modal (tap a card) + create modal (FAB).

Real issues the system found & fixed to reach a green baseline:
- Backend status colors used light-mode -600 shades on the dark page (e.g. red-600
  "down", ratio 2.13) → -400 shades; the yellow "Check Data" button was white-on-
  yellow (2.94) → dark text.
- CreateWorkItemModal wasn't portaled → painted under the nav (same trap as the
  edit modal); now createPortal(document.body).
- Admin user table is a dense data grid that scrolls horizontally by design →
  marked data-audit-scroll-ok.

26/26 mobile+audit green; smoke 5/5.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

🧪 Comprehensive Test Suite

  • Unit suites (Node 18.x & 20.x) — core, web, server, mcp-server: ✅ passed
  • Installer & deploy config: ✅ passed

Full-stack smoke gate runs in the CI workflow.

@mvalancy
mvalancy merged commit 07bb827 into develop Jun 17, 2026
16 checks passed
@mvalancy
mvalancy deleted the feat/mobile-audit-system branch June 17, 2026 01:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant