From dc218f3f08db12f026ee31b9cceb65acdee92593 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Mon, 29 Jun 2026 20:21:40 -0400 Subject: docs: mark waybar network module Phase 1 shipped MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Phase 1 landed in the dotfiles repo (engine, indicator, cache, diagnose/repair/doctor, portal, event log, recovery make targets, airplane absorption). Record it as the dated event-log entry on the Phase 1 task and raise the spec status to "Phase 1 shipped". One as-built deviation, noted in the spec (decision 12) and the manual-testing checklist: airplane absorption is display-only. The airplane-mode toggle is a low-power mode — radios plus CPU, brightness, and services — not a network concern, so it stays; net shows the state and the toggle moved to custom/net's right-click. Only the redundant display pieces (waybar-airplane, custom/airplane, waybar-netspeed) were removed. --- .../2026-06-29-waybar-network-module-spec.org | 20 +++++++- todo.org | 55 ++++++++++++++-------- 2 files changed, 54 insertions(+), 21 deletions(-) diff --git a/docs/design/2026-06-29-waybar-network-module-spec.org b/docs/design/2026-06-29-waybar-network-module-spec.org index 37b87b0..db9657d 100644 --- a/docs/design/2026-06-29-waybar-network-module-spec.org +++ b/docs/design/2026-06-29-waybar-network-module-spec.org @@ -4,6 +4,16 @@ * Status +*Phase 1 SHIPPED* (2026-06-29, dotfiles =5254bd8=..=c095a22=, 10 commits): engine +(=net status/probe/diagnose/repair/doctor/portal=) + =waybar-net= indicator + +split-cadence cache + redacted event log + Makefile recovery targets + airplane +absorption. 160 net tests; pure modules ≥90% branch. One as-built deviation from +this spec: airplane absorption is *display-only* (Craig's call, option 1) — net +shows the airplane state but the =airplane-mode= low-power toggle is KEPT (it does +radios + CPU + brightness + services, not a network concern); only =waybar-airplane= ++ =custom/airplane= + =waybar-netspeed= were deleted. See decision 12. Phases 2-5 +remain. Live waybar eyeball is under todo.org "Manual testing and validation". + Ready for Phase 1; Ready-with-caveats overall. Three Codex review rounds + Craig's cj comments are all incorporated — every finding has a disposition and the findings cookie reads complete ([31/31]), with no open decisions (enterprise scope settled: @@ -859,8 +869,14 @@ a *coverage-gap pass*, not just a percentage: "defer the doctor/bundle command" decision is reversed.) 11. Diagnose (read-only) and Repair (mutating, confirmed) are separated in the panel and the CLI; Repair is tiered lightest-first (rfkill → reset → bounce). -12. =custom/net= absorbs the airplane module (Craig's call, cj); the standalone - airplane module + scripts + tests are deleted once net ships. +12. =custom/net= absorbs the airplane module (Craig's call, cj). *As built + (2026-06-29, option 1): display-only.* net shows the airplane state (reads + the airplane-mode state file); the =airplane-mode= low-power toggle is kept + (radios + CPU + brightness + services is not a network concern) and moved to + =custom/net='s right-click + signal 15. Only the redundant display pieces — + =waybar-airplane=, =custom/airplane=, and the retired =waybar-netspeed= — + plus their tests/css were deleted. The earlier "delete airplane-mode" framing + is superseded. 13. Repair includes a full-stack bounce and an rfkill-unblock (Craig's calls, cj) — the latter recovers the framework-laptop post-power-loss soft-block. 14. VPN / WireGuard is a planned Phase 5 (Craig's call, cj), not a permanent diff --git a/todo.org b/todo.org index ea8864f..b72e9d4 100644 --- a/todo.org +++ b/todo.org @@ -97,19 +97,36 @@ Phases below, dependency order. Engine/unit work is agent-verifiable (=unittest= + fakes on PATH, coverage via venv); the live-network and visual states need real conditions, filed under "Manual testing and validation". -*** TODO Phase 1 — indicator + console recovery :network: -Deliverable: =net status= + =net probe= (native cheap captive probe) + the -=captive= =--json= probe refactor; =waybar-net= replacing =custom/netspeed=; -split-cadence cache (single-flight flock, atomic write, fresh/stale/expired/unknown -classes, iface/SSID/UUID invalidation); CSS states (captive/no-internet/degraded/ -rfkill); =net repair= tiers (rfkill/reset/bounce); =net doctor [--fix]= with the -four terminal classifications; Makefile console-recovery targets (=make online= -etc.); absorb the airplane state and delete the standalone airplane module -(=waybar-airplane=, =airplane-mode=, their tests, =custom/airplane= + css). -Tests: =tests/net/= + =tests/waybar-net/= unittest with fake nmcli/curl/rfkill/ -resolvectl on a temp PATH; doctor-classification fixtures; degraded-under-slow-nmcli -benchmark; branch coverage ≥90% on pure modules via a throwaway venv; coverage-gap -pass. +*** 2026-06-29 Mon @ 20:19:11 -0400 Phase 1 shipped — indicator + console recovery +Shipped to the dotfiles repo (10 commits, =5254bd8=..=c095a22=, pushed to main). +The =net= engine is a src-layout Python package in-tree, imported by a bin shim +that resolves the stow symlink back to the repo — so it runs from a bare TTY with +no install, which the recovery path depends on. + +Landed: =net status= (fast path, one nmcli call + sysfs, degraded fallback in +budget) + =net probe= (native captive probe, single-flight flock, atomic cache, +fresh/stale/expired/unknown classes, iface/SSID/UUID invalidation); =waybar-net= +replacing =custom/netspeed=, throughput → tooltip, CSS states in both themes + +live; =net diagnose= (read-only steps) + =net repair= (rfkill/reset/bounce/ +dns-test, cleanup-verified) + =net doctor [--fix]= with the four terminal +classifications; =net portal= + the =captive --probe-json= refactor; redacted +JSONL event log; Makefile recovery targets (=make online= etc.); =~/.config/net/ +config=. Verified live: =make net-status= reads the real wlp170s0 / @Hyatt_WiFi. + +Airplane (Craig's call, option 1): =custom/net= absorbs only the *display* — net +reads the airplane-mode state file and shows an airplane state/glyph. The +airplane-mode toggle stays (it's a low-power mode — radios + CPU + brightness + +services — not a radio switch), now on =custom/net='s right-click + signal 15. +Deleted: =waybar-airplane=, =waybar-netspeed=, =custom/airplane=, their tests + +css. =airplane-mode= kept. + +Tests: 160 in =tests/net/= (fake nmcli/curl/rfkill/resolvectl/ping/getent/ +systemctl on a temp PATH; doctor-classification fixtures; degraded-under-slow- +nmcli benchmark) + the =captive= probe-mode tests; full dotfiles suite green (32 +suites). Coverage-gap pass via throwaway venv: pure modules ≥90% branch +(classify 100%), IO-error branches excused in the test docstring. +Deferred to Phase 2/3: archsetup deps (gtk4-layer-shell/python-gobject Phase 2, +speedtest-go-bin Phase 3 — not added before the code that needs them). Verify (manual, live): see Manual testing and validation. *** TODO Phase 2 — panel shell + connection management :network: @@ -788,12 +805,12 @@ rfkill list wifi # confirm Soft blocked: yes make -C ~/.dotfiles online # or: net doctor --fix #+end_src - Expected: doctor reports the rfkill block, runs =rfkill unblock wifi= + =nmcli radio wifi on=, reconnects, and ends "online" — all from the TTY. -*** Network module Phase 1 — airplane state absorbed, old module gone -What we're verifying: the airplane toggle/state moved into =custom/net= and the standalone module is removed cleanly. -- Toggle airplane mode (the keybind / the net module's control). -- Expected: =custom/net= reflects the airplane state; wifi drops and restores. -- Check the bar has no separate =custom/airplane= module, and =waybar-airplane= / =airplane-mode= are gone from =~/.local/bin=. -- Expected: no duplicate airplane indicator; no stale scripts. +*** Network module Phase 1 — airplane state absorbed, display-only (option 1) +What we're verifying: =custom/net= shows the airplane state, the toggle stays the airplane-mode low-power script (now on the net module's right-click), and only the redundant *display* pieces were removed. Craig's call: net absorbs the display, not the low-power orchestration. +- Right-click =custom/net= (it now runs =airplane-mode=). +- Expected: airplane engages — wifi drops, brightness dims, CPU/services to low-power — and =custom/net= shows the airplane glyph in gold. Right-click again restores everything. +- Check the bar has no separate =custom/airplane= module, and =waybar-airplane= / =waybar-netspeed= are gone from =~/.local/bin= (dangling symlinks removed). +- Expected: no duplicate airplane indicator; =airplane-mode= itself is still present (=ls ~/.local/bin/airplane-mode= → exists), since the low-power toggle is not a network concern. ** DOING [#B] Prepare for GitHub open-source release :PROPERTIES: -- cgit v1.2.3