fix(android): a worker crash lands in the log instead of dying silent

The diagnostics page showed the status job "waiting" while its runs
and the report-now kick died without a trace: any exception before the
first log line was invisible, indistinguishable from a job that never
starts. Every worker now wraps its run — a crash logs its type, message,
and first frame; a cancellation logs as such and rethrows. The screen
gains the report-now kick's own row (a one-time job's empty list is
"never run", not an error) and the tap lands in the log, so the next
stale-row mystery names its cause instead of hiding it.
This commit is contained in:
vhaudiquet committed 2026-10-25 19:18:13 +02:00
1 parent 7225dfddd3
commit 5e9952ac6d
7 files changed
+85 -16

No files matched your search

+4 -2
View File
@@ -29,8 +29,10 @@ manages the device fleet the claw keeps.
auto-detected system checks (battery optimization, background
restriction, notifications) each with a jump into the exact settings
page when the setting is wrong, a "report now" kick of the status
worker, and the workers' in-memory flight recorder (a 200-line ring,
newest first, copyable) where every run logs its outcome.
worker (its one-time job has a row of its own, and every worker
crash-lands in the log instead of dying silently), and the workers'
in-memory flight recorder (a 200-line ring, newest first, copyable)
where every run logs its outcome.
Trade-off: the token is stored in plain DataStore rather than
EncryptedSharedPreferences; `androidx.security:security-crypto` is an
alpha-quality, unmaintained artifact, and the OS app sandbox already covers