momPanel v0.5.0
Added
- Companion mode (experimental preview). A reimagined, status-by-exception panel
(src/preview/companion.js/.css): a greeting and giant clock, the weather as the
hero with a 4-day strip, and a single "All is well" health card (Internet / Wi-Fi /
Printer / Sound / Speed / Space) that surfaces plain-language attention cards — with
the right settings button — only when something needs attention. The background sky
shifts with the time of day. Toggled in About → Preview (experimental_uiin
config; the app reloads on switch). Same collectors, same cadences; DOM is patched
in place, never rebuilt on a timer. - Remembered window position.
WindowEvent::Movedpersists the outer position
(throttled to ≥2s, flushed on close) to newwindow_x/window_yconfig fields and
restores it viaset_positionbefore the now-created-hidden window is shown.
Best-effort on GNOME Wayland (the compositor ignores client positioning); effective
on X11 and Windows. - Single instance.
tauri-plugin-single-instance, registered first in the builder;
a second launch shows/unminimizes/focuses the running panel instead of spawning a
duplicate process — important for an app that autostarts on login. - CI.
.github/workflows/ci.ymlrunscargo test+cargo checkon PRs and
pushes to main — the first automated Linux compile check forcfg(linux)code.
Fixed
- Locale-proof collectors. Every parsing subprocess spawn (
nmcli,lpstat,
wpctl) now pinsLC_ALL=C/LANG=C. Previously the parsers matched English
literals, so on any non-English system Printers listed nothing and Wi-Fi read
"unavailable" while connected. - Stale-response race. The tile loop tags each fetch with a generation and
discards out-of-order responses — a slow 20s poll can no longer repaint "Offline"
over a fresh D-Bus-pushed "Online" after a reconnect. - First-run ZIP prompt lifecycle. Opening a new prompt cleanly resolves the
previous one (no hung promise, no leaked document keydown listener), and the
automatic prompt fires once per session instead of on every window focus after a
cancel. The explicit set/change-location affordances still always prompt. - Modal hygiene. A shared
src/modal.jscloses the active overlay before another
opens (no stacked keydown listeners), and.modal-backdropnow layers above the
bottom-right control pill (the "i" button was clickable through the backdrop). - Clock/date rebuild churn. Both tiles patch their DOM in place instead of
innerHTML-rebuilding every second — the analog/digital toggle keeps focus and hover,
and the month calendar rebuilds once a day, not 86,400 times. The analog second hand
is omitted underprefers-reduced-motion(previously claimed, not implemented). - Weather robustness. A failed refresh keeps the last good forecast on screen with
an "as of" time; the ZIP geocode is cached in config and Open-Meteo's geocoding API
backs up zippopotam.us (no longer a single point of failure); one shared reqwest
client instead of a fresh TLS setup per fetch; a missing ZIP shows a friendly
"Set up weather" button instead of a dead tile. - Memwatch efficiency. The watcher reloads config only when a save-generation
counter changes (was: read + parseconfig.jsonfrom disk every 2 seconds,
forever). Config writes are atomic (tmp + rename) and serialized so overlapping
saves can't drop a patch or expose half-written JSON. Alert tone/speech play on a
detached thread so the poll loop keeps ticking during playback. - Internet probe. The TCP reachability verdict is cached for 20s and tries 443
before 53 (some networks block outbound DNS to Cloudflare). - Gauges no longer render a stray colored dot at 0% (round linecap on an empty arc);
storage reports decimal GB to match GNOME Files/Disks; the What's New card caps
its height and scrolls (a long release note pushed "Got it" off-screen); theme
colors — including High contrast — now reach the internet globe, Wi-Fi arcs, and
printer dots; muted volume shows a big crossed speaker and "Sound is off"; the
size control clamps to the monitor (font + window shrink together) and no longer
re-centers the window on a size change.
Changed
- Dead
src/mock.jsremoved (it was imported nowhere);package.jsonversion aligned
with the app version;libappindicator3-devdropped from the release workflow (no
tray icon).
Installs and updates automatically from this release. Linux/Zorin: download the AppImage (the self-updating bundle). Windows: run the _x64-setup.exe.