<feed xmlns='http://www.w3.org/2005/Atom'>
<title>archsetup/docs/design/2026-07-02-bluetooth-panel-spec.org, branch main</title>
<subtitle>Builds a full dev workstation from a bare Arch Linux install.
</subtitle>
<id>https://git.cjennings.net/archsetup/atom?h=main</id>
<link rel='self' href='https://git.cjennings.net/archsetup/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/'/>
<updated>2026-07-02T19:21:13+00:00</updated>
<entry>
<title>feat(bluetooth): prove the fresh-install panel wiring in VM assertions</title>
<updated>2026-07-02T19:21:13+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-02T19:21:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=bfadf6a602cfd593d7c43515056a6cc637dceb94'/>
<id>urn:sha1:bfadf6a602cfd593d7c43515056a6cc637dceb94</id>
<content type='text'>
Phase 5 needed no new install code: the waybar module, keybind, and shared panel css ride the dotfiles hyprland tier the installer already stows, and sudoers is covered by the existing grant. I added hyprland-gated assertions instead: bt bins stowed executable, custom/bluetooth in the waybar config, the bt-panel bind in hyprland.conf, panel.css present. This closes the bluetooth-panel task and flips the spec to implemented.
</content>
</entry>
<entry>
<title>feat(bluetooth): retire blueman, assert the swap in VM tests</title>
<updated>2026-07-02T19:18:20+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-02T19:18:20+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=d8d8c532798cb8be59ca84407022233afa2b79bb'/>
<id>urn:sha1:d8d8c532798cb8be59ca84407022233afa2b79bb</id>
<content type='text'>
I dropped blueman from the desktop_environment bluetooth loop (bluez + bluez-utils stay) and added the VM assertions: bluetooth stack installed, blueman absent as the retirement regression guard. No new sudoers rule was needed for bt-priv, since the existing blanket grant already covers systemctl restart bluetooth.
</content>
</entry>
<entry>
<title>docs(spec): bluetooth phase 3 shipped, visual batch closed</title>
<updated>2026-07-02T19:05:09+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-02T19:05:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=1dd2f2d0e34c651e2c360e247fd1ce2fc4cba098'/>
<id>urn:sha1:1dd2f2d0e34c651e2c360e247fd1ce2fc4cba098</id>
<content type='text'>
</content>
</entry>
<entry>
<title>docs(spec): bluetooth phase 2 shipped, AT-SPI smoke deferred until meeting ends</title>
<updated>2026-07-02T18:16:09+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-02T18:16:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=33c89b1154360cb2ed9733465c1931521cdee136'/>
<id>urn:sha1:33c89b1154360cb2ed9733465c1931521cdee136</id>
<content type='text'>
</content>
</entry>
<entry>
<title>docs(spec): bluetooth phase 1 shipped, pw-dump ground truth noted, css factoring moved to phase 2</title>
<updated>2026-07-02T17:31:48+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-02T17:31:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=7091f3472be5d09fcf01a539f2ca1c8d88d618d1'/>
<id>urn:sha1:7091f3472be5d09fcf01a539f2ca1c8d88d618d1</id>
<content type='text'>
</content>
</entry>
<entry>
<title>docs(spec): bluetooth panel reviewed READY, decomposed to DOING; net-panel kbd-nav probe deferred</title>
<updated>2026-07-02T17:07:14+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-02T17:07:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=33adcc2147e816417d06dfcfd1f076af28c73d77'/>
<id>urn:sha1:33adcc2147e816417d06dfcfd1f076af28c73d77</id>
<content type='text'>
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).
</content>
</entry>
<entry>
<title>docs(spec): bluetooth panel decisions resolved, profile switching in v1</title>
<updated>2026-07-02T14:36:26+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-02T14:36:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=e8b021afe0a9c11010d3eee9d6c147efd18e1f37'/>
<id>urn:sha1:e8b021afe0a9c11010d3eee9d6c147efd18e1f37</id>
<content type='text'>
Craig approved all four decisions (pair implies trust+connect, blueman retired outright, battery in captions, 8s scan bursts) and pulled audio-profile switching into v1: the doctor's audio step gains a one-click Switch to A2DP repair over wpctl, and a degraded profile shows in the device caption.
</content>
</entry>
<entry>
<title>docs(spec): bluetooth panel initial spec, net-panel UX findings filed</title>
<updated>2026-07-02T14:18:51+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-02T14:18:51+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=04bac48f03c33d20a34c2532d6502f049586834e'/>
<id>urn:sha1:04bac48f03c33d20a34c2532d6502f049586834e</id>
<content type='text'>
The bluetooth panel spec clones the net panel's stack: a GTK-free engine over bluetoothctl one-shot verbs, a GTK4 layer-shell popup, two tabs with ASCII mockups, a diagnostics doctor chain, and four decisions awaiting review. The UX pass surfaced two net-panel findings, filed as tasks: error toasts auto-dismiss before an error can be read, and the V2 spec's keyboard-navigation claims aren't verifiably implemented.
</content>
</entry>
</feed>
