Status: Phase 2.5 complete (live interaction sweep on prod console).
Method: Playwright MCP browser session, operator-authenticated. Hover, click, modal-open verified. No destructive actions invoked.
Prod SHA at time of audit: 27c4356 (deployed 02:44 UTC). Includes #1322 P0 fixes + #1321 build-strip; does NOT include #1323 health ring (latest merge but not yet deployed).
Hovering a tile triggers a popover beneath the tile with structured key-value rows: surface / status / error / checked. Renders correctly on DEGRADED tile (support.raxx.app showed status DEGRADED, error http_404, checked 24s ago).
Screenshot: screenshots/01-hover-degraded.png
What's there vs. spec: core key-value layout works. Per #1263 carve-outs, these were intentionally deferred: sparkline (needs probe-history endpoint not yet built), live "next poll in Xs" countdown (needs per-tile interval from backend), site-detail "full detail →" footer link.
Polish opportunities: - No visible chevron pointing from popover to tile — spec calls for 12px clip-path chevron at left:20px - Popover overlaps the row of tiles beneath (z-index correct, but visually busy) - Popover stays sticky after mouse moves to next tile — could swap content immediately
Clicking deploy button on a tile opens a strong-friction modal for production deploys:
PRODUCTION badge with surface namecurrent → target main ref arrowmain) for branch/SHA selectiondeploy raxx-mockups to production (exact-match, lowercase, no autocorrect)Screenshot: screenshots/04-deploy-modal-open.png
Two cancel buttons in the DOM — deploy-cancel-btn (entry state) and deploy-dispatch-cancel-btn (in-flight cancel). That's good design — both states have an exit. Did NOT exercise the in-flight states (would require firing a real deploy).
What's pending visual confirmation: the 8 in-flight states from docs/design/console-deploy-flow/mockups/state-*.html (dispatching / queued / running / validating / done-success / done-failure / multi-surface / all-states-composite). PR #1323 wired these, will become visible when next deploy fires from console.
Click the "Recent activity (15) ↓" toggle expands three columns:
- Deploys (last 5) — shows real deploy events with success ✓ markers
- Actions (last 5) — audit log entries (including my access_denied · /billing attempts from Phase 2 audit yesterday, confirming the audit log is working)
- Rotations (last 5) — shows the recent rotation activity. CF_PAGES_READ_TOKEN now shows completed / triggered pairs, not the historical "Failed: GET /user/tokens" — someone fixed the CF token rotation since yesterday's QA
Screenshot: screenshots/06-recent-activity-expanded.png
This is the deepest-functioning widget on the dashboard — pulls from three different data sources and renders consistently.
Visit /dashboard/sites/tickets — page renders correctly:
- Header: hostname + status badge (HEALTHY)
- Liveness / Last Deploy / Build / Sentry 24h metric quartet
- Latency history chart (24h / 48h / 7d / 30d toggles)
- Probe history table (last 48 entries with timestamps, OK, latency, HTTP, vendor)
- Surface Control Flags toggle (FLAG_ENFORCE_CF_ORIGIN shown)
Screenshot: screenshots/05-tickets-site-detail.png
Health ring will land after next prod deploy. PR #1323 is merged (or about to be) but not deployed yet to 27c4356.
surface_id mappingapi.raxx.app, raxx-mockups.pages.dev, console.raxx.app — these tiles render on the dashboard but lack a detail → link. The other 5+ surfaces have detail links (tickets, vault, status-raxx, raxx-app, docs-raxx).
Confirmed by trying to navigate /dashboard/sites/console-self: returns "Surface console-self is not in the registry" (the type tag from /status page is CONSOLE_SELF but that's the hosting-class tag, not the surface_id).
The 5 surfaces that DO have detail links: tickets, vault, status-raxx, raxx-app, docs-raxx.
The 3 that don't: api.raxx.app, raxx-mockups.pages.dev, console.raxx.app — likely missing entries in config/status-surfaces.yaml or the dashboard's surface→site_id resolver.
Screenshot of error: screenshots/03-site-detail-pre-ring.png (shows "Surface console-self is not in the registry").
Severity: MEDIUM — the dashboard works, but 3 surfaces are operationally less observable than the others. Worth a small registry-fix card.
Yesterday's Phase 2 QA hit /billing and /billing/alert-config — both returned 403 due to my superadmin role lacking console-billing-read. Today, those same actions are visible in the Recent Activity → Actions column as access_denied · /billing/alert-config and access_denied · /billing.
That confirms:
- Audit logging captures denied attempts (not just successful ones)
- Per memory project_workflow_uuid_tracing_decisions.md — every action gets traced even when blocked
- The audit log surface is functional end-to-end
This is a stronger signal than "the page renders" — the data layer + UI layer + audit boundary all working together.
/console/flags is empty (P0 bug fixed in #1322 but maybe not deployed)P1 (next session):
Fix surface registry for 3 missing tiles — add api.raxx.app, raxx-mockups.pages.dev, console.raxx.app to whatever yaml/config drives the surface→site_id resolver. After fix, all 9 tiles get clickable detail links.
Deploy #1323 to prod — health ring will land. Worth doing before next QA pass.
Sparkline implementation card for the popover — referenced in #1263 carve-outs, deferred until probe-history endpoint exists. Can be filed standalone.
P2 (after prod deploys catch up):
Animation capture rig — Playwright supports video capture; could record 5s of dashboard with DEGRADED tile to visually verify pulse + breathing-line. Useful for design QA + regression.
Deploy modal in-flight states fixture — build a /dashboard/_deploy_modal/preview?state=running debug route (flag-gated) that lets us inspect each of the 8 states without firing a real deploy. Saves operator time when reviewing the visual fidelity.
Hover popover chevron — small visual polish; spec calls for 12px chevron at left:20px from tile.
| Finding | Phase 2 (yesterday) | Phase 2.5 (today) |
|---|---|---|
| /console/flags empty | Real bug | Likely fixed via #1322 (deploy may not be live yet) |
| /secrets/history broken render | Real bug | Same — fix in #1322 |
| /console/admins/online 404 | Real bug | Same — fix in #1322 |
| CF rotation failures | Multiple recent failures | Now showing completed/triggered pairs — operator-side fix landed |
| Audit log functioning | Untested | ✓ confirmed end-to-end |
| Hover popover | Untested | ✓ working (minimal version) |
| Deploy modal | Untested | ✓ entry state working with strong friction gates |
Audit run by: Claude Code main agent + Playwright MCP, 2026-05-07 ~03:45 UTC
Browser session: authenticated via interactive SSO at start of session
Screenshots: 6 captured under screenshots/