#+TITLE: Instrument-Console Panel Rebuild — Build Summary #+DATE: 2026-07-03 #+AUTHOR: Craig Jennings & Claude Findings summary for the no-approvals speedrun that rebuilt the net and bluetooth waybar panels as single-screen instrument consoles. Spec: [[file:../docs/design/2026-07-03-instrument-console-panels-spec.org][2026-07-03-instrument-console-panels-spec.org]] (ID e73877f5, IMPLEMENTED). Normative design: [[file:2026-07-03-instrument-console-panels-prototype.html][2026-07-03-instrument-console-panels-prototype.html]] (Craig approved through five prototype iterations). * What shipped Both panels went from a tabbed Blueprint UI (Connections / Diagnostics / Performance style tabs) to one always-visible instrument console: a faceplate with a state lamp and word, engraved section labels, scrolled lamp rows for the live entities, a row of console keys, cairo dial meters, and an output well that streams diagnostics in place. No terminals, no tabs. Six phases, each committed and pushed on landing: | Phase | Commit (dotfiles) | What landed | |-------+----------------------+-------------------------------------------------| | 1 | (spec + task wiring) | Spec authored, parent task wired with :SPEC_ID: | |-------+----------------------+-------------------------------------------------| | 2 | 81ec9c3 | Net GTK-free presenter layer + engine verbs | | | | (52 new tests) | |-------+----------------------+-------------------------------------------------| | 3+4 | 800ef60 | Net view rebuilt as the console + all | | | | interactions wired | |-------+----------------------+-------------------------------------------------| | 5a | 5318b34 | Bt GTK-free layer + engine gaps (47 new tests) | |-------+----------------------+-------------------------------------------------| | 5b | 66f03d9 | Bt view rebuilt as the console + all | | | | interactions wired | |-------+----------------------+-------------------------------------------------| | 6 | f4e688e | Dead-code removal, build close-out | |-------+----------------------+-------------------------------------------------| * Engine gaps closed The console needed capabilities the tabbed panels never had: - Net: =manage.wifi_radio= (nmcli radio wifi on/off), =manage.device_up= (ethernet takes the route), =sysio.link_speed_mbps= (/sys wired speed), =connections.ethernet_devices=, and a hidden-SSID flag on =manage.add=. - Bt: =btctl.set_alias= renames a device through the bluez D-Bus Alias via busctl (there is no MAC-addressed one-shot for set-alias, so =device_path= discovers the controller node from the object tree), =manage.rename= wraps it with a verify-after read, =parse_info= reads the Alias as the display name, and =doctor= grew =on_report= / =on_begin= callbacks so its checks and repairs stream into the output well. * Tests added - Phase 2: 52 new net presenter tests (581 net total at the time). - Phase 5a: 47 new bt console tests. - Both panels' AT-SPI smokes rewritten to drive the single-screen console and anchor on stable engraved labels + the panel-unique console key (net DOCTOR, bt SCAN) rather than the flaky count labels. - Full suite through phase 6: 46 suites, zero failures. * Live-verify results (velox, 2026-07-03) - =make test=: 46 suites green, zero FAILED/ERROR. - =make test-panel= (net): green end to end — faceplate NET·01 / ONLINE, one Close, DOCTOR + SPEED TEST keys, engraved CHANNEL/CONSOLE/NETWORKS/TUNNELS, live route line, tunnel rows (tailscale + 7 WireGuard NM), DOCTOR streamed real diagnose steps, output-well dismiss, panel closed on Close. - =make test-panel-bt= (bt): green end to end — faceplate BT·01 / POWERED, one Close, adapter-power switch, DOCTOR + SCAN keys, engraved ADAPTER/CONSOLE/NEARBY/PAIRED, discoverable chip, battery gauge slots, DOCTOR streamed real checks, output-well dismiss, panel closed on Close. - Both =gui.py= files are byte-identical to their screenshot-verified commits (net 800ef60, bt 66f03d9), so the phase-3/4/5 screenshots (render matching the prototype) still stand — phase 6 touched no view code. * Phase-6 dead code removed (dotfiles f4e688e) The console builds its widget tree in Python, so the old Gtk.Template page classes and Blueprint sources had no caller: - =net/src/net/pages.py=, =bluetooth/src/bt/pages.py= - both panels' =ui/= dirs (=window_content=, =diagnostics_page=, =connections_page= / =devices_page= — the =.blp= sources and compiled =.ui=) - the =make ui= Blueprint-compile target and its =.PHONY= entry (no =.blp= files remain to compile) - a stale =gui.py / pages.py= mention in the bt =viewmodel.py= docstring Confirmed nothing imported the removed modules before deleting; 46 suites and both smokes stayed green after. * Folded tasks closed with this build - Network panel redesign — no terminals, verify-everything, full failure coverage (its failure-mode catalog stays as the standing diagnose/repair completeness reference). - Bluetooth panel: switch placement + panel title. - Bluetooth panel: rename devices. * Deferrals Interactions that mutate Craig's real bluetooth state can't be auto-driven — they need a human at the keyboard with real devices. Filed as a manual-test checklist under "Manual testing and validation" in todo.org: pair-passkey flow, rename a real device, connect/disconnect, forget, discoverable toggle, power toggle, and the LOW BATT badge with a real sub-15% device. Net's in-panel speedtest and timer-dialog manual tests were already pending there.