Cortical response becomes a compact live metric
The Dashboard now presents its cortical response score as live telemetry inside a compact four-metric card instead of pairing a large number with a static LOW/HIGH legend.
Root cause
The Cortical Response Index, onset, sustained activation, and duration values were already refreshed from neural telemetry every 100 ms. The nearby LOW/HIGH gradient was purely decorative, however, and the score occupied a separate row above a 78px spacer. Narrow right panels then stacked a large empty 16:9 preview above the useful metrics, making the card appear static and pushing live data below the fold.
The first compact treatment also placed the variable-length semantic band in the same flex row as the heading. Medium forced the heading onto a second line, adding 13.75px to the metric and score card. Separately, opening Chat let its intrinsic content expand the lower grid row from roughly 344px to 526px and compress the Brain row from roughly 352px to 170px. The canvas CSS height fell from 271px to 89px while its old 602x337 backing buffer and camera aspect stayed unchanged, visibly stretching the neural scene.
What changed
- Cortical Response is now the first item in a 2x2 group with Duration, Onset Response, and Sustained Activation.
- A normalized live meter keeps the number, fill, accessible value, and Low, Medium, or High band synchronized. The boundaries are 0-39, 40-69, and 70-100.
- The headline score is 26px, reducing to 24px in compact panels, with a muted
12px
/100unit. - The stimulus preview remains beside the metrics down to a 361px panel width. On narrower panels, metrics come first and an empty preview collapses to 64px; loaded media remains 16:9.
- The old potential row, static gradient, LOW/HIGH labels, and 78px content gap have been removed.
- The semantic band now occupies a fixed-width column beside the meter, the heading remains one line, and the score reserves three numeric characters. Low, Medium, and High therefore share identical geometry.
- Compact Dashboard now uses the same stable approximately 300px/406px rows as
Arcade at
970x820. Short tablets scroll inside the workspace instead of squeezing the brain below 260px or clipping Chat. - A
ResizeObserversynchronizes the Three.js camera and DPR-aware backing buffer whenever the canvas container changes size. The window listener remains as a fallback.
No telemetry schema, public API, event, storage key, chat behavior, or existing Dashboard metric ID changed.
Verification
Validation completed on August 2, 2026:
pnpm typecheckandpnpm buildpassed.pnpm testpassed 257 tests; the six skipped tests remain the existing opt-in live-integration cases.- The responsive Playwright suite passed all nine cases, including score and meter synchronization, compact empty and loaded previews, metric containment, stable score geometry, synchronized canvas buffers, short-tablet scrolling, Dashboard ordering, and document-level overflow checks.
- The Arcade Playwright suite passed all 15 cases, confirming that the shared panel styling did not regress the Game Boy workbench.
- The documentation typecheck and production build passed.
- Visual checks at
970x820,1186x810,390x844, and390x667confirmed the intended hierarchy, stable band treatment, undistorted brain canvas, and absence of horizontal overflow or console errors.