Commit graph

586 commits

Author SHA1 Message Date
jedarden
07abc03ef4 style(dashboard): complete design token migration and live view cleanup
Replace remaining hard-coded colors across all CSS files with design
tokens from tokens.css. Remove duplicate inline positioning from
live.html panels (now in layout.css). Add replay session blob fetch
for immediate 3D scene state on seek.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 16:39:53 -04:00
jedarden
a06be0eaf1 refactor(dashboard): consolidate overlay/panel positioning into layout.css
Move inline position:fixed styles from setup.html and expert.css into the
shared layout.css stylesheet. Convert #scene-container and #status-bar from
position:fixed to grid-child layout within .app-shell--live, eliminating
fragile top/height calc chains that broke on every new overlay element.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 16:39:53 -04:00
Argo Workflows CI
7305ac8201 ci: auto-bump version to 0.1.251 2026-04-24 20:25:13 +00:00
jedarden
ab2513375f style(dashboard): replace last hard-coded color with design token
Replace `color: white` in #ble-btn .badge with `var(--text-on-accent)`
completing the single design system adoption per plan §8e.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 16:24:59 -04:00
Argo Workflows CI
c7fa954648 ci: auto-bump version to 0.1.250 2026-04-24 20:09:23 +00:00
jedarden
757374e0d6 style(dashboard): remove duplicate #presence-panel inline styles from live.html
The presence panel positioning was moved to layout.css in a prior commit
but the inline override in live.html was not cleaned up.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 16:08:42 -04:00
Argo Workflows CI
753b445784 ci: auto-bump version to 0.1.249 2026-04-24 20:05:21 +00:00
jedarden
6748edde40 style(dashboard): adopt Radix dark design tokens across all CSS files
Replace hardcoded spacing (padding, margin, gap), typography (font-size,
line-height), and border-radius values with CSS custom property tokens
from tokens.css across all 26 dashboard CSS files. Colors were already
tokenized; this completes the design system adoption per plan.md §8e.

763 lines changed: 478 from bulk spacing/typography pass, 285 from
directional margin/padding pass. No hex colors remain outside tokens.css.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 16:04:42 -04:00
Argo Workflows CI
f9eba0634b ci: auto-bump version to 0.1.248 2026-04-24 19:50:16 +00:00
jedarden
87192aa410 style(dashboard): move live panel positioning from inline to layout.css
Extract ID-based panel positioning (#node-panel, #chart-panel,
#presence-panel) from live.html inline styles into shared layout.css
with proper responsive breakpoints for tablet and mobile.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 15:49:40 -04:00
jedarden
18b7d7d1d0 style(dashboard): extract inline styles to tokenized CSS files
Move inline <style> blocks from simple.html and integrations.html into
external CSS files (wizard.css, integrations.css), replacing all
hard-coded pixel values with design tokens from tokens.css. Remove
inline style attributes in favor of CSS classes. All 5 dashboard pages
now share one design system via Radix dark tokens (§8e).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 15:47:33 -04:00
Argo Workflows CI
e21bd1db9f ci: auto-bump version to 0.1.247 2026-04-24 19:42:35 +00:00
jedarden
c02a682361 feat(dashboard): add onJumpToTime callback for tap-to-jump time-travel
Wire the replay module's onJumpToTime callback so the full-page timeline
can coordinate with the replay system after a jump-to-time API call. The
callback syncs replay state, shows the control bar, and feeds replay
blobs to the 3D scene.

All CSS (.selected, .now-replaying-chip), DOM elements, sidebar timeline
click handling, Go backend jump-to-time endpoint, and tests were already
in place. This closes the cross-module coordination gap.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 15:41:39 -04:00
Argo Workflows CI
ef32604d2b ci: auto-bump version to 0.1.246 2026-04-24 19:30:51 +00:00
jedarden
80bcb88bb7 style(dashboard): replace remaining hardcoded colors with design tokens in live view and integrations
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 15:30:14 -04:00
Argo Workflows CI
fbe072bf90 ci: auto-bump version to 0.1.245 2026-04-24 19:15:19 +00:00
jedarden
61a2e1eafc style(dashboard): complete CSS tokenization pass on live view and timeline
Replace remaining hardcoded font-size, padding, and border-radius values
with design token variables in layout.css, timeline.css, live.html, and
setup.html. Add timeline explain button and selected-event highlight styles.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 15:14:40 -04:00
jedarden
dd2fdd789c style(dashboard): replace remaining hardcoded colors with design tokens
Continued CSS tokenization pass across ambient, fleet, live, simple,
integrations pages and their component stylesheets. Replaces hardcoded
`white`, `#1a1a2e`, and raw rgba values with semantic tokens from
tokens.css.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 15:14:40 -04:00
jedarden
55675943ce refactor(dashboard): complete home page restructure with tokenized live view
Home page (index.html) is now a clean status+cards layout (109 lines):
- Row 1: status headline with ok/warn/alert states
- Row 2: three cards linking to /live#zones, /fleet, /live#timeline
- Row 3: optional briefing, anomaly, security toggle
- Mobile bottom nav for Home/Live/Fleet/Setup

3D viewer lives at /live (live.html), fleet at /fleet, setup at /setup.
All routes served by Go chi router. home-cards.js connects to /ws/dashboard
for snapshot+incremental updates.

Remaining CSS tokenization: live.html buttons and layout.css status bar
now use design tokens instead of hardcoded colors. Added --orange token
for GDOP fair quality. timeline.js gains replay state fields.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 15:14:40 -04:00
jedarden
8f878c6cea style(dashboard): complete CSS tokenization and add live-view grid layout classes
Replace remaining hardcoded border-radius and color values across 22 CSS
files with design system tokens. Add .live-status-bar, .live-scene, and
.live-panel-* classes to layout.css for the grid-based live view shell.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 15:14:40 -04:00
Argo Workflows CI
f1f01a13e2 ci: auto-bump version to 0.1.244 2026-04-24 17:17:18 +00:00
jedarden
8269ce3fd6 style(dashboard): replace all hardcoded colors with design tokens
panels.css: replaced 17 hardcoded rgba values with semantic token
references (--alert, --warn-bg, --ok-bg, --border-strong, etc).
ambient.css: replaced one hardcoded blue rgba with --blue-muted.

Zero hardcoded hex/rgba color values remain outside tokens.css.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 13:16:42 -04:00
Argo Workflows CI
2838eedb4b ci: auto-bump version to 0.1.243 2026-04-24 17:14:34 +00:00
jedarden
1ade7732e4 fix(dashboard): wrap setup.html in app-shell grid container
setup.html was the only page not using the .app-shell CSS grid — its
elements were directly on the body with inline position styles. Wraps
content in .app-shell--live (viewport-filling variant), moves header
into .app-header grid area, and nests #scene-container inside .app-main.

Verified: grep for position:absolute across dashboard/css/ returns only
intentional decorative/component uses (pseudo-elements, toggles, tooltips,
dropdowns, canvas overlays) — zero on layout containers.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 13:14:02 -04:00
Argo Workflows CI
87045da575 ci: auto-bump version to 0.1.242 2026-04-24 17:07:31 +00:00
jedarden
beb6bd2af3 fix(dashboard): improve home-cards.js snapshot caching and alert handling
Cache the full WebSocket snapshot so incremental updates always have
complete state for banner and card rendering. Add fall/security alert
detection in the status banner with --alert level. Add armed security
state styling in home.css.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 13:07:18 -04:00
Argo Workflows CI
814e1b7721 ci: auto-bump version to 0.1.241 2026-04-24 16:47:03 +00:00
jedarden
bd3e89f2e5 feat(dashboard): tokenize CSS to design system tokens and fix home page styling
Convert hardcoded rgba colors across all dashboard CSS files to use
--ok-bg, --warn-bg, --alert-bg tokens from tokens.css per §8e design
system. Home page status banner and card tags now use proper semantic
tokens. Add layout.css import to live.html for shared nav structure.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 12:46:02 -04:00
Argo Workflows CI
0a070ecc54 ci: auto-bump version to 0.1.240 2026-04-24 16:09:27 +00:00
jedarden
21020e9fc9 feat(timeline): add tap-to-jump time-travel coordination
When timeline event is clicked in expert mode, emit jump_to_time command
with event timestamp. The time-travel player pauses live playback, seeks
CSI recording buffer to timestamp, and begins replay. Selected event
highlights in timeline and "Now replaying" chip appears in header.

Backend: POST /api/replay/jump-to-time creates replay session centered
on timestamp, replaces previous active session. Frontend: handleSeek()
in sidebar-timeline delegates to SpaxelReplay.jumpToTime() which calls
the API, shows replay control bar, and notifies Viz3D.

Tests: 7 Go test cases for jump-to-time endpoint, 8 JS test cases for
tap-to-jump interaction, event highlighting, and now-replaying chip.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 12:08:39 -04:00
Argo Workflows CI
4acb2c15bc ci: auto-bump version to 0.1.239 2026-04-24 14:12:20 +00:00
jedarden
12c344ea61 feat(dashboard): add /live and /setup routes for home page restructuring
The home page (index.html) was restructured into status headline + 3 cards.
The 3D viewer lives at /live (live.html), setup/calibration at /setup (setup.html).
Fleet page remains at /fleet. home-cards.js pulls snapshot from /ws/dashboard.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 10:11:37 -04:00
Argo Workflows CI
8fdb88e42c ci: auto-bump version to 0.1.238 2026-04-24 13:08:13 +00:00
jedarden
7162d4523e feat(dashboard): restructure home page as status headline + 3 cards
Per plan.md §8e information architecture:
- index.html (109 lines) is now a home page with status headline,
  3 cards (People & Zones, Devices & Fleet Health, Recent Events),
  optional extras row, and mobile bottom nav
- live.html serves the full 3D viewer at /live route
- home-cards.js connects to /ws/dashboard for snapshot + incremental updates
- tokens.css provides the Radix dark design system
- layout.css provides the CSS Grid app shell with responsive breakpoints
- home.css provides card grid, status banner, responsive mobile layout

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 09:07:43 -04:00
Argo Workflows CI
756faec80f ci: auto-bump version to 0.1.237 2026-04-24 11:43:40 +00:00
jedarden
3a85eaacc3 refactor(dashboard): remove duplicate component files
Delete non-canonical commandpalette.* and blepanel.js in favor of the
hyphenated command-palette.* and ble-panel.* which match the fleet-page.*
naming convention. Rename test file accordingly.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 07:43:13 -04:00
jedarden
c552ccd5a9 fix(viz3d): remove duplicate _renderer declaration
The IIFE had `let _renderer` on line 13 and `let _renderer = null` on
line 30, which throws SyntaxError and kills the entire Viz3D module,
cascading into panel layout failures on the home page.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 07:20:48 -04:00
Argo Workflows CI
859a89b014 ci: auto-bump version to 0.1.236 2026-04-24 11:07:39 +00:00
jedarden
efea321f19 feat(timeline): add search and filter to event timeline
Add server-side types filter (comma-separated) for category-based filtering,
fuzzy text search with FTS5 fallback on Enter, and improved client-side
filtering with character-sequence matching. Category checkboxes now send
types to server for efficient loading. Includes table-driven tests for types
filter, pagination, and combined filter scenarios.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 07:07:08 -04:00
Argo Workflows CI
a2fb948404 ci: auto-bump version to 0.1.235 2026-04-24 05:06:42 +00:00
jedarden
e676694fdc feat(provisioning): carry ms_ip in payload for mDNS-less networks
Add optional mothership IP override to the provisioning flow so nodes
on networks where mDNS is blocked (enterprise WiFi, mesh, VLANs) can
connect on first boot without manual intervention.

- Add ms_ip field to provisioning Payload and request structs
- Firmware writes ms_ip to both NVS_KEY_MS_IP and NVS_KEY_MS_IP_PROV
- Discovery prefers provisioned IP on first attempt, falls back to
  mDNS, then cached IP
- Web Serial wizard adds Mothership IP field in Network Troubleshooting
- Auto-populates IP when browser accesses dashboard by IP address
- Document when/how to use the override in docs/notes/mdns-override.md

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 01:06:05 -04:00
Argo Workflows CI
4db836a8a8 ci: auto-bump version to 0.1.234 2026-04-24 04:38:46 +00:00
jedarden
754d8e827c fix(ingestion): wire HMAC token validation into WebSocket hello handler
The tokenValidator field and hello-handler validation logic existed but were
never wired from main.go. Now ingestSrv.SetTokenValidator(provSrv.ValidateToken)
connects the provisioning server's HMAC-SHA256(installSecret, mac) derivation
to the ingestion server, so nodes with missing or mismatched tokens are
rejected via sendReject and disconnected. Includes unit tests covering valid
token, missing token, wrong token, no-validator backward compat, and an e2e
test verifying unprovisioned nodes cannot post CSI frames.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 00:38:21 -04:00
Argo Workflows CI
1999468cba ci: auto-bump version to 0.1.233 2026-04-19 01:37:56 +00:00
jedarden
33c2628e7e fix(onboard): lower flash baud rate to 115200 to prevent hang on embedded-flash boards
460800 causes the stub to hang mid-write on ESP32-S3 QFN56 boards with XMC
embedded flash. 115200 skips the post-stub baud rate negotiation entirely.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-18 21:37:44 -04:00
Argo Workflows CI
471db69dbc ci: auto-bump version to 0.1.232 2026-04-17 15:19:57 +00:00
jedarden
982f038e75 fix(firmware): report actual flash chip size in hello message via esp_flash_get_size()
Replaces the hardcoded flash_mb:16 with a runtime query so the mothership
receives the correct physical flash size regardless of the hardware variant.
On the 4MB XMC board this will now report 4; on a 16MB board it reports 16.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 11:19:45 -04:00
Argo Workflows CI
212a676f27 ci: auto-bump version to 0.1.231 2026-04-17 14:41:12 +00:00
jedarden
d83759899f fix(firmware): redesign partition table for 4MB flash; fix flash size in esptool.js
The XMC embedded flash on ESP32-S3 (QFN56) has JEDEC ID 164020 which esptool.js
does not recognise — it returns flash size -1 causing 'File doesn't fit in
available flash' before any bytes are written.

firmware/sdkconfig.defaults:
  CONFIG_ESPTOOLPY_FLASHSIZE 16MB → 4MB
  4MB is the minimum supported flash. The spi_flash check only panics when
  physical < header, so 4MB header is safe on 16MB boards as well.

firmware/partitions.csv:
  Redesigned to fit within 4MB flash:
    factory  0x010000–0x200000  (~1.9MB, fits current 1.7MB binary + 330KB headroom)
    ota_0    0x200000–0x3F0000  (~1.9MB, A/B OTA + rollback preserved)
    otadata  0x3F0000–0x3F2000  (8KB)
  Total flash used: 0x3F2000 (98.6% of 4MB). Drops ota_1 (was at 8MB, unusable
  on 4MB devices anyway); rollback still works factory↔ota_0.

dashboard/js/onboard.js:
  flashSize: 'detect' → '4MB'  (detect returned -1 for this chip's JEDEC ID;
  hardcoding '4MB' correctly sets the binary header for all supported boards)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 10:40:58 -04:00
jedarden
7cdcb361df chore: bump version to 0.1.230 (force rebuild with flash-detect and chip-validation fixes) 2026-04-17 10:06:14 -04:00