INC-2026-04-04: Prevention

Prevention

Short-term (This Week)

  • Remove box-shadow from waybar CSS - Evan

  • Disable infinite CSS animations - Evan

  • Disable transition: all properties - Evan

  • Create missing ~/.local/bin/waybar-*-info.sh scripts (5 missing on-click handlers) - Evan

  • Document normal thermal baseline (CPU 56°C idle, 85°C load) - Evan

Long-term (This Quarter)

  • Set up thermal monitoring script (alert if CPU >80°C sustained) - Evan

  • Add waybar restart to a daily systemd timer as a defensive measure - Evan

  • Performance-test any future CSS theme changes before committing - Evan

  • Evaluate whether alpha() can be replaced with solid colors for further CPU savings - Evan

Lessons Learned

What Went Well

  • Systematic isolation methodology narrowed from "fans are loud" to exact CSS root cause in <1 hour

  • Minimal config test definitively separated modules from CSS

  • Previous incident (INC-2026-03-27) provided context for GPU vs CPU thermal analysis

  • GPU was quickly ruled out, preventing a repeat of the dGPU investigation

What Could Be Improved

  • Initial hypothesis (CSS animations) was partially correct but led to 15 minutes of sed-based comment edits that introduced CSS parse errors — should have read the file directly from the start

  • Multiple incorrect assumptions tested sequentially (animations, transitions, playerctl, box-shadow) when a single minimal-CSS test would have isolated the class of problem immediately

  • No performance baseline existed for waybar CPU usage

Key Takeaways

  1. GTK3 CSS box-shadow is CPU-rendered — never use box-shadow with alpha() in waybar themes. It forces software rendering on every repaint.

  2. transition: all on frequently-updated widgets is expensive — waybar modules update every 2-5 seconds, triggering transition recomputation each time.

  3. Isolation tests beat hypothesis chasing — the minimal CSS test took 30 seconds and gave a definitive answer. Should have run it first instead of fifth.

  4. Long-running GTK3 processes degrade — waybar at 44h uptime had accumulated enough rendering overhead to enter a CPU spin. Consider periodic restarts.

  5. Same class as Hyprland borderangle bug — infinite animations on Wayland compositors/bars are CPU poison (documented in CLAUDE.md).