From 6cbef920c55ed39df19015fc4aa6bd10e346bd4e Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Fri, 3 Jul 2026 06:56:37 -0400 Subject: chore(todo): instrument-console rebuild complete, spec IMPLEMENTED Closed out the panel rebuild. Both panels verified live on velox: 46 suites and both AT-SPI smokes green, the dead-code removal shipped in dotfiles f4e688e, and the render carries the phase-3/4/5 screenshots since no view code changed. Flipped the parent task and its three folded children (network panel redesign, bt switch placement, bt rename) to DONE, ticked the spec's last phase, and flipped the spec to IMPLEMENTED. Filed the approved prototype and the build summary flat into assets/ with dated names, updated the inbound links, and dropped the working dir. The real-device bt interactions (pair, rename, connect, forget, discoverable, power, low-batt badge) can't be auto-driven, so they're a manual-test checklist. --- ...-03-instrument-console-panels-build-summary.org | 107 ++ ...-07-03-instrument-console-panels-prototype.html | 1359 ++++++++++++++++++++ 2 files changed, 1466 insertions(+) create mode 100644 assets/2026-07-03-instrument-console-panels-build-summary.org create mode 100644 assets/2026-07-03-instrument-console-panels-prototype.html (limited to 'assets') diff --git a/assets/2026-07-03-instrument-console-panels-build-summary.org b/assets/2026-07-03-instrument-console-panels-build-summary.org new file mode 100644 index 0000000..a7a3768 --- /dev/null +++ b/assets/2026-07-03-instrument-console-panels-build-summary.org @@ -0,0 +1,107 @@ +#+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. diff --git a/assets/2026-07-03-instrument-console-panels-prototype.html b/assets/2026-07-03-instrument-console-panels-prototype.html new file mode 100644 index 0000000..0258f20 --- /dev/null +++ b/assets/2026-07-03-instrument-console-panels-prototype.html @@ -0,0 +1,1359 @@ + + + + + +Instrument consoles — network + bluetooth + + + + +
+
archsetup · dupre panel family · instrument consoles
+

Network + Bluetooth — the pair

+

Same faceplate, same idioms: lamp rows act on click, hover reveals ✎ rename and the + arm-to-fire ✕, gauges under the console keys (throughput needles on NET, battery fuel + gauges on BT), doctor streams and repairs in the output well. Try the power switch + on BT·01 — everything follows it.

+
+ +
+ + +
+
net·01 — as iterated
+
+
+
+

Join network

+
WPA2 — password required
+ + +
+ + +
+
+
+ +
+
+ + ONLINE + TUNNEL + AIRPLANE + NET·01 + + +
+
+ +
channel
+
+
@Hyatt_WiFi + + -59 dBm · 44 ms
+
172.20.2.108/20 · gw 172.20.0.1 · route wlp170s0
+
+ +
networks+ hidden
+
+ +
tunnels
+
+ +
console
+
+ + +
+ +
+
+ LIVE + HOLD +
+
+
+
+
+
0.1 Mbps
+
RX · DOWN
+
+
+ LIVE + HOLD +
+
+
+
+
+
0.1 Mbps
+
TX · UP
+
+
+
+ +
+ +
+
+
+
+ +
+ + +
+
bt·01 — new, same idioms
+
+
+
+

Pair device

+
confirm the passkey matches the device
+ + +
+ + +
+
+
+ +
+
+ + POWERED + LOW BATT + AIRPLANE + BT·01 + + +
+
+ +
adapter
+
+
intel ax211 + hci0
+
+ discoverable off + · 1 device connected
+
+ +
paired
+
+ +
nearby
+
+ +
console
+
+ + +
+ +
+
+ LIVE +
+
+
+
+
+
72 %
+
LOGI M650
+
+
+ +
+
+
+
+
+
+
NO DEVICE
+
+
+
battery · connected devices
+ +
+ +
+
+
+
+ +
+ + +
+

The bt mapping

+
    +
  • Power switch on the faceplate — flip it: devices drop, gauges die, keys disable, state goes OFF. Flip back: the mouse auto-reconnects. (the switch-placement ask, in console form)
  • +
  • Battery fuel gauges are BT's meters — one per connected device, needle at charge, red under 15% with a LOW BATT badge on the faceplate.
  • +
  • Paired rows toggle on click (connect/disconnect), exactly like tunnels. Hover: ✎ rename (the rename ask), ✕ arm-to-forget.
  • +
  • Nearby rows pair on click — passkey confirm dialog, then the device moves up to PAIRED and connects. SCAN refreshes the neighborhood.
  • +
  • discoverable off in the adapter line is a click-toggle (gold when on).
  • +
  • Disconnect is arm-first on the active row — first click arms in gold ("disconnect? click again"), second fires. Gold, not terracotta: disruptive, not destructive.
  • +
  • NET·01 grew the wifi radio switch (faceplate, same spot as BT's). Airplane mode is system-level: both switches drop, AIRPLANE badges light, and a switch flipped under airplane refuses with the way out. A plugged ethernet cable keeps NET·01 online through it.
  • +
  • DOCTOR does it all here too: adapter → radio → service → powered → devices → audio profile. Tick the degraded-audio switch and run it: it finds HSP, flips to A2DP, verifies the sink followed.
  • +
+
+ + + + + + + +
the audio one needs the headphones connected — click WH-1000XM4 first.
+ +
+
+
+ + + + -- cgit v1.2.3