aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/design/2026-07-03-instrument-console-panels-spec.org8
-rw-r--r--todo.org3
2 files changed, 9 insertions, 2 deletions
diff --git a/docs/design/2026-07-03-instrument-console-panels-spec.org b/docs/design/2026-07-03-instrument-console-panels-spec.org
index cd0d1e5..203cafc 100644
--- a/docs/design/2026-07-03-instrument-console-panels-spec.org
+++ b/docs/design/2026-07-03-instrument-console-panels-spec.org
@@ -134,10 +134,14 @@ visual or interaction, the prototype wins.
(arm gold)/radio switch/ethernet toggle/doctor stream/speed-test-drives-
meters, toasts. Verified live on velox (DOCTOR streams, SPEED TEST sweeps
both dials then HOLD). Shipped in dotfiles 800ef60 with phase 3.
-5. [ ] Bluetooth panel: same treatment end to end (faceplate + power
+5. [X] Bluetooth panel: same treatment end to end (faceplate + power
switch, adapter chip, paired/nearby lamp rows, pair passkey flow,
rename via set-alias, forget arm, battery gauges + LOW BATT, DOCTOR /
- SCAN keys, output). bt smoke rewritten.
+ SCAN keys, output). bt smoke rewritten. Shipped in two commits mirroring
+ net: dotfiles 5318b34 (GTK-free layer + engine gaps) and 66f03d9 (view +
+ interactions + smoke). rename lands on the bluez Alias via busctl
+ (set-alias has no MAC-addressed one-shot); verified live on velox (smoke
+ green end to end, screenshot matches the prototype).
6. [ ] Live verification both panels on velox + all suites + smokes green;
summary of findings written to file; folded tasks closed; dead code
removed; session context finalized.
diff --git a/todo.org b/todo.org
index 6b66a4c..c29da3f 100644
--- a/todo.org
+++ b/todo.org
@@ -32,6 +32,9 @@ Dotfiles =81ec9c3= (TDD, 52 new tests, 581 net green). Pure presenter logic for
*** 2026-07-03 Fri @ 06:02:32 -0400 Phases 3+4 shipped: net view rebuilt as the instrument console
Dotfiles =800ef60= (1197+/250-). =gui.py= rewritten as the single-screen console — no tabs, no Blueprint template (the dial meters and arm-to-fire rows are too dynamic, so the tree is built in Python; =pages.py= + the =*.blp/*.ui= are now orphaned, Phase 6 dead-code). Faceplate (lamp/word/TUNNEL+AIRPLANE badges/wifi-radio switch/close), engraved CHANNEL headline, scrolled NETWORKS + TUNNELS lamp rows, CONSOLE keys, two cairo dial meters, output well + dismiss ✕, toast. Interactions all wired: open network joins / secured opens the password dialog, active row arm-disconnects (gold), ✕ arm-forgets (terracotta), tunnel toggles, ethernet row takes/yields the route, radio switch flips the wifi radio (refuses under airplane with the way out), + hidden joins a non-broadcast SSID, DOCTOR streams diagnose+repair into the well, SPEED TEST sweeps both dials with the live rate then pins the final with HOLD (location/ping/final/tips in the well). =panel.css= grew the console classes (lamps+glow, b-face, engrave, chan, lamp-row + arm tints, c-btn, meter/mode/hold, output steps, toast). AT-SPI smoke + driver rewritten (anchor on the DOCTOR key). Phases 3 and 4 landed together because a view-only intermediate is a non-functional panel. Verified live on velox: full render screenshotted, console smoke green (faceplate/keys/sections/tunnels/DOCTOR/dismiss/close), DOCTOR streams real diagnose steps, SPEED TEST drove RX 36.6↓ / TX 90.7↑ then HELD. 581 net tests + full make test green.
+
+*** 2026-07-03 Fri @ 06:55:00 -0400 Phase 5 shipped: bt panel rebuilt as the instrument console
+Bluetooth's turn, two commits mirroring net. Phase-5a (dotfiles =5318b34=, 47 new console tests): the GTK-free layer — =viewmodel.bt_faceplate= (POWERED/OFF/AIRPLANE word + lamp + LOW BATT/AIRPLANE badges), =paired_console_rows= / =nearby_console_rows= (lamp rows with connect/forget/rename affordances), =discoverable_chip=, count labels, =battery_gauges= (two dial slots, one per connected device, red under 15%, dim NO DEVICE / ADAPTER OFF empties), =STEP_NARRATION=, and =panel.ArmState= (the forget latch). Engine gaps: =btctl.set_alias= renames through the bluez D-Bus Alias via busctl (set-alias has no MAC-addressed one-shot; =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 (a rename lands there, not on Name; the MAC-shaped placeholder stays "unnamed"), and =doctor= grew =on_report=/=on_begin= callbacks. Phase-5b (dotfiles =66f03d9=): =gui.py= rewritten as the single-screen console — faceplate (lamp/word/LOW BATT+AIRPLANE badges/adapter-power switch/close), engraved ADAPTER line with the clickable discoverable chip, scrolled PAIRED + NEARBY lamp rows, CONSOLE keys DOCTOR / SCAN, two cairo battery dials, output well + toast. Interactions: paired rows toggle connect/disconnect, ✎ renames via a dialog, ✕ arm-forgets, nearby rows run the pair flow into a passkey-confirm dialog, the chip toggles discoverability, the switch powers the adapter, SCAN refreshes nearby, DOCTOR streams checks + repairs. =panel.css= gained =.chip= / =.pen= / =.o-passkey= (the rest already shared with net). AT-SPI smoke rewritten (anchor on the bt-only SCAN key). Verified live on velox: smoke green end to end, screenshot matches the prototype (POWERED faceplate, four paired audio devices, two NO DEVICE battery dials). 46 suites + full make test green. Phase 6 next: live both-panel verify, folded tasks closed, dead code removed, spec → IMPLEMENTED.
** DONE [#B] Net diagnostics: narrate every step :feature:network:solo:
CLOSED: [2026-07-02 Thu]
:PROPERTIES: