Commit graph

617 commits

Author SHA1 Message Date
jedarden
54172abd03 fix(sim): resolve compile error in CSI frame generator
Fix byte constant overflow for noise_floor field by using an int8
variable instead of a constant conversion expression. Also update
channel field to use --channel flag value instead of hardcoded 6.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 21:26:29 -04:00
Argo Workflows CI
c8622fb510 ci: auto-bump version to 0.1.265 2026-04-25 00:37:33 +00:00
jedarden
85c763253b chore(dashboard): remove stale simple/expert mode references from CSS comments
The Simple/Expert toggle was removed in an earlier commit but left behind
stale comments referencing "mode toggle bar", "expert mode", and
"simple.html" in CSS files. Clean these up to avoid confusion.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 20:37:18 -04:00
Argo Workflows CI
f44826cf23 ci: auto-bump version to 0.1.264 2026-04-25 00:12:33 +00:00
jedarden
959a0c5962 feat(timeline): tap-to-jump time-travel with correct mode handling
Wire sidebar timeline handleSeek to navigate to timeline view in simple
mode instead of attempting replay. Fix onRouterModeChange to properly
detect expert vs simple modes based on route name. All 41 tests pass.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 20:11:44 -04:00
Argo Workflows CI
b111b4a1e6 ci: auto-bump version to 0.1.263 2026-04-25 00:05:25 +00:00
jedarden
cf963ad905 feat(explainability): add explain.js entry point module for right-click/long-press explain mode
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 20:05:10 -04:00
Argo Workflows CI
7a6d8fc40c ci: auto-bump version to 0.1.262 2026-04-24 23:24:56 +00:00
jedarden
6bf1e0394a feat(explainability): detection explainability overlay with per-link contributions, Fresnel zones, and BLE identity
Implements the full explainability overlay for understanding why a blob was detected:
- ExplainabilitySnapshot generation with per-link contribution tracking and zone decay
- Fresnel zone ellipsoid geometry computation and 3D wireframe rendering
- WebSocket request_explain / blob_explain flow for on-demand snapshots
- Right-click, long-press, click, and hover tooltip activation paths
- X-ray overlay dims non-contributing elements, highlights contributing links
- Sidebar panel with confidence gauge, links table, sparklines, BLE match card
- Escape key and backdrop click to exit, restoring scene state

Also includes: simple mode removal, CSS cleanup, fleet page enhancements, sidebar timeline fixes.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 19:23:55 -04:00
Argo Workflows CI
abecba6d74 ci: auto-bump version to 0.1.261 2026-04-24 23:21:29 +00:00
jedarden
3038f632b7 fix(dashboard): CSS syntax fixes and timeline mode detection cleanup
Fix missing colons in CSS declarations across timeline.css and replay.css
that broke gap/padding/margin/bottom properties. Simplify timeline mode
detection to use router callbacks instead of SpaxelSimpleModeDetection.
Add aria-labels to select elements for accessibility.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 19:20:58 -04:00
Argo Workflows CI
f297872a3a ci: auto-bump version to 0.1.260 2026-04-24 22:47:04 +00:00
jedarden
03fd4e2752 feat(onboarding): migration window, Unpaired badge, re-provision flow
Nodes that connect without a valid token during the migration window are
now accepted and flagged as Unpaired rather than rejected.  Fleet health
surfaces the flag so the dashboard can show an amber Unpaired badge in
the MAC column, an "Unpaired" status badge, and a ↺ re-provision action
button that re-opens the onboarding wizard in reprove mode (skips the
firmware-flash step, targets the specific node's MAC during detect).

- ingestion/server: migrationDeadline + Unpaired flag on NodeConnection
- fleet/fleethandler: UnpairedProvider interface, merges unpaired MACs
  into fleet health response
- config: SPAXEL_MIGRATION_WINDOW_HOURS (default 24 h, range 0-168)
- main: wires migration deadline and unpaired provider at startup
- onboard.js: reprove(mac) public API, skip-flash + targeted-detect mode
- fleet.js: Unpaired badge, Re-provision button, unpaired banner, ⚠ in
  role list, reproveNode public API
- wizard.css: .wizard-reprove-banner amber styling

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 18:46:47 -04:00
Argo Workflows CI
bbf3b8ba04 ci: auto-bump version to 0.1.259 2026-04-24 22:32:16 +00:00
jedarden
ce7108a277 fix(dashboard): register sidebar timeline for simple mode detection changes
The sidebar timeline module was not listening for SpaxelSimpleModeDetection
mode changes, causing the tap-to-jump simple mode test to fail. Added
onSimpleModeChange handler and registration so the sidebar correctly
switches to simple mode and navigates to timeline view instead of replay.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 18:31:17 -04:00
jedarden
6951ff1d00 feat(dashboard): add axe-core accessibility CI gate for all dashboard pages
Add @axe-core/playwright with Playwright test runner that asserts zero
WCAG 2A/2AA violations across index, live, fleet, setup, and
integrations pages. Fix contrast violations on integrations page: use
darker blue for primary buttons, lighter text for descriptions/hints,
and add body-level dark background in layout.css.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 18:31:17 -04:00
Argo Workflows CI
0bf11c51f6 ci: auto-bump version to 0.1.258 2026-04-24 22:15:23 +00:00
jedarden
4960fbfd51 feat(dashboard): implement tap-to-jump time-travel coordination
Timeline events now delegate to SpaxelReplay.jumpToTime() for coordinated
replay session creation instead of making direct fetch calls. Selected
events highlight with timeline-event-selected class, and cross-module
selection is cleared between sidebar and full-page timeline views.

- timeline.js: use SpaxelReplay.jumpToTime() in handleSeek, export
  clearSelection and hideNowReplayingChip, clear sidebar on jump
- sidebar-timeline.js: clear full-page timeline selection on sidebar jump
- replay.js: return promise from exitReplayMode for proper chaining
- timeline.test.js: 14 tests covering timestamp emission, highlighting,
  now-replaying chip, cross-module coordination, simple mode gating,
  and error handling

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 18:14:51 -04:00
Argo Workflows CI
60cac48a02 ci: auto-bump version to 0.1.257 2026-04-24 21:47:05 +00:00
jedarden
8db0795017 feat(dashboard): make mobile frame rate cap configurable via URL parameter
Add ?maxFps=N URL parameter to configure the frame rate cap at renderer
initialization time. ?maxFps=30 caps at 30fps (default for struggling
mobile devices), ?maxFps=60 disables the initial cap, and ?maxFps=0
disables both the cap and auto-detection. Also respects the
autoDetectStrugglingDevice config flag in the detection function.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 17:46:26 -04:00
Argo Workflows CI
972d70315e ci: auto-bump version to 0.1.256 2026-04-24 21:45:33 +00:00
jedarden
e3cd805629 fix(dashboard): remove ES module export from notifications.js
notifications.js was loaded as a classic <script> in simple.html but used
`export class`, causing "Unexpected token 'export'" and a blank page.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 17:45:12 -04:00
Argo Workflows CI
23af8d9b73 ci: auto-bump version to 0.1.255 2026-04-24 21:36:40 +00:00
jedarden
bc5ebc0028 feat(dashboard): implement command palette with fuzzy search and time navigation
Ctrl+K / Cmd+K universal search interface for expert mode with:
- Fuzzy matching (prefix, substring, word-level, subsequence)
- Time navigation via @ prefix (@3am, @yesterday 11pm, @this morning, @last night)
- 36 commands across navigation, view, system, security, appearance, actions, help
- Entity search across zones, people, nodes, events
- Recent history with localStorage persistence
- Expert-mode gating (disabled in simple/ambient modes)
- Keyboard navigation (arrow keys, Enter, Escape, Tab)
- Toolbar shortcut hint with platform-aware display (⌘K on Mac)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 17:36:14 -04:00
Argo Workflows CI
f3f70dc070 ci: auto-bump version to 0.1.254 2026-04-24 21:12:58 +00:00
jedarden
05fe8b88cb fix(dashboard): center home page max-width containers
The status banner, cards grid, and extras grid all had margin: 0
with max-width set, causing them to left-align instead of centering
at wider viewports. Changed to margin: 0 auto for proper centering.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 17:12:45 -04:00
jedarden
7d3a6da303 fix(dashboard): add viewport-fit=cover and apple mobile meta tags to integrations page
The responsive CSS grid layout (css/layout.css) was already fully
implemented with all required features: app-shell grid container,
responsive breakpoints at 1023px and 639px, touch targets >= 44px,
safe-area-inset-bottom for mobile bottom nav, and no position:absolute
on any layout containers. This commit fixes a minor inconsistency where
integrations.html was missing viewport-fit=cover and apple-mobile-web-app
meta tags present on all other dashboard pages.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 17:12:27 -04:00
Argo Workflows CI
c793846ca3 ci: auto-bump version to 0.1.253 2026-04-24 20:58:02 +00:00
jedarden
5707a89ad5 fix(dashboard): repair CSS syntax errors and complete token migration
Fix systemic missing-colon bugs in layout.css where property values
like top, left, right, bottom, gap, padding were directly followed by
var() without a colon separator. This broke all fixed-position panels
in the live view. Also add missing --space-half token to tokens.css
and complete design token migration across remaining CSS files.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 16:57:32 -04:00
Argo Workflows CI
87d46b391b ci: auto-bump version to 0.1.252 2026-04-24 20:41:52 +00:00
jedarden
1e8876d6b4 style(dashboard): continue design token migration across remaining CSS
Replace additional hard-coded colors with design tokens in layout,
notifications, panels, timeline, and other CSS files.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 16:41:18 -04:00
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