aboutsummaryrefslogtreecommitdiff
path: root/todo.org
diff options
context:
space:
mode:
Diffstat (limited to 'todo.org')
-rw-r--r--todo.org8
1 files changed, 6 insertions, 2 deletions
diff --git a/todo.org b/todo.org
index 9e681c3..b3203fd 100644
--- a/todo.org
+++ b/todo.org
@@ -1135,8 +1135,12 @@ The session section truncates; give it more characters, and keep the window sect
** TODO [#C] Doctor button for the audio panel :feature:audio:
What happens when pipewire or pulseaudio is broken — would we know? Spec written 2026-07-09: [[file:docs/specs/2026-07-09-audio-doctor-spec.org][docs/specs/2026-07-09-audio-doctor-spec.org]] (DRAFT, 7 open decisions). Grounded in a live survey of ratio's stack: there is no PulseAudio (pipewire + wireplumber + pipewire-pulse, all user-scope, so no sudo anywhere), =pactl= hangs against a hung server, and the panel can't diagnose itself because =pactl= is the layer most likely to be down. Mirrors the net panel's diag/classify/repair/doctor split, not the maint console's priv-verb table.
-*** TODO [#B] Audio panel freezes against a hung audio server :bug:audio:solo:
-Fell out of the audio-doctor survey. =status.build_status()= calls =pactl= with no timeout. Against a socket that accepts and never answers, =pactl= blocks indefinitely (measured: still blocked at 5s), so a hung pipewire-pulse freezes the panel rather than degrading it. A refused socket fails in ~0ms and does *not* reproduce this — the regression test needs an accept-and-never-answer socket. Phase 0 of the audio-doctor spec, but it's a real bug that ships on its own.
+*** 2026-07-09 Thu @ 14:12:00 -0500 Fixed: waybar's audio module died against a half-wedged server
+My first read of this was wrong. =pactl.run()= already carries =timeout=8= and raises =PactlTimeout=, so the panel degrades and does not freeze. Correcting the record rather than leaving the claim standing.
+
+The real bug, found by driving it: =build_status()= guarded its two device-list reads but called =default_sink()= and =default_source()= outside the guard. A server that answered the lists and then stopped answering raised =PactlTimeout= straight out of a function whose whole contract is to degrade to =ok: False=. =waybar-audio= calls it with nothing catching it, so the bar's audio module died instead of dimming; the GTK panel survived only because its background worker catches everything.
+
+A server that hangs on the *first* call never exposes this — =list_sinks= raises inside the guard and masks the unguarded reads behind it — so the obvious regression test passes against broken code. =fake-pactl= grew =FAKE_PACTL_SLEEP_DEFAULTS= to express "answers the lists, hangs on the defaults". Verified end to end: =waybar-audio= now emits =class: degraded= / "Audio graph unavailable" and exits 0. dotfiles =4d42eb3=; full =make test= green.
** TODO [#C] Telega coredump recurrence tell :bug:maint:
The maintenance console's coredump metric flagged telega-server on ratio (8 coredumps) and velox (18). Root cause was a version skew: the Dockerized =zevlg/telega-server:latest= is frozen at the 2026-06-05 build while the installed elisp lagged at 20260513, so the newer server's plist parser choked on the older elisp's output. .emacs.d fixed it by upgrading telega to 20260706 on both machines (docker kept, =docker pull= is a no-op against the frozen image). Host-coredump pollution should stop. If zevlg later pushes a =:latest= that outruns the installed elisp, the skew and the coredumps recur — the tell is a fresh =tdat_plist_value:500= assertion in =~/.telega/telega-server.log=. The durable escape is a host-native pinned TDLib build, at the cost of an AUR source build.