aboutsummaryrefslogtreecommitdiff
path: root/todo.org
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-07-02 13:07:14 -0400
committerCraig Jennings <c@cjennings.net>2026-07-02 13:07:14 -0400
commit33adcc2147e816417d06dfcfd1f076af28c73d77 (patch)
tree76a2e1109a314ad5990d7f5fd0cde2c0c6337e12 /todo.org
parent084889af9ee106c18f123cd7c009320a42ea340c (diff)
downloadarchsetup-33adcc2147e816417d06dfcfd1f076af28c73d77.tar.gz
archsetup-33adcc2147e816417d06dfcfd1f076af28c73d77.zip
docs(spec): bluetooth panel reviewed READY, decomposed to DOING; net-panel kbd-nav probe deferred
Fused reviewer + responder pass: gate passed (all four decisions resolved, phases decomposable, bluez 5.86 verbs verified), two non-blocking findings recorded and dispositioned inline (empty-state/no-adapter copy, eventlog + redaction carry-over — both clone the net-panel donor). Build parent now carries the five phase sub-tasks and the spec's ID. The keyboard-nav verification task logs its code-level findings; the live AT-SPI probe waits until Craig's meeting ends (no test windows or synthetic input while zoom holds focus).
Diffstat (limited to 'todo.org')
-rw-r--r--todo.org30
1 files changed, 27 insertions, 3 deletions
diff --git a/todo.org b/todo.org
index ed9d992..8518b64 100644
--- a/todo.org
+++ b/todo.org
@@ -537,11 +537,32 @@ Design / open questions (propose before building):
Implementation notes: a small GTK layer-shell app (mirror pocketbook's structure: src-layout Python package, pytest, Makefile) talking to brightnessctl / hyprctl / the touchpad + airplane helpers. Lives in the dotfiles repo or in-tree like pocketbook. TDD the backing toggle/slider logic. Sizable — worth a design doc first.
-** TODO [#B] Bluetooth panel + bar module :feature:waybar:bluetooth:
-Initial spec written 2026-07-02: [[file:docs/design/2026-07-02-bluetooth-panel-spec.org]] (DRAFT — decisions await Craig's review before build).
+** DOING [#B] Bluetooth panel + bar module :feature:waybar:bluetooth:
+:PROPERTIES:
+:SPEC_ID: 1271a845-4463-4831-9902-990eda6b2265
+:END:
+Spec: [[file:docs/design/2026-07-02-bluetooth-panel-spec.org]] (DOING — reviewed READY and decomposed 2026-07-02; all four decisions resolved, two non-blocking findings dispositioned in the fused review pass).
A bluetooth panel driving a CLI underneath (bluetoothctl one-shot verbs), consistent in look and feel with the net panel (GTK4 + layer-shell + Blueprint, humble-object presenter, verify-everything). Minimalistic interface, full functionality, plus a diagnostics/troubleshooting section mirroring the net panel's Diagnostics tab. Bar module glyph opens it. Craig's ask (2026-07-02): follow UX/UI best practices; where the net panel's patterns conflict with best practices, file a net-panel bug task rather than clone the flaw.
+*** TODO Phase 1 — engine bt package (dotfiles) :feature:
+Adapter/device/scan probes over fake-bluetoothctl, status + doctor chain (rfkill, service, powered, reachability, audio profile probe + A2DP switch repair over fake-wpctl) — pure TDD, no GTK. =bt status= and =bt doctor= work from a terminal. Factor the shared dupre css asset if the settings panel hasn't already.
+
+*** TODO Phase 2 — panel (dotfiles) :feature:
+PanelModel presenter + Blueprint pages (Devices with Paired/Nearby, Diagnostics), worker-thread wiring, pairing-dialog pty state machine, bt-panel toggle wrapper, AT-SPI smoke. Super+Shift+B rebind.
+
+*** TODO Phase 3 — bar module custom/bluetooth (dotfiles) :feature:
+Glyph states, tooltip with battery + keybind hints, low-battery surface, refresh signal, waybar config + suite coverage; blueman retirement per the decision.
+
+*** TODO Phase 4 — bt-priv + sudoers + packages (archsetup) :feature:
+One-verb bt-priv helper + NOPASSWD sudoers rule cloning net-priv's pattern; package-list swap (blueman out, bluez-utils stays); VM test assertions.
+
+*** TODO Phase 5 — install defaults (archsetup) :feature:
+Keybind/config defaults so a fresh install lands the panel wired: waybar module present, bind set, sudoers placed.
+
+*** TODO Test surface :test:
+Engine suites over fake binaries (bluetoothctl show/devices/info/scan parse, doctor chain verdicts, A2DP repair verify), PanelModel presenter suite, pairing state-machine suite (passkey confirm / NoInputNoOutput / timeout), bar-module suite, gated AT-SPI smoke, VM assertions for phases 4-5.
+
** TODO [#B] Local offline LLM runtime + per-host model cache :tooling:llm:
:PROPERTIES:
:LAST_REVIEWED: 2026-05-29
@@ -881,9 +902,12 @@ Shipped 2026-07-02 (dotfiles 775771b). Keybind now calls a =wlogout-menu= wrappe
CLOSED: [2026-07-02 Thu]
Fixed in dotfiles 0f017d4: viewmodel.toast_plan owns the toast policy — errors show sticky and ignore the post-op refresh's empty clear (worst case: a forget failure's error was wiped within ~2s by its own refresh), and the next real status replaces them. Successes keep the 4s fade. 7 policy tests added; 41 suites green.
-** TODO [#C] Net panel: verify claimed keyboard navigation :test:network:waybar:
+** DOING [#C] Net panel: verify claimed keyboard navigation :test:network:waybar:
Found during the bluetooth-panel UX pass (2026-07-02). The V2 spec claims tab-between-sections, arrow-key row navigation, and type-to-filter, but no custom keyboard code exists in the panel — arrows and type-ahead may ride GTK ListBox defaults, tab-between-sections likely doesn't. Verify each claim against the live panel (AT-SPI smoke can assert focus order); implement or strike the claims from the spec so spec and panel agree.
+*** 2026-07-02 Thu @ 13:05:00 -0400 Code-level pass done; live probe deferred (Craig in a Zoom meeting)
+Code reality (dotfiles net/src/net): Esc close is wired (gui EventControllerKey); row-activated -> primary is wired for both connection lists (pages.py:122,126), so Enter-on-row rides the GTK ListBox activate binding; arrows ride ListBox defaults; NOTHING implements type-to-filter (no search/filter code exists — that claim is false as written); Tab is the plain GTK focus chain, widget by widget, not section jumps. Live AT-SPI probe plan: launch panel in test mode, drive keys via hyprctl dispatch sendshortcut targeted AT THE PANEL WINDOW (never the focused surface — wtype/ydotool absent anyway), gate every key on the panel holding focus, never send Enter on the available list (real connect risk). BLOCKED at 13:05: active window is zoom (meeting) — no test windows, no synthetic input until clear. Then: verify focus order + arrows + no-filter live, strike/reword the spec's keyboard bullet to match.
+
** TODO [#C] Window focus lost when unhiding stashed windows :bug:hyprland:
:PROPERTIES:
:LAST_REVIEWED: 2026-06-24