QA Full UI E2E Results — CPMS & EMS (ego lite, navigation-driven)
Run date: 2026-07-02 · Executor: ego lite (ego-browser) · Task space:
sfms full ui e2eMode: Full UI end-to-end — real browser navigation and control interaction (nav-link clicks, form fills, button clicks), verified by reading the resulting UI state + screenshots. This complements the API/RBAC suite in qa_results.md (which drove the API layer directly).
1. How it ran
- Authenticated through the login form (typed credentials, clicked Sign in) as
ownerandviewer. - Navigated between modules by clicking the left-nav links (
Chiller Plant,Energy) — real Next.js client navigation. - Operated the actual on-screen controls — setpoint inputs, Apply/Run/Simulate/Execute/Reconcile buttons, circuit toggles, breaker button — then asserted the UI response (banners, rendered cards, state badges) and captured screenshots.
- Viewport fixed to 1440×900 (the agent tab initialises at 0×0). Where a target was scrolled off-screen or behind the fixed "Install Atlas" PWA overlay, a real click event was dispatched on the button element itself — still a genuine UI click firing the real handler, backend call, and re-render.
2. Results — 11/11 UI journeys PASS
| # | Journey | Interaction | Result |
|---|---|---|---|
| 1 | Login (owner) | Type email/password → click Sign in | ✅ → /dashboard |
| 2 | Navigate → Chiller Plant | Click left-nav Chiller Plant | ✅ /chillers, KPIs + all cards render |
| 3 | Plant control (two-person) | Set CHW 9.0 °C → click Apply control | ✅ banner: "Staged for two-person approval: Large CHW setpoint move (6.7→9°C)" |
| 4 | AI Optimisation | Click Run analysis | ✅ 4 recommendation cards + AI narrative |
| 5 | What-If Simulator | Set CHW 8.0 °C → click Simulate | ✅ "…0.58 → 0.56 kW/RT and saves about $1,650/month (367 kWh/day)" |
| 6 | Control Safety breaker | Click Trip breaker → Reset breaker | ✅ Armed → Locked out ("Manually tripped") → Armed |
| 7 | FDD scan | Click Scan now | ✅ "No active faults" (healthy plant — correct) |
| 8 | Navigate → Energy | Click left-nav Energy | ✅ /energy, all 8 sections render |
| 9 | Demand-Response event | Toggle 2 circuits Sheddable → set target 60 kW / 90 min → click Execute event | ✅ status met, shed 58.5/60 kW, M&V avoided 88 kWh |
| 10 | Bill reconciliation | Fill period 2026-06, billed 120000 kWh, $18000 → click Reconcile | ✅ row 2026-06, variance +8% (flagged) |
| 11 | RBAC (viewer) via UI | Log in as viewer → nav to Chiller Plant | ✅ control panel shows read-only message, no Apply button; nav still lists the modules |
Pass rate: 11/11 (100%). Every workflow was exercised through the actual UI, and each produced the correct on-screen result and backend effect.
3. Evidence (screenshots)
| File | Shows |
|---|---|
| e2e-01-chiller-nav.png | Chiller Performance page after nav click (0.58 kW/RT, 3/3 running) |
| e2e-02-two-person-pending.png | CHW input = 9.0 + two-person "Staged for approval" banner |
| e2e-03-ai-optimise.png | AI Optimisation recommendations rendered |
| e2e-04-whatif.png | What-If scenario result ($1,650/mo) |
| e2e-05-breaker-locked.png | Control Safety breaker interaction |
| e2e-06-demand-response.png | DR event "met", 58.5/60 kW |
| e2e-07-bill-reconcile.png | Bill row with +8% variance |
| e2e-08-viewer-readonly.png | Viewer — read-only control panel |
4. Notes & non-defects
- Two "click" mechanisms — in-view targets used CDP mouse clicks (login, nav, Apply, Run analysis, Simulate); off-screen / overlay-covered targets (breaker, table toggles, Execute, Reconcile) used a real click event dispatched on the button element. Both fire the true React handler + network + re-render; neither bypasses the UI to call the API directly.
- Hydration timing — the consoles fetch 5–9 endpoints on mount; UI-text assertions polled for the content to appear after navigation.
- PWA overlay — the "Install Atlas" prompt is
position: fixedbottom-right and intercepted coordinate clicks near it; dismissed where possible. - Test artifacts left in tenant settings — one DR event, one bill (
2026-06), and one pending two-person control request (6.7→9 °C) remain as demo data; the sheddable-circuit toggles were reverted to Essential at the end. All harmless; the pending request cannot be self-approved (correct). - Telemetry fixture — the live snapshot from the earlier run (see qa_results.md §1) was reused so the plant showed live values.
5. Verdict
Full navigation-driven E2E confirms the CPMS/EMS operator journeys work through the real UI, with RBAC enforced visually for the viewer role. Consistent with the Release-Candidate / UAT-ready rating in qa_readme.md. UAT/Demo: ✅ GO. Production remains gated on Phase 9.