feat(web): two-pane "cockpit" redesign with a live board rail
Restructure the workshop flow into the designer's cockpit: a persistent shell (header + 5-step stepper + sticky instrument rail) wrapping the phase routes via a React-Router layout route, so the rail stays mounted across navigation. - Design system: IBM Plex Mono + Newsreader; the full cockpit token set (light + dark) in index.css; a working light/dark theme toggle (store `theme` + useApplyTheme); a `switch` ui primitive. - Shell: CockpitLayout, Stepper (forward-gated), PanelChrome helpers. Every phase page restyled to the editorial panels + the WORKSHOP-FLOW fixes (channels-after-bind, domain framing + L1 prefill, L2/L3 prefill at 3/3, in-place submission finale). Store gains `tried` + `channels.saidHi` (v4). - Live rail (CockpitRail): real node heartbeat + agent activity log + ADD progress; sim telemetry (useTelemetry) for the waveform/accel/I2C behind a seam, marked SIM. - LED-matrix PIXEL MIRROR (real): the rail shows exactly what the physical matrix displays — API GET /nodes/:team/matrix reads the board's framebuffer off the :9999 relay (readMatrixFrame + the `matrixget` relay command); useMatrixMirror polls it and unpacks the 104 bits. Co-Authored-By: Claude Opus 4.8 <[email protected]>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
6c82b79b01
commit
1a39457940
@@ -30,12 +30,9 @@ describe('Module1', () => {
|
||||
sessionStorage.clear()
|
||||
})
|
||||
|
||||
it('renders the phase strip set to m1 and the heading', () => {
|
||||
it('renders the heading', () => {
|
||||
renderPage()
|
||||
expect(screen.getByRole('heading', { name: /domain.*events/i })).toBeInTheDocument()
|
||||
expect(
|
||||
screen.getByTestId('phase-strip').querySelector('[data-phase="m1"]'),
|
||||
).toHaveAttribute('data-state', 'active')
|
||||
})
|
||||
|
||||
it('shows the domain carried over from the earlier screen (read-only)', () => {
|
||||
|
||||
Reference in New Issue
Block a user