diff --git a/libraries/boards/psi-pro.json b/libraries/boards/psi-pro.json index 91b6d01..bd5a693 100644 --- a/libraries/boards/psi-pro.json +++ b/libraries/boards/psi-pro.json @@ -103,8 +103,8 @@ "supportsDuration": true, "examples": [ "4T92", - "5T03", - "0T6" + "5T3", + "0T1" ], "commentLabel": "PSI effect" } diff --git a/libraries/manifest.json b/libraries/manifest.json index 2b35be1..b53a9e6 100644 --- a/libraries/manifest.json +++ b/libraries/manifest.json @@ -1,6 +1,6 @@ { "$schema": "droidnet-command-library/catalog/v1", - "libraryVersion": "2.2.0", + "libraryVersion": "2.2.1", "schemaVersion": "v1", "generatedFrom": "C2B5 firmware + WIPDocs (2026-06); R2UppitySpinnerV3 ALT fw 3.5.3 (2026-07)", "boards": [ diff --git a/releases.json b/releases.json index 15ed447..93340e3 100644 --- a/releases.json +++ b/releases.json @@ -2,17 +2,17 @@ "$schema": "droidnet-command-library/releases/v1", "_comment": "Update pointer for the 'Update Library' flow. A device fetches this file, compares latest.libraryVersion to its installed catalog, and (if newer) downloads latest.url (the catalog manifest), then fetches each board listed in manifest.boards in order, validates them, and loads them via loadLibrary(boards, { libraryVersion }).", "latest": { - "libraryVersion": "2.2.0", + "libraryVersion": "2.2.1", "schemaVersion": "v1", "releasedAt": "2026-07-06", "url": "https://raw.githubusercontent.com/travisccook/droidnet-command-library/main/libraries/manifest.json", - "notes": "Adds the R2 Uppity Spinner ALT (highfalutintodd fork) board: 41 commands covering lifter seek/home, rotary absolute/relative/spin, random move mode, light kit, timing, ESTOP, and full #P configuration. Community confidence; :PD range constrained to ±180° per firmware 3.5.3 clamp." + "notes": "Patch: corrects two invalid psi.mode examples in the PSIPro board (5T03 -> 5T3, 0T6 -> 0T1) that referenced enum codes not present in psi.mode, so they now round-trip in the composer." }, "libraries": [ { "id": "droidnet-astromech", "name": "DroidNet Astromech Boards", - "libraryVersion": "2.2.0", + "libraryVersion": "2.2.1", "schemaVersion": "v1", "url": "https://raw.githubusercontent.com/travisccook/droidnet-command-library/main/libraries/manifest.json" } diff --git a/test/engine.test.js b/test/engine.test.js index 4819efd..0d3d5b9 100644 --- a/test/engine.test.js +++ b/test/engine.test.js @@ -19,7 +19,7 @@ describe('engine lookups', () => { expect(cb.getComponents().map(c => c.id)).toEqual(expect.arrayContaining(['flthy-hps', 'magic-panel'])); }); test('getLibraryVersion reports the loaded version', () => { - expect(cb.getLibraryVersion()).toBe('2.2.0'); + expect(cb.getLibraryVersion()).toBe('2.2.1'); }); test('getCommand resolves and back-links its component', () => { const cmd = cb.getCommand('flthy.led.solid'); diff --git a/test/load-node.test.js b/test/load-node.test.js index 3e27178..2c2d54b 100644 --- a/test/load-node.test.js +++ b/test/load-node.test.js @@ -3,20 +3,20 @@ const { readCatalog, loadCatalog } = require('../src/load-node.js'); test('readCatalog returns the manifest and every board, in order', () => { const { manifest, boards } = readCatalog(); - expect(manifest.libraryVersion).toBe('2.2.0'); + expect(manifest.libraryVersion).toBe('2.2.1'); expect(boards).toHaveLength(manifest.boards.length); expect(boards.map(b => b.components[0].id)).toEqual(manifest.boards.map(b => b.id)); }); test('loadCatalog({ load: false }) returns the merged catalog object', () => { const lib = loadCatalog({ load: false }); - expect(lib.libraryVersion).toBe('2.2.0'); + expect(lib.libraryVersion).toBe('2.2.1'); expect(lib.components.length).toBe(9); }); test('loadCatalog() loads the engine and resolves commands', () => { const engine = loadCatalog(); - expect(engine.getLibraryVersion()).toBe('2.2.0'); + expect(engine.getLibraryVersion()).toBe('2.2.1'); expect(engine.getCommand('flthy.led.solid')).not.toBeNull(); expect(engine.encode(engine.getCommand('flthy.led.solid'), { designator: 'A', color: '5' }, {})).toBe('A0055'); }); diff --git a/test/web.test.js b/test/web.test.js index 372886f..09c62ce 100644 --- a/test/web.test.js +++ b/test/web.test.js @@ -56,10 +56,10 @@ describe('hosted site — reference data contract', () => { for (const comp of cb.getComponents()) for (const cmd of cb.getCommands(comp.id)) { if (!isBounded(cmd)) continue; // free-text arg (e.g. chirp.pvoice) → editable raw step, skip - const ex = cmd.examples && cmd.examples[0]; - if (!ex) continue; // presence covered above - const steps = cb.parseWCBValue(ex); - if (!steps.some(s => s.commandId && cb.getCommand(s.commandId))) bad.push(cmd.id + ' -> ' + ex); + for (const ex of (cmd.examples || [])) { // EVERY example — a bad non-first example (e.g. an invalid enum code) hid here before + const steps = cb.parseWCBValue(ex); + if (!steps.some(s => s.commandId && cb.getCommand(s.commandId))) bad.push(cmd.id + ' -> ' + ex); + } } expect(bad).toEqual([]); });