Skip to content

Add Maestro servo commands, WCB WLED board, and NaviCore Controller board#8

Merged
travisccook merged 2 commits into
travisccook:mainfrom
greghulette:navicore-maestro-servo-wled-navicore
Jul 22, 2026
Merged

Add Maestro servo commands, WCB WLED board, and NaviCore Controller board#8
travisccook merged 2 commits into
travisccook:mainfrom
greghulette:navicore-maestro-servo-wled-navicore

Conversation

@greghulette

Copy link
Copy Markdown
Contributor

This adds three things to the DroidNet command library, contributed from the NaviCore controller project (https://github.com/greghulette/NaviCore).

1. Maestro (Pololu) — servo commands

Adds the local Pololu Maestro command set to the existing maestro component (alongside the ;M{id}{seq} sequence trigger): Set servo position, Send servos home, Set speed / accel / speed+accel, Set active easing, Run script (subroutine), Stop script. Renamed the component + manifest entry to Maestro (Pololu).

2. WCB · WLED Lighting — new board wcb-wled

WCB-relayed WLED commands (;L<id>,VERB) with a WLED-id param: on / off / toggle, brightness, preset, color, effect (+ speed/intensity), palette, and a raw-JSON escape hatch.

3. NaviCore Controller — new board navicore

NaviCore controller-native sequence commands: Record clip (toggle), Play clip (+ loop), Stop record/playback.

Notes for maintainers

  • The servo and record/play/stop commands carry an optional "local" field, and the servo position a "unit":"servoPulse" field — these are NaviCore consumer hints for routing/UI. They're additive and safely ignored by other consumers; happy to drop or relocate them if you'd prefer the library stay consumer-agnostic.
  • The Maestro servo commands and the NaviCore commands use a non-WCB (direct/local) transport, unlike the ;M wcb-verb — flagged in case you'd rather model them as separate components.

🤖 Generated with Claude Code

…oard

- maestro.json: add the local Pololu servo command set (setTarget, goHome,
  setSpeed, setAccel, setSpeedAccel, setEasing, restartScript, stopScript) to
  the existing Maestro component, alongside the ;M sequence trigger; rename the
  component/manifest entry to "Maestro (Pololu)".
- wcb-wled.json (new): WCB-relayed WLED lighting commands (";L<id>,VERB") with a
  WLED-id param (power / brightness / preset / color / effect / palette / raw).
- navicore.json (new): NaviCore controller-native sequence commands
  (record / play / stop).
- manifest.json: register the two new boards.

The servo / record / play / stop commands carry an optional "local" routing hint
(and the servo position a "unit":"servoPulse" UI hint) used by the NaviCore
consumer; they are additive and safely ignored by other consumers.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Repository owner deleted a comment from github-actions Bot Jul 22, 2026
@travisccook

Copy link
Copy Markdown
Owner

@claude please review

@github-actions

github-actions Bot commented Jul 22, 2026

Copy link
Copy Markdown

Claude encountered an error after 3m 25s —— View job


Claude is reviewing this PR

Todo list

  • Gather context (PR diff, CLAUDE.md, changed files)
  • Review libraries/boards/maestro.json changes
  • Review new libraries/boards/navicore.json
  • Review new libraries/boards/wcb-wled.json
  • Review libraries/manifest.json changes
  • Run npm run validate and npm test
  • Post review feedback

- Pull the NaviCore board entirely. Its record/play/stop are controller-LOCAL
  actions with no wire grammar; forcing them into a serial-command book caused
  the universal {clip} matcher (swallowed any bare-numeric raw step), the
  duplicate record/play templates, the unsupported bool loop param, and the
  encoder:"none" throw. They stay in NaviCore's own local seed instead.
- Split Maestro by transport (board identity): `maestro` now carries only the
  ;M sequence-trigger WCB verb; new `maestro-native` (device-native) holds the
  raw Pololu protocol — setTarget/goHome/setSpeed/setAccel/setSpeedAccel/
  setEasing/restartScript/stopScript. Dropped the NaviCore-only `local`/`unit`
  hints so the board is consumer-agnostic.
- Fix wled.color pattern -> [0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})? (anchor-free,
  non-capturing) so ;L1,COL,FF0000 round-trips instead of falling to raw.
- Free-text params use `pattern` instead of the unsupported type:"text"
  (wled.json payload -> ".+", maestro.setEasing -> "[A-Za-z0-9]+").
- Bump libraryVersion 4.1.0 -> 4.2.0 (manifest + releases.json, byte-equal),
  update load-node/engine version assertions and component count 19 -> 21.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

@travisccook travisccook left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verified locally against the updated head (77f59c3): npm run validate exits clean and the full suite passes 324/324.

Thanks for reworking this properly rather than papering over the schema errors — splitting maestro-native out so each board carries a single transport, and dropping NaviCore rather than shipping a template that would have shadowed bare-numeric steps catalog-wide, were both the right calls.

The color-pattern fix is exactly right: anchors removed and the group made non-capturing, which is what the engine's inline splice requires. ;L1,COL,FF0000, ;L1,JSON,{"bri":128}, and the Maestro verbs all now round-trip byte-identically to the correct command id.

I also ran a full-catalog mis-attribution probe (every example re-parsed and checked against its owning command id — something the round-trip test doesn't assert). It found 4 mis-attributions, all pre-existing on main: the known astropixels-logics / rseries-logic shared @nM/@nP overlap. This PR introduces none.

@travisccook
travisccook merged commit 82b6a04 into travisccook:main Jul 22, 2026
2 checks passed
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.

2 participants