aboutsummaryrefslogtreecommitdiff
path: root/todo.org
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-07-02 19:12:08 -0400
committerCraig Jennings <c@cjennings.net>2026-07-02 19:12:08 -0400
commitc688bea30ef86482ad6cc0751da2ee6e56b0ab3e (patch)
tree5decc6bc2141905ffc31ead4484e966558b916b2 /todo.org
parent234a6ea6343634a31f736de4ac93c1ff76d002f3 (diff)
downloadarchsetup-c688bea30ef86482ad6cc0751da2ee6e56b0ab3e.tar.gz
archsetup-c688bea30ef86482ad6cc0751da2ee6e56b0ab3e.zip
docs(spec): tunnels phase 3 shipped
Diffstat (limited to 'todo.org')
-rw-r--r--todo.org4
1 files changed, 2 insertions, 2 deletions
diff --git a/todo.org b/todo.org
index 895a34f..6ead480 100644
--- a/todo.org
+++ b/todo.org
@@ -38,8 +38,8 @@ Tunnels visible and controllable in the net panel: tailscale + NM wireguard + pr
*** 2026-07-02 Thu @ 19:02:45 -0400 Shipped phase 2 — panel Tunnels sub-view (dotfiles 21db05a)
Connections gained a third sub-view (Available | Saved | Tunnels — a StackSwitcher page, the natural landing for the spec's "fourth group" in this UI): rows from =overlays.collect(fast=False)= with the vpn glyph, name, and a =tunnel_caption= (state · addr · backend detail); one primary button follows the selected row via =PanelModel.tunnel_primary()= — Bring Up/Bring Down when toggleable, disabled explainers for needs-login ("Sign in first: tailscale up") and the Proton GUI-running case. =manage.tunnel_up/down= dispatch by kind (wireguard rides the existing nmcli up envelope + =connection down=; tailscale/protonvpn shell their tools into a =_tool_result= envelope carrying stderr on failure); ops run on the worker thread, rows + bar reload on land. gui grew =refresh_tunnels()= (bg, full probe set) kicked from the list load. AT-SPI smoke extended (Tunnels tab, action button, rows — POLLING for the bg load; a fixed sleep raced it and false-failed). 22 new tests (45 suites green). LIVE on velox: smoke fully green, rows eyeballed in dupre (tailscale up caption with peers count; proton app-running row), =tailscale set --operator=cjennings= applied and the user-mode =tailscale down/up= round-trip verified (Self.Online back true). Gotcha reconfirmed: stray test panels leave a windowless single-instance process — =pkill -9 -f '[n]et panel'= + wait before relaunch.
-*** TODO Phase 3 — diagnose/doctor overlay awareness (dotfiles) :feature:
-Route/DNS ownership step, classifier rows, evidence text; TDD against the diag harness.
+*** 2026-07-02 Thu @ 19:11:47 -0400 Shipped phase 3 — diagnose/doctor tunnel awareness (dotfiles 31ba056)
+=overlays.default_route_owner()= classifies the default route's owner (tailscale prefix, wg/pvpn/proton/tun/tap prefixes, else the active NM connection's type — imports can name a wireguard device anything). diag's route step went three-way: overlay owner = informational pass row ("internet flows through the tailscale tunnel tailscale0"), other physical link = the old multi-homing warn. When the HTTP probe fails while a tunnel owns the route, a new "tunnel" edge row LEADS the evidence and the classifier returns fixable/action tunnel-down (the deferred-vpn verdict is retired — it was look-don't-touch, and it never caught tailscale at all since NM lists it unmanaged; an NM VPN that doesn't own the route now falls through to normal classification instead of being blamed). =repair_tunnel_down= dispatches by owner (tailscale CLI / protonvpn CLI for pvpn-named devs / nmcli connection down via active-connection lookup), verifies route ownership actually moved, and registered in ACTIONS so Get Me Online drives it. fake-ip gained FAKE_IP_DEFAULT_DEV_SEQ (head-first line consume, the UP_RC_SEQ idiom) so tests watch the owner change across the verify. 11 new tests, 2 old deferred-vpn pins rewritten to the new contract; 45 suites green; live read-only diagnose on velox clean (wlan owns the route — no tunnel rows, as designed).
*** TODO Phase 4 — waybar-net tunnel badge (dotfiles) :feature:
Badge on the net glyph riding phase 3's route-ownership detection; suite coverage.