Commit graph

449 commits

Author SHA1 Message Date
jedarden
6bcd4711f1 fix: guard migration 7 ALTER TABLE with column existence check
SQLite doesn't support IF NOT EXISTS on ALTER TABLE ADD COLUMN.
The error_message and error_count columns already exist in the
triggers table from v0.1.33, causing migration 7 to fail on upgrade.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 17:27:24 -04:00
Argo Workflows CI
22a5bfe561 ci: auto-bump version to 0.1.186 2026-04-12 21:14:23 +00:00
jedarden
1cf11ac197 fix: resolve compilation errors breaking CI builds
- fleet/handler.go: add ota. package prefix to NodeOTAProgress
- notification_settings.go: remove duplicate declarations of
  testNotificationRequest, validateChannelConfig, writeJSON, and
  writeJSONError that conflict with notifications.go and utils.go;
  fix missing closing brace in validateTimeFormat
- cmd/mothership/main.go: use sigproc.HealthLogEntry (the actual
  return type of GetHealthHistory) instead of diagnostics.LinkHealthSnapshot

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 17:14:05 -04:00
Argo Workflows CI
6557977be2 ci: auto-bump version to 0.1.185 2026-04-12 02:42:09 +00:00
jedarden
136b2ecd97 feat: add OTA progress tracking to fleet status page
Add real-time OTA update progress broadcasting to dashboard clients:
- Hub.BroadcastOTAProgress() sends progress updates over WebSocket
- OTA Manager now broadcasts state transitions: pending → downloading → rebooting → verified/failed/rollback
- Dashboard can show live OTA status per node during fleet updates
- Includes test suite for fleet page functionality

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 22:41:51 -04:00
jedarden
c9d25cde17 Update fleet status page bead (spaxel-0w4) - implementation complete
The fleet status page is fully implemented with all required features:
- HTML structure with navigation, filters, bulk actions, modals
- JavaScript with state management, filtering, sorting, inline editing, camera fly-to, CSV export
- CSS with responsive design and comprehensive styling
- REST API endpoints for all fleet operations
- Comprehensive test coverage

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 22:41:51 -04:00
Argo Workflows CI
531b953f0a ci: auto-bump version to 0.1.184 2026-04-12 01:37:49 +00:00
jedarden
ff71d48962 feat: add OTA progress tracking to fleet status page
- Show "updating" status for nodes undergoing OTA updates
- Add OTAInProgress field to FleetNode response
- Improve updateAllNodes to trigger rolling OTA updates

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 21:37:37 -04:00
Argo Workflows CI
c83dccf576 ci: auto-bump version to 0.1.183 2026-04-12 01:03:04 +00:00
jedarden
d500900e0b feat: add feature discovery notification UI to proactive dashboard
Adds frontend implementation for feature discovery notifications:
- Polls /api/help/notifications every 30 seconds
- Displays notification cards with slide-in animation
- Handles action button clicks for navigation
- Persists dismissed notifications to prevent re-display
- Auto-dismisses after 30 seconds

Completes the feature discovery notifications feature for Phase 9,
complementing the backend notifier and monitor implementations.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 21:02:43 -04:00
Argo Workflows CI
362ba60895 ci: auto-bump version to 0.1.182 2026-04-11 23:52:26 +00:00
jedarden
70745bb577 feat: implement proactive quality prompts with link diagnostics
- Show non-blocking prompt card when ambient confidence drops below 0.6 for >5 minutes
- Add 'Diagnose' button that fetches and displays root cause analysis
- Add 'Dismiss for today' option with localStorage persistence
- Implement pulsing amber highlight on 3D link lines for degraded links
- Display diagnostic results in plain English with possible causes and actions
- Do NOT show prompts for transient drops (< 5 minutes)
- Add GetDiagnosticFor method to diagnostics package for timestamp-based queries
- Wire up /api/links/{linkID}/diagnostics endpoint with health snapshots

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 19:51:57 -04:00
Argo Workflows CI
479ee7e3d9 ci: auto-bump version to 0.1.181 2026-04-11 21:56:00 +00:00
jedarden
4734e62aa1 feat: implement notification configuration UI for dashboard
Add comprehensive notification settings with delivery channel selector,
channel-specific credential fields, test notification button, event
type toggles, quiet hours picker, smart batching, and morning digest.

Backend:
- Add NotificationSettingsHandler with GET/PUT /api/settings/notifications
- Add POST /api/notifications/test endpoint
- Support ntfy, pushover, webhook channels with validation
- Store settings in settings table with proper JSON encoding

Frontend:
- Integrate notification settings into settings panel
- Channel selector with dynamic credential fields
- Event type toggles for filtering notifications
- Quiet hours time picker with day-of-week bitmask
- Smart batching toggle (default on)
- Morning digest toggle (default on)
- Test notification button with immediate feedback

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 17:55:31 -04:00
Argo Workflows CI
adfacf1951 ci: auto-bump version to 0.1.180 2026-04-11 17:37:29 +00:00
jedarden
2d34f77d87 feat: implement expert vs simple mode for timeline panel
Add mode switching for timeline panel. Expert mode shows all event
types with system events as secondary (smaller, greyed). Simple mode
shows only person-relevant events: ZoneTransition, FallDetected,
AnomalyDetected, SleepSessionEnd. Mode is set by dashboard mode and
passed as ?mode=expert or ?mode=simple to API.

Changes:
- dashboard/index.html: Add sidebar timeline panel HTML and script include
- dashboard/js/sidebar-timeline.js: Add sidebar timeline with mode switching
- dashboard/js/sidebar-timeline.test.js: Add tests for mode switching behavior
- mothership/internal/ingestion/server.go: Add health score to link info

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 13:37:17 -04:00
Argo Workflows CI
5735d000b3 ci: auto-bump version to 0.1.179 2026-04-11 17:22:48 +00:00
jedarden
6bfe4aad01 feat: implement expert vs simple mode for timeline panel
- Add mode switching for timeline panel with ?mode=expert or ?mode=simple
- Expert mode displays all event types with system events as secondary (smaller, greyed)
- Simple mode shows only person-relevant events: ZoneTransition, FallDetected, AnomalyDetected, SleepSessionEnd, zone_entry/exit, portal_crossing, fall_alert, anomaly, security_alert
- Backend defaults to expert mode when mode parameter is empty or invalid
- Frontend syncs dashboard mode with SpaxelSimpleModeDetection for mode changes
- Add CSS styling for new event types (ZoneTransition, FallDetected, AnomalyDetected, sleep_session_end)
- Update isValidEventType to include new event types
2026-04-11 13:22:34 -04:00
Argo Workflows CI
c9b36092d5 ci: auto-bump version to 0.1.178 2026-04-11 14:34:44 +00:00
jedarden
5d78e08441 fix: correct test expected responses to include newline
The writeJSON function uses json.NewEncoder which adds a newline
character. Changed raw string literals to interpreted strings
so \n becomes an actual newline character.
2026-04-11 10:34:31 -04:00
jedarden
a984576be9 feat: complete fleet status page implementation
- Added dropdown menu for More actions button with options:
  - Re-assign Role
  - View Health History
  - View Event History
  - Remove from Fleet

- Added CSS styles for dropdown menus with proper positioning
  and hover states

- Extended FleetHandler with additional API endpoints:
  - PATCH /api/nodes/{mac}/label - update node label
  - POST /api/nodes/{mac}/locate - send identify command
  - POST /api/nodes/{mac}/role - assign new role
  - DELETE /api/nodes/{mac} - remove from fleet

- Added label validation (max 32 characters)

- Improved test code quality with helper functions

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 10:34:31 -04:00
Argo Workflows CI
3d17b0f888 ci: auto-bump version to 0.1.177 2026-04-11 12:54:40 +00:00
jedarden
2824affde7 feat: crowd flow visualization implementation
Implements comprehensive crowd flow visualization for the Spaxel
WiFi CSI-based indoor positioning system. The feature tracks movement
patterns over time and renders them as directional flow maps and dwell
hotspot heatmaps.

Key components:
- FlowAccumulator: Subscribes to TrackManager updates (10 Hz) and
  accumulates trajectory data with 0.2m sampling threshold
- SQLite tables: trajectory_segments, dwell_accumulator, detected_corridors
- Flow map computation: Bresenham's line algorithm for grid traversal,
  5-minute cache, time/person filtering
- Dwell heatmap: Stationary detection (< 0.1 m/s), normalized 0-1
- Corridor detection: Circular variance analysis, connected components
- 3D visualization: Animated arrows (flow), heatmap patches (dwell),
  raised platforms (corridors)
- REST API: /api/analytics/flow, /api/analytics/dwell, /api/analytics/corridors
- Dashboard controls: Time/person filters, layer toggles, auto-refresh

Background tasks:
- Daily pruning of trajectory segments older than 90 days
- Weekly corridor detection and recomputation

Load shedding integration:
- Suspends crowd flow accumulation at Level 1 (≥80ms iteration time)
- Respects ShouldAccumulateCrowdFlow() flag from loadshed package

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 08:54:10 -04:00
Argo Workflows CI
c1c4d5a751 ci: auto-bump version to 0.1.176 2026-04-11 12:34:41 +00:00
jedarden
a97960bf67 fix: resolve analytics API test failures and improve corridor response format
- Fix TestAnalyticsHandler_ErrorHandling to use proper in-memory database
  instead of nil database which caused nil pointer dereference
- Update handleGetCorridors to return corridors wrapped in {corridors: [...]}
  for consistency with frontend expectations from crowdflow.js

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 08:34:24 -04:00
Argo Workflows CI
7cd5297f66 ci: auto-bump version to 0.1.175 2026-04-11 12:15:13 +00:00
jedarden
bbb29a2629 fix: resolve remaining Go compilation errors across mqtt, analytics, localization, ingestion
- cmd/mothership/main.go: fix GetAllZones (single return), LastSeenAt vs LastSeenMs,
  remove undefined fusionEngine block, fix weights.GetLinkWeight usage, hoist
  learningHandler scope, remove unused recordingBuf/lastDetectionEvent vars, remove
  sync import, fix computeZoneQuality pointer dereference, fix pred field names
  (PredictedNextZoneID/PredictionConfidence), fix AccuracyStats.TotalPredictions,
  add GetNodeOfflineDuration to healthProviderAdapter, fix GetAccuracyDelta stub
- internal/api/guided.go: refactor GuidedManager interface to use time.Duration for
  TriggerNodeOffline, use any for zonesHandler/nodesHandler, remove diagnostics.Tooltip
  dependency, add GetTooltipAny type-assertion approach for cross-package tooltip access
- internal/api/tracks.go: unify TracksProvider to use signal.TrackedBlob directly via
  type alias to resolve interface mismatch
- internal/api/diurnal.go: add signalProcessorManagerAdapter and
  NewDiurnalHandlerFromSignal to bridge signal.ProcessorManager to DiurnalProcessorManager
- internal/guidedtroubleshoot/quality.go: add RecordEdit, MarkHintShown, GetTooltipAny
  methods to Manager to satisfy api interfaces
- internal/fusion/fusion.go: remove unused log import, fix oy declared-and-not-used

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 08:15:00 -04:00
Argo Workflows CI
ba4074e84d ci: auto-bump version to 0.1.174 2026-04-11 11:37:16 +00:00
jedarden
33e96d82d0 feat: add person filter dropdown to crowd flow visualization
The crowdflow.js module expected a person filter dropdown in the patterns
section of the dashboard UI. This dropdown allows filtering flow and dwell
data by specific people or viewing all people together.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 07:37:05 -04:00
Argo Workflows CI
0ca4b47f28 ci: auto-bump version to 0.1.173 2026-04-11 11:27:32 +00:00
jedarden
f99dc15a2d feat: complete crowd flow visualization implementation
- Fix Viz3D exports to include flow visualization functions
- Export setFlowLayerVisible, setDwellLayerVisible, setCorridorLayerVisible
- Export setFlowTimeFilter, setFlowData, setDwellData, setCorridorData
- Remove duplicate setDwellLayerVisible function definition

This completes the crowd flow visualization feature that was
already implemented in the backend (flow.go) and frontend
(crowdflow.js, viz3d.js) but had missing exports in the Viz3D module.
2026-04-11 07:27:21 -04:00
Argo Workflows CI
26553ed954 ci: auto-bump version to 0.1.172 2026-04-11 10:39:26 +00:00
jedarden
abaf070f47 test: add missing GetSystemMode method to mockDetectorProvider
Fixes compilation error in security tests by implementing the
GetSystemMode() method that was added to the DetectorProvider
interface.
2026-04-11 06:39:16 -04:00
Argo Workflows CI
d5a5b74e0c ci: auto-bump version to 0.1.171 2026-04-11 10:30:20 +00:00
jedarden
af64a30af6 feat: home automation integration (MQTT and webhooks)
Add comprehensive MQTT and webhook integration for Home Assistant and external services:

MQTT Client (internal/mqtt/client.go):
- Optional MQTT client with exponential backoff reconnect (5s-120s)
- TLS support for mqtts:// connections
- Home Assistant auto-discovery for persons, zones, fall detection, system health, system mode
- Topic structure: spaxel/{mothership_id}/person/{id}/presence, zone/{id}/occupancy, etc.
- LWT (Last Will and Testament) for availability
- Dynamic configuration updates via API
- Retained messages for presence and occupancy states

MQTT Publisher (internal/mqtt/publisher.go):
- Event bus subscriber publishing zone entry/exit, fall alerts, anomalies
- Person presence tracking across zones with home/not_home states
- Zone occupancy counting with occupants list
- Periodic system health publishing (60s interval)
- HA discovery methods for all entity types
- Person and zone discovery removal on delete

System Webhook (internal/webhook/publisher.go):
- Single webhook URL receiving all events with X-Spaxel-Event header
- JSON payload with event_type, timestamp, zone, person, blob_id, severity, detail
- Retry policy: one retry after 30s on 5xx errors
- Test webhook endpoint for configuration verification

API Integration Handler (internal/api/integrations.go):
- GET/POST /api/settings/integration for MQTT and webhook configuration
- POST /api/settings/integration/test for testing connections
- Settings persisted in database settings table
- Integration with existing MQTTClient and WebhookPublisher interfaces

Dashboard Integration UI (dashboard/integrations.html, js/integrations.js):
- Settings panel with MQTT broker URL, username, password (masked), TLS toggle
- Discovery prefix configuration
- Test Connection and Publish Discovery buttons
- System webhook URL configuration with enable toggle
- Connection status indicator with error messages

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 06:29:51 -04:00
Argo Workflows CI
022296cce2 ci: auto-bump version to 0.1.170 2026-04-11 09:23:48 +00:00
jedarden
bdbbdb22f7 test: morning digest tests passing
All morning digest tests pass:
- TestMorningDigestDelivery: bundles queued events at quiet_hours_end
- TestMorningDigestNotSentWhenDisabled
- TestMorningDigestOncePerDay
- TestMorningDigestEmptyNotSent
- TestMorningDigestIncludesAllEvents
- TestMorningDigestClearedAfterSend
- TestMorningDigestWithMixedPriorities
- TestMorningDigestTitleFormat

Acceptance criteria met: Morning digest tests pass.
2026-04-11 05:23:34 -04:00
Argo Workflows CI
3a74e6779f ci: auto-bump version to 0.1.169 2026-04-11 09:19:18 +00:00
jedarden
1a32011739 test: fix morning digest and notification tests
- Fix summary title format: only add "+" when events > maxBatchSize
- Fix TestQuietHoursHighPriority: HIGH priority respects quiet hours (queued)
- Fix TestGetHistory: flush batched events before checking history

All morning digest tests now pass, validating that queued events are
bundled and delivered at quiet_hours_end.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 05:18:47 -04:00
jedarden
6163226f5b test: fix webhook publisher tests - use io.ReadAll instead of strings.Builder.ReadFrom 2026-04-11 05:18:47 -04:00
Argo Workflows CI
4f3cee1c3d ci: auto-bump version to 0.1.168 2026-04-11 08:55:19 +00:00
jedarden
bb35813816 test: ntfy delivery client tests passing with mocks 2026-04-11 04:55:03 -04:00
Argo Workflows CI
b4931198af ci: auto-bump version to 0.1.167 2026-04-11 08:52:12 +00:00
jedarden
dc0f0cfb2b test: fix ntfy delivery client tests with proper mock HTTP server
- Fix TestNtfyClientSend body verification using bytes.Buffer
- Fix TestAttachPNGImage slice bounds error with flexible assertions
- Add new tests: TestNtfyClientValidPriorities, TestNtfyClientMessageFieldPriority,
  TestNtfyClientEmptyMessage, TestNtfyClientCustomURL, TestNtfyClientClickHeader,
  TestNtfyClientEmailHeader
- All 18 ntfy delivery client tests now pass with mock HTTP server
2026-04-11 04:52:00 -04:00
Argo Workflows CI
b45a630737 ci: auto-bump version to 0.1.166 2026-04-11 08:43:32 +00:00
jedarden
7c479e7afe test: quiet hours gate tests passing
- LOW at 23:00 with 22:00-07:00 quiet hours -> queued (TestQuietHoursGate_LowAt23pmQueued)
- URGENT at 23:00 -> delivered immediately (TestQuietHoursGate_UrgentAt23pmDelivered)
- MEDIUM at 23:00 -> queued (TestQuietHoursGate_MediumAt23pmQueued)
- HIGH at 23:00 -> queued during quiet hours, delivered outside (TestQuietHoursGate_HighAt23pmDelivered)

Acceptance criteria met: Quiet hours tests pass (queueing, bypass).
2026-04-11 04:43:06 -04:00
Argo Workflows CI
576ec41509 ci: auto-bump version to 0.1.165 2026-04-11 08:37:07 +00:00
jedarden
37c04dead4 test: enhance batching logic tests for notifications
Add comprehensive tests for notification batching behavior:
- 3 LOW events in 10s -> 1 notification (batched)
- 1 URGENT -> immediate (bypasses batching)
- Priority separation (LOW/MEDIUM batched separately)
- Quiet hours behavior per priority

All batching tests pass.
2026-04-11 04:36:55 -04:00
Argo Workflows CI
0196a9989a ci: auto-bump version to 0.1.164 2026-04-11 08:29:27 +00:00
jedarden
1903085e12 test: enhance floor-plan renderer tests with precise coordinate and color verification
- Add TestZoneBoundariesAtCorrectCoordinates to verify zone boundaries appear at correct pixel coordinates
- Add TestZoneBoundaryEdges to verify zone edge detection
- Enhance TestPixelColors with accurate background color verification (#1a1a2e)
- Fix person color detection by sampling multiple pixels to find red fill
- Tests verify 300x300 PNG dimensions, correct zone boundary coordinates, and accurate colors
- All renderer tests pass

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 04:29:13 -04:00