From 7f876206c3374d9627cd134b8dae3878df803a5f Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Thu, 2 Jul 2026 22:09:22 -0400 Subject: chore(todo): file net-diagnostics verbosity task, daily review batch of 7 Filed Craig's net doctor UX feedback from the roam inbox (every diagnostic step should report what's tested, why, and pass/fail). Review pass: stow-conflicts re-graded B to C with the body pruned to its two remaining items, audio-panel spec tagged solo, five keeps stamped. --- todo.org | 47 +++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/todo.org b/todo.org index 9029b46..2404be6 100644 --- a/todo.org +++ b/todo.org @@ -21,7 +21,26 @@ The vocabulary is open — topic tags are coined as needed — so these are conv - *Effort / autonomy*: =:quick:= a spare-moment fix (minutes, not a sitting); =:solo:= Claude can carry it end to end — there's a build path, a test path, and no upfront decision needed (a leftover manual spot-check doesn't disqualify it). - *Topic / area* (open): the subsystem a task touches — e.g. =:hyprland:= =:waybar:= =:mpd:= =:music:= =:network:= =:tooling:= =:llm:= =:eask:= =:pocketbook:= =:cmail:=. Coin a new one when it aids filtering. * Archsetup Open Work -** TODO [#B] Audio panel spec :feature:waybar:audio: +** TODO [#B] Net diagnostics: narrate every step :feature:network:solo: +:PROPERTIES: +:LAST_REVIEWED: 2026-07-02 +:END: +Craig's live UX feedback (roam inbox, 2026-07-02, from a real net doctor run on hotel wifi): the output isn't enough to know what's being tested, why, and whether it passed — all three should be reported for every diagnostic validation or data-gathering step, in =net doctor= and =net diagnose= alike. Today a failing run prints only the verdict, the fix pointer, and the failing rows; the passing steps and the probe sequence are invisible. Code lives in ~/.dotfiles (=net/src/net/diag.py= and friends). Sample from the run that prompted this: + +#+begin_example +% net doctor +net doctor: fixable + DNS not resolving + -> net repair dns-test + diagnose: + fail: DNS resolution — no resolution (portal may be stalling DNS) + fail: Internet — link up but no clean internet (DNS or egress issue) +#+end_example + +** TODO [#B] Audio panel spec :feature:waybar:audio:solo: +:PROPERTIES: +:LAST_REVIEWED: 2026-07-02 +:END: Work Craig's ask (roam inbox, 2026-07-02) into a spec, net/bt-panel kin: an audio panel replacing the pypr audio scratchpad (Super+A) with the same functionality — change the default/active output (speaker) and input (mic), volume control for both. The one new capability: a push-to-talk mic mode for meetings — mic stays muted except while the space bar is held, releasing re-mutes. (Hold-to-talk under Wayland needs a global key grab — likely a hyprland bind pair on press/release or an evdev listener; feasibility research belongs in the spec.) Related current bindings: Super+M audio-cycle ring, Super+Shift+A mic-toggle. ** DONE [#B] Network panel: other network interfaces (tailscale, VPNs, wireguard) :feature:waybar:network: @@ -55,6 +74,9 @@ The script stages each config through a =wgpvpn.conf= temp copy (NM's import nam Probe suites over fake tailscale/nmcli/protonvpn (19, phase 1), panel-model Tunnels coverage (22, phase 2), diag overlay-ownership cases (11, phase 3), badge suite (4, phase 4) — all in dotfiles; VM assertions for phase 5 in archsetup 0389790; the import-script suite (10, phase 6) closes the set. ** TODO [#B] File-manager swallow pattern :feature:hyprland: +:PROPERTIES: +:LAST_REVIEWED: 2026-07-02 +:END: When the file manager launches another app, it should hide to a special workspace (the "swallow" pattern) and return when that process ends, rather than vanishing. Today it disappears with no signal of whether it's coming back, so the user can't tell success from failure — they should quit explicitly instead. Origin: roam inbox capture. ** DONE [#C] Open meeting links in the browser instead of the Zoom app :feature: @@ -72,25 +94,31 @@ Disabled 2026-06-12 (bind and cycle entry points removed; Super+Shift+S reassign The support machinery was deliberately kept for this task: =layout-navigate= and =layout-resize= retain their scrolling branches, =waybar-layout= still renders the scrolling state, and the unbound legacy =cycle-layout= script still lists it. Re-enabling is two lines: add =scrolling= back to =LAYOUTS= in =layout-cycle= and restore a direct-jump bind (the old chord is taken now — pick a new one). The =tests/layout-cycle= suite pins the disabled state and will go red on re-enable, which is the reminder to update it. -** TODO [#B] Dotfiles stow conflicts: first-launch risk + restow directory handling :bug:dotfiles: +** TODO [#C] Dotfiles stow conflicts: first-launch risk + restow directory handling :bug:dotfiles: +:PROPERTIES: +:LAST_REVIEWED: 2026-07-02 +:END: *** 2026-07-02 Thu @ 17:30:00 -0400 Shipped the Makefile hardening + first-launch guard (dotfiles 42a82d2) The solo-able subset landed in the speedrun. =make conflicts = is the loud first-launch guard: dry-runs all tiers, parses all four stow error shapes (plain file conflict, foreign symlink, dir-over-file, and restow's unstow_contents non-directory ERROR), lists each blocker with a directory/foreign-symlink marker, exits 1 when any exist. =make reset= now pre-clears the directory and foreign-symlink blockers =--adopt= aborts atomically on (removals printed; repo version wins per the target's contract), then adopts + git-checkouts as before. =make restow='s overwrite path switched rm -f → rm -rf so directory conflicts clear. 8 sandbox tests drive the real Makefile against a throwaway HOME (44 suites green). Also verified on velox: the whereami and mpd-playlists conflicts noted in this task were already hand-converted 2026-06-29 — =make conflicts hyprland= reports clean live. REMAINING (deferred per Craig's speedrun pre-flight): the waypaper canonical decision (live velox dark-lion.jpg vs repo that-one-up-there.jpg) and the ratio calibre-symlink check (ratio paused). From the velox calibre incident (2026-06-27, note in ~/.dotfiles/inbox/processed/): calibre was launched before =make stow= ran, wrote its own default config into =~/.config/calibre/=, and silently blocked its own stow — it ran on factory defaults while the rest of common/ stowed fine. General pattern: any GUI app that auto-creates config on first run, launched before stow, blocks its own stow the same way. Velox was repaired by hand (=ln -srf= symlinks byte-identical to =stow --no-folding= output). -Remaining work, all in ~/.dotfiles: -- Handle directory-level conflicts in =make restow= / =make reset=: =stow --adopt= aborts atomically on a directory conflict and reset's =rm -f= fails on directories, so neither converts a real directory (e.g. =common/.local/share/mpd/playlists=) to symlinks. Fix the Makefile (=rm -rf= for dir conflicts, or per-file adopt). -- Adopt the harmless identical-file conflicts (=common/.config/whereami=, =common/.local/bin/whereami=) into symlinks. -- Waypaper canonical decision (Craig): live velox has =dark-lion.jpg=, repo has =that-one-up-there.jpg= (placeholder?). Decide the canonical, then one =make reset= clears whereami/mpd/waypaper together (once reset handles the directory case). -- Ratio check: whether =~/.config/calibre/*.json= on ratio are symlinks or real files — same first-launch gap likely if calibre ever launched there before stow. -- Consider a first-launch guard: a stow-conflict report target in the Makefile so a blocked package is loud instead of silent. +Remaining work (re-graded C 2026-07-02 — the first-launch risk and the Makefile handling shipped in the speedrun; what's left is a decision and a paused-machine check): +- Waypaper canonical decision (Craig): live velox has =dark-lion.jpg=, repo has =that-one-up-there.jpg= (placeholder?). Decide the canonical, then =make reset= clears it. +- Ratio check: whether =~/.config/calibre/*.json= on ratio are symlinks or real files — same first-launch gap likely if calibre ever launched there before stow. On the ratio trip list. ** TODO [#B] Audit dotfiles/common directory :chore:dotfiles: +:PROPERTIES: +:LAST_REVIEWED: 2026-07-02 +:END: Refiled from the archsetup task audit (2026-06-28), landed via ~/.dotfiles/inbox; the dotfiles content split into its own repo 2026-06-16 but the task tracking stays here per Craig (2026-07-02). Three parts: - Review all 50+ scripts in =~/.local/bin= and remove unused ones. - Check dotfiles for uninstalled packages and remove orphaned configs. - Verify all stowed files are actually used. ** TODO [#B] Network panel redesign — no terminals, verify-everything, full failure coverage :feature:waybar:network: +:PROPERTIES: +:LAST_REVIEWED: 2026-07-02 +:END: Major evolution of the shipped =custom/net= module ([[file:docs/design/2026-06-29-waybar-network-module-spec.org]]). Reverses the spec's "privileged tiers run in a net-popup terminal" decision. Origin: design conversation 2026-06-30. @@ -372,6 +400,9 @@ Out of the v1 milestone; spec separately when picked up. (v1 only detects + classifies a VPN-routed failure, it doesn't repair it.) ** TODO [#B] Timer GTK panel :feature:waybar: +:PROPERTIES: +:LAST_REVIEWED: 2026-07-02 +:END: Initial spec written 2026-07-02: [[file:docs/design/2026-07-02-timer-panel-spec.org]] (DRAFT — four decisions await Craig's review before build; net-panel Blueprint/GTK4 stack, wtimer stays the state owner). From Craig's roam capture 2026-07-02: give the timer a GTK UI/UX like the network panel. -- cgit v1.2.3