SIGN IN SIGN UP

feat(dashboard): consolidate performance views and add specification sheet (#1942)

* feat(dashboard): consolidate performance views and add specification sheet

Redesign the Grouped Dashboard surfaces per ADR 0014:

- Replace the four Performance Layout Presets (Compact/Monitor/Detailed/
  Custom) with three Performance Views: Panels (default), Compact, and
  Monitor. Stored legacy preset values normalize onto the new views.
- Panels view: a fixed Instrument Strip reusing the classic DoughnutChart
  gauges (usage + temperature, with the classic narrow-width stagger trick)
  plus a dnd-kit panel stack with an explicit edit mode. Usage Graphs and
  Live Processes ship visible; new Per-core Usage and Motherboard Sensors
  panels ship hidden. Panels render in one or two user-selected columns,
  collapsing to one when the window is too narrow.
- Compact view: dense one-row-per-metric strip with an expandable
  chrome-free mini-monitor mode (portal + inert app root, Burn-in Shift
  re-established inside the overlay, persisted across restarts).
- System Specifications: replace the reused card grid with a flat list
  sheet (CPU/GPU/RAM/Storage/Motherboard/Platform/Network); live
  motherboard sensors move to the Performance panel and a Platform section
  is added. Storage capacity stays on the sheet as a specification fact.
- Remove the specificationsMode plumbing from the classic Dashboard and
  delete the superseded preset components.
- Update en/ja/ru strings, unit tests, and web/mock e2e specs with fresh
  captures; record the decisions in ADR 0014 and CONTEXT.md vocabulary.

Relates to #1793.

* fix(dashboard): address primary review findings on the new dashboard views

- Report the memory unit the platform actually gave instead of assuming MB
  for anything that is not GB.
- Localize the GPU fan substat; VRAM stays an acronym in every supported
  language.
- Give the panel process-table expand control an accessible name and a
  visible focus ring.
- Let long unbroken specification values wrap instead of widening the row
  (a flex item's automatic minimum size is min-content).
- Mock performanceCompactExpanded on its own branch and cover both the
  setter and the pending state that gates the mini-monitor render.
- Point the Motherboard Sensor Display glossary entry at both surfaces.

* fix(dashboard): keep the mini monitor usable in a small window

- Let the expanded Compact rows shrink instead of forcing a ~600px grid:
  a 520px corner window clipped the detail and sparkline columns because
  the burn-in root hides overflow, which broke the mini monitor's own use
  case. Flexible tracks now use minmax(0, ...) with a narrow-width scale.
- Wait for the first monitor sample before reporting that a machine has no
  motherboard sensors, so a startup state is not presented as a capability
  claim.
- Cover both with regression tests: a unit test for the sensor states and a
  520x420 e2e assertion that the expanded row never overflows its window.

* fix(dashboard): gate per-core absence on a first sample and fix a test mock

- Apply the same first-sample rule to the Per-core Usage panel that the
  motherboard sensors panel already follows: an empty history is a startup
  state, not evidence that per-core usage is unavailable. Covered by a new
  unit test for all three states.
- Keep the pending-state mock faithful to each store so the hook never runs
  a persistence effect against the wrong setter.
S
shm committed
453d557f539f85556cee1c330903a24d5a2b2d63
Parent: f1a1e62
Committed by GitHub <noreply@github.com> on 8/16/2026, 2:06:09 PM