fix(update): serialize widget upgrades and classify CLI network failures (#337)

* fix(update): serialize widget upgrades and classify CLI network failures

kpackagetool6 -u deletes the installed package before copying the new one.
Two widget instances (or setup/make update) upgrading at once could leave
no package at all: 2 of 25 overlapping real upgrades removed the widget.
The updater now holds a per-user flock around kpackagetool6 and re-reads
the installed metadata after acquiring it, so a release already installed
by another run reports current instead of upgrading again.

The managed CLI helper reported read timeouts and dropped connections as a
generic error, because urllib wraps only connection setup in URLError, and
a truncated download as a verification failure. Both are now network
failures; IncompleteRead no longer escapes without a JSON result, and the
CLI release check keeps the local version when it occurs.

Documentation: README requirements, development updater notes, CHANGELOG.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(update): share the install lock across launch environments

The lock lived in XDG_RUNTIME_DIR, so a terminal setup or make run without
that variable locked a different file than the panel widget and could still
overlap its kpackagetool6 upgrade. Keep the lock in the data directory that
kpackagetool6 installs into instead. Also release it before finish_setup on
the already-current path, which can prompt or install the CLI for minutes.

Addresses CodeRabbit review on #337.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
3c9e2e02c5Simone committed on 9/23/2026, 8:37:14 PM· committed by GitHubparent3f62b1b
11 files changedLine totals unavailable