1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
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.
|