Repository navigation
Command library 4.4.0: DroidNet fork brightness - #10
Conversation
…ness
Two device-native boards, each listed right after its stock board, describe
commands only the DroidNet forks run. Stock firmware ignores both, and the
stock boards are unchanged.
- droidnet-rseries-logic (RSeriesLogic · DroidNet fork): rseries.cfg.brightness,
#LEBRI{unit}{level}. New enum rseries.unit ("" both, F front, R rear); the
rseries.target enum cannot be reused, because two digit placeholders side by
side would parse #LEBRI200 as target 2, level 00.
- droidnet-flthy-hps (FlthyHPs · DroidNet fork): flthy.led.brightness,
H{unit}B{level}. flthy.designator is copied from flthy-hps; unit default A.
- Both: level int 1-255, required, no default; cosmetic, Lighting, community;
no duration suffix (the stock Flthy board's |n would otherwise attach).
- firmware keeps <source_commit> until both forks merge their branches.
test/droidnet-forks.test.js checks that each example parses to its own id and
round-trips, that a level-only encode uses the every-unit default, the manifest
placement, that no ! command exists and that rseries.effect stops at 105.
load-node pins 24 components.
npm run validate exits 0; npm test 420/420.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VnqRz7vGF5Xusa3WLbo38J
- libraries/manifest.json: libraryVersion 4.4.0; generatedFrom appends "DroidNet forks (2026-09)". - releases.json: latest and libraries[0] -> 4.4.0, releasedAt today, notes for the two fork boards (the firmware each needs, RAM-only level, stock boards unchanged). Boards 22 -> 24, commands 500 -> 502. - package.json and package-lock.json (top-level and packages[""]) -> 4.4.0. - Test pins: load-node and engine libraryVersion 4.4.0, and a new load-node test that package.json, package-lock.json and releases.json carry the manifest's version (the Signal Booster's vendor-sync test needs all four). npm run validate exits 0; npm test 421/421. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VnqRz7vGF5Xusa3WLbo38J
- schema/library.schema.json: safety enum adds `storedcommand` ("runs a command
the user stored on the board, whose effect the library cannot see").
- wcb-native.json: config -> storedcommand for wcb.runSeq, wcb.runSeqLong,
wcb.runSeqLocal, wcb.runSeqLongLocal (;C<key> / ;SEQ<key> run-sequence).
- wcb-dfp.json / wcb-mp3.json: cosmetic -> storedcommand for the ONFIN,<key>
play+callback commands (dfp.playCb, dfp.folderCb, dfp.mp3FolderCb,
mp3.playCb, mp3.playFsCb) - ONFIN runs the stored ;C<key> after the track.
Queries, save, clear, timer and the ONERR setters stay config.
- assets/app.css: .dn-safety-storedcommand joins the movement/power warn rule
so the reference-page badge isn't grey.
- Docs: CLAUDE.md, docs/BOARD_AUTHORING_GUIDE.md, CONTRIBUTING.md,
docs/INTEGRATION_GUIDE.md and .github/workflows/claude-review.yml all
describe the new class; the review workflow gets a rule that flags a
stored-command runner mislabeled cosmetic/config.
- releases.json: latest.notes records the new class.
- Tests: library.test.js allows storedcommand; wcb-621.test.js pins all 9
storedcommand ids, pins ten related ids as config, and updates the wcb-dfp
non-cosmetic list.
npm run validate exits 0; npm test 423/423. grep -rn '"storedcommand"'
libraries/boards | wc -l -> 9.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VnqRz7vGF5Xusa3WLbo38J
Both forks merged native-brightness into main and pushed it. Each firmware field now names the source_commit in that fork's firmware/manifest.json: - droidnet-rseries-logic: travisccook/DroidNet-RSeriesLogics @ aa45d79 (on origin/main; contains #LEBRI under src/native/) - droidnet-flthy-hps: travisccook/DroidNet-FlthyHPs @ 75755de (on origin/main; src/main.cpp has the DroidNet native brightness markers) A new test in droidnet-forks.test.js requires the two fork components' firmware to match ^travisccook/DroidNet-(RSeriesLogics|FlthyHPs) @ <sha>$, so a placeholder cannot be merged. The stock boards' firmware strings are free text and are not checked. releases.json releasedAt is already today's date, so it has no diff to commit. npm run validate exits 0; npm test 425/425 (13 suites) - two more than the 423 the brief's Step 6 expected, accounted for by Task S's two storedcommand tests added to the suite after this brief was validated. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VnqRz7vGF5Xusa3WLbo38J
Automated reviewChecks: ✅ all pass.
Safety-class fix (the required item, #3 in review instructions): correctly done and complete. I grepped every board file for
Commands that only manage stored sequences (save/list/get/clear, timer, The new New boards ( Versioning: src/*.js: unchanged in this PR — nothing to review under item 4. No issues found. This is a clean, well-tested PR that does exactly what the safety-class rule requires, with no missed cases. |
releases.json latest.notes said "The stock boards are unchanged," but this release changes the safety class (config -> storedcommand) of run-sequence and play+callback commands on three stock WCB boards (wcb-native, wcb-dfp, wcb-mp3). Narrow the sentence to the two boards this release actually leaves untouched: RSeriesLogic and FlthyHPs. npm run validate exits 0; npm test 425/425 (13 suites). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VnqRz7vGF5Xusa3WLbo38J
Automated review1. Checks
2. Board-contribution rules
3. Safety-class check (HIGH SEVERITY item) — no mislabeling found, and this PR fixes a prior one
4. src/*.jsNo changes to Minor/non-blocking notes
Overall: clean, well-tested PR. No blocking issues found. |
Minor release 4.4.0: two DroidNet fork boards, each listed right after its stock board.
droidnet-rseries-logic): Brightness,rseries.cfg.brightness,#LEBRI{unit}{level}. The unit is none (both displays),ForR; the level is 1-255. Firmware:travisccook/DroidNet-RSeriesLogics @ aa45d79.
droidnet-flthy-hps): Brightness,flthy.led.brightness,H{unit}B{level}.The unit is
F R T X Y Z A, defaultA; the level is 1-255. Firmware: travisccook/DroidNet-FlthyHPs @ 75755de.Both commands are cosmetic, Lighting and community confidence, with no duration suffix. Stock firmware ignores them,
and the level is RAM-only. The stock boards are unchanged. Boards 22 -> 24, commands 500 -> 502. Every example
parses to its own id and round-trips (
test/droidnet-forks.test.js), and a test rejects a placeholderfirmwarevalue.npm run validateexits 0;npm test425/425 (the branch also carries thestoredcommandsafety class, approvedseparately and added between Tasks 2 and 3; the brief's template here said 423/423 before that task existed).
Design: droidnet-comlink
docs/superpowers/specs/2026-09-22-fork-brightness-and-library-design.md, section 4.🤖 Generated with Claude Code
https://claude.ai/code/session_01VnqRz7vGF5Xusa3WLbo38J