From 8ed09024ce9b8c4c115de1981e97c8d81425326b Mon Sep 17 00:00:00 2001 From: Michael B Reiser Date: Mon, 28 Sep 2026 19:31:21 -0400 Subject: [PATCH 1/3] =?UTF-8?q?feat(studio):=20panel=20inventory=20?= =?UTF-8?q?=E2=80=94=20which=20panels=20are=20present=20and=20their=20firm?= =?UTF-8?q?ware,=20in=20every=20run=20log=20(v0.93)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wire (js/arena-wire-g6.js): decodeControllerInfo() reads the 0xC2 feature bitmap appended after the MAC (FEATURE_BITS: panel_inventory, qwiic_i2c, ai_stream) and labels capability bit 6 ai_cal; encodePanelInventoryScan(action) 0xD0, encodeGetPanelInventory(first) 0xD1, decodePanelInventory() for the 18-byte page header (scan_id at [17]) + 5-byte entries; PANEL_STATUS_NAMES / PANEL_INVENTORY_FLAGS. Golden tests for all of it, including the 0xD0 echo, the past-the-end page and a pre-scan_id 17-byte header (rejected). Reader (js/studio-panel-inventory.js, dual-export): readAll() pages the fleet and re-reads from first=0 when scan_id changes between pages; summarize() → present / missing / firmware groups / mismatched (≠ SD image, else outside a strict fingerprint majority, plus no-ISP panels); describe(); toRunMeta(). Studio: Studio.features from every 0xC2 decode; Studio.refreshPanelInventory() after refreshFirmwareVersion() on Connect, on the gesture-free reconnect hook and from Controller ▾ info, gated on the panel_inventory feature; one follow-up read while the boot sweep is still running. Provenance box shows "panels: 20/20 present · fw 0x9BE0D3C7 ×20 …"; run_metadata.panels (studio-meta buildMeta) carries the compact record. Console → Panel firmware gets Inventory / Rescan (0xD0 action 1 after quiesceDisplay, follow-up read 3 s later). Help-mode text. Bench (G6_2x10, fw #59 bf2a8e3): link-up read 20/20 · 0x9BE0D3C7 ×20 · scan 9; Rescan → scan 10 with FP_VALID inside the follow-up window; no console errors. Co-Authored-By: Claude Fable 5.1 --- arena_studio.html | 88 +++++- .../development/arena-studio-release-notes.md | 12 + js/arena-wire-g6.js | 134 ++++++++- js/studio-meta.js | 9 +- js/studio-panel-inventory.js | 180 ++++++++++++ pixi.toml | 2 +- tests/test-arena-wire-g6.js | 143 ++++++++++ tests/test-studio-panel-inventory.js | 266 ++++++++++++++++++ 8 files changed, 828 insertions(+), 6 deletions(-) create mode 100644 js/studio-panel-inventory.js create mode 100644 tests/test-studio-panel-inventory.js diff --git a/arena_studio.html b/arena_studio.html index 126d66e1..49b3ad15 100644 --- a/arena_studio.html +++ b/arena_studio.html @@ -2548,6 +2548,7 @@

Auto-captured

sha256: —
arena: — · rig: —
firmware: —
+
panels: —
controller: —
run_id: — (assigned at run start)
@@ -3047,6 +3048,10 @@

Import error

+
fleet + + +
batch @@ -3142,7 +3147,7 @@

Import error