From 33adcc2147e816417d06dfcfd1f076af28c73d77 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Thu, 2 Jul 2026 13:07:14 -0400 Subject: docs(spec): bluetooth panel reviewed READY, decomposed to DOING; net-panel kbd-nav probe deferred MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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). --- docs/design/2026-07-02-bluetooth-panel-spec.org | 58 +++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 3 deletions(-) (limited to 'docs') diff --git a/docs/design/2026-07-02-bluetooth-panel-spec.org b/docs/design/2026-07-02-bluetooth-panel-spec.org index f010c1a..3ada112 100644 --- a/docs/design/2026-07-02-bluetooth-panel-spec.org +++ b/docs/design/2026-07-02-bluetooth-panel-spec.org @@ -4,10 +4,17 @@ #+TODO: TODO | DONE #+TODO: DRAFT READY DOING | IMPLEMENTED SUPERSEDED CANCELLED -* DRAFT Status +* DOING Status :PROPERTIES: :ID: 1271a845-4463-4831-9902-990eda6b2265 :END: +- [2026-07-02 Thu] DOING — spec-response decomposed the five phases into + build sub-tasks under the todo.org parent (:SPEC_ID: bound); build + started same day per Craig ("4 first, then 1" — bugs then bluetooth). +- [2026-07-02 Thu] READY — spec-review passed the gate: all four + decisions resolved, phases decomposable, CLI verbs verified against + bluez 5.86. Two non-blocking findings recorded and dispositioned in + the same pass (donor-pattern answers). - [2026-07-02 Thu] DRAFT — initial spec from Craig's request: a bluetooth module driving a CLI underneath, consistent with the net panel, minimal interface, full functionality, diagnostics section, visual mockups. @@ -16,7 +23,7 @@ | Field | Value | |--------+---------------------------------------------------------------------------------| -| Status | draft | +| Status | doing | |--------+---------------------------------------------------------------------------------| | Owner | Craig Jennings | |--------+---------------------------------------------------------------------------------| @@ -277,7 +284,7 @@ auto-dismiss in 4s, and the V2 spec's keyboard-navigation claims implemented. Both filed against the net panel rather than cloned here; this panel adopts whatever resolution those tasks land on. -* Decisions (Craig) +* Decisions (Craig) [4/4] ** DONE Pair implies trust + connect? CLOSED: [2026-07-02 Thu] @@ -304,6 +311,32 @@ CLOSED: [2026-07-02 Thu] Approved (Craig, 2026-07-02): 8s bursts, no auto-repeat — Rescan stays explicit, matching the net panel's Available view. +* Review findings [2/2] + +** DONE Empty-state and no-adapter presentation copy undefined :nonblocking: +CLOSED: [2026-07-02 Thu] +The mockups show populated lists; the spec didn't say what an empty Paired +list, an empty post-scan Nearby list, or a machine with no adapter shows +in the panel and on the bar glyph. Dispositioned same pass: clone the +donor — the net panel's in-box overlay message pattern (=show_loading= / +placeholder label) carries the copy. Paired empty: "No paired devices — +switch to Nearby to pair one." Nearby post-scan empty: "Nothing found — +Rescan, or make the device discoverable." No adapter: adapter row reads +"No Bluetooth adapter", Devices controls disable, Diagnostics stays +usable (the doctor's step 1 names the hardware/driver verdict); bar +glyph shows the off/blocked state. Non-blocking; recorded so the +implementer doesn't invent copy mid-build. + +** DONE Logging/redaction carry-over unstated :nonblocking: +CLOSED: [2026-07-02 Thu] +The spec says "the net panel's stack, verbatim" but didn't name whether +the engine adopts net's =eventlog= (structured op log) and =redact= +(sensitive-field scrubbing) modules. Dispositioned same pass: yes, both +carry over — every mutating verb (pair/connect/forget/repair) logs an +eventlog entry, and MACs are the redaction surface (device names stay, +MACs redact in copied reports, mirroring net's report redaction). +Non-blocking; it's the donor default made explicit. + * Implementation phases 1. Engine =bt= package: adapter/device/scan probes over fake-bluetoothctl, @@ -324,3 +357,22 @@ explicit, matching the net panel's Available view. assertions. 5. archsetup keybind/config defaults so a fresh install lands the panel wired (waybar module present, bind set, sudoers placed). + +* Review and iteration history + +** 2026-07-02 Thu @ 13:10:00 -0400 — Claude Code (archsetup) — reviewer + responder +- *What changed or was recommended:* Ran the spec-review gate: passed. + All four decisions were already DONE (cookie added to the heading); + the five phases are each a clean single-session stop; CLI verbs are + verified against installed bluez 5.86. Two non-blocking findings + recorded and dispositioned in the same fused pass (empty-state / + no-adapter copy, eventlog + redaction carry-over) — both resolve to + "clone the net-panel donor," now stated explicitly. Flipped DRAFT → + READY → DOING and decomposed the phases into build sub-tasks under the + todo.org parent with :SPEC_ID: bound. +- *Why:* Craig queued the build ("4 first, then 1", 2026-07-02) after + resolving all decisions the same morning; the gate held nothing back, + so review and response fused to keep the speedrun moving. +- *Artifacts:* Findings in =* Review findings [2/2]= above; build parent + in todo.org ("Bluetooth panel + bar module"); net-panel toast fix the + UX-conformance note references landed as dotfiles =0f017d4=. -- cgit v1.2.3