Raxx · internal docs

internal · gated

ADR 0096 — Console Dashboard V2: Split-View Layout (Option B)

Status: Accepted — 2026-05-16 UTC Deciders: Kristerpher (operator), software-architect Parent epic: #146 Design doc: console-dashboard-v2-option-b-2026-05-16.md


Context

The operator reviewed three console dashboard redesign options (PR #2264):

Option B was selected. This ADR records the key implementation choices within that option that had meaningful alternatives.


Decision 1: CSS Grid over Flexbox for the two-column shell

Chosen: CSS Grid with grid-template-columns: 3fr 2fr and named areas.

Alternatives considered:

Consequences: Feature-developer must not add overflow: hidden or overflow: auto to the grid container itself (that would break the panel's sticky positioning).


Decision 2: Side panel state in sessionStorage, not URL query params

Chosen: sessionStorage.dashboard_pinned_surface = "<surface-id>".

Alternatives considered:

Consequences: The pinned surface is lost on tab close. This is acceptable for an operator monitoring tool — the operator re-clicks a tile, which is one action.


Decision 3: Flag-gated rollout (not hard cut)

Chosen: FLAG_CONSOLE_DASHBOARD_V2 gates the split view, default OFF.

Alternatives considered:

Consequences: Two dashboard code paths exist simultaneously for the rollout period. SC-DB-6 (cleanup PR) removes the old path after a 2-week prod soak.


Decision 4: Single always-visible action button per tile

Chosen: One right-aligned button per tile, content determined by surface state (Investigate for degraded/down, Deploy for in-progress build, Detail for healthy).

Alternatives considered:

Consequences: Deploy and Investigate share the same button slot. If a surface is DEGRADED and also has a deploy in progress, Investigate takes priority (the deploy is visible in the panel's build section). Feature-developer must implement the priority order from §4.2 of the design doc.


Decision 5: Side panel sparkline lazy-fetched on pin (not inline in tile)

Chosen: The 48-bucket sparkline is fetched once when a tile is pinned, using the existing GET /dashboard/api/sites/<id>/probe-history endpoint.

Alternatives considered:

Consequences: The sparkline is not visible until the user pins a tile. This is acceptable — the panel is the "detail" view and the sparkline is a detail-level signal.


Decision 6: Preserve the per-surface detail page

Chosen: /dashboard/sites/<id> is preserved. The side panel's "Detail" link navigates there.

Alternatives considered:

Consequences: The console has two levels of surface detail: the panel (quick) and the detail page (full). This is intentional. No feature-developer action needed on the detail page for V2 — it is unchanged.


Consequences Summary