Skip to content

feat: dynamic classifier classes, per-node UI, XSS fix, RSSI fix#328

Open
taylorjdawson wants to merge 1 commit intoruvnet:mainfrom
taylorjdawson:feat/per-node-ui-dynamic-classifier
Open

feat: dynamic classifier classes, per-node UI, XSS fix, RSSI fix#328
taylorjdawson wants to merge 1 commit intoruvnet:mainfrom
taylorjdawson:feat/per-node-ui-dynamic-classifier

Conversation

@taylorjdawson
Copy link
Copy Markdown

Summary

Follow-up to #326 (per-node state pipeline) — adds the UI, classifier, and security improvements that complement the server-side per-node tracking.

  • Dynamic adaptive classifier: activity classes discovered from training data filenames (train_<class>_<desc>.jsonl) — no code changes needed to add new classes
  • Per-node UI cards: individual node status with color-coded markers, RSSI, variance, classification
  • Colored 3D node markers: 8-color palette in gaussian splat view for multi-node differentiation
  • XSS security fix: UI uses createElement/textContent instead of innerHTML with server data
  • RSSI sign fix: saturating_neg() ensures dBm values are always negative
  • GET /api/v1/nodes endpoint: per-node health monitoring REST API
  • node_features WebSocket field: per-node breakdown in SensingUpdate messages
  • Firmware watchdog fix: yield after every frame to prevent IDLE1 task starvation (Unable to receive the data from esp32 #266)

Context

PR #289 was opened on March 22 with a comprehensive per-node CSI separation implementation. PR #326 merged on March 27 covering the core HashMap<u8, NodeState> tracking. This PR extracts the remaining features from #289 that #326 did not include, rebased cleanly on top of current main.

Addresses #237, #276, #282

Test plan

  • cargo check -p wifi-densepose-sensing-server compiles cleanly
  • Single-node: UI shows 1 node card, identical behavior to before
  • Multi-node: each node gets colored marker + individual status card
  • Dynamic classifier: add train_cooking_kitchen.jsonl, train → model includes "cooking" class
  • /api/v1/nodes returns per-node health JSON
  • Verify no XSS: node names with <script> tags render as text, not HTML

🤖 Generated with Claude Code

Complements ruvnet#326 (per-node state pipeline) with additional features:

- Dynamic adaptive classifier: discover activity classes from training
  data filenames instead of hardcoded array. Users add classes via
  filename convention (train_<class>_<desc>.jsonl), no code changes.
- Per-node UI cards: SensingTab shows individual node status with
  color-coded markers, RSSI, variance, and classification per node.
- Colored node markers in 3D gaussian splat view (8-color palette).
- Per-node RSSI history tracking in sensing service.
- XSS fix: UI uses createElement/textContent instead of innerHTML.
- RSSI sign fix: ensure dBm values are always negative.
- GET /api/v1/nodes endpoint for per-node health monitoring.
- node_features field in WebSocket SensingUpdate messages.
- Firmware watchdog fix: yield after every frame to prevent IDLE1 starvation.

Addresses ruvnet#237, ruvnet#276, ruvnet#282

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant