-
v2026.06.30 — Device diagnostics & debug reporting (M9) + follow-ups
Stabletest-go / test (push) Successful in 38stest-web / test (push) Successful in 47sandroid / Build + lint + test (push) Successful in 4m18stest-go / integration (push) Successful in 4m39srelease / Build signed APK (tag releases only) (push) Successful in 3m46srelease / Build + push container image (push) Successful in 16sreleased this
2026-06-30 19:24:58 -04:00 | 15 commits to main since this releasePer-day mutable CalVer, re-cut forward to
61171515(M9 + same-day diagnostics follow-ups, PRs #104 #105).Toggleable per-account device diagnostics: remotely enable debug mode on an account → its phone(s) stream a timeseries of device state → an admin timestamp view with copy/export for analysis. Targets roaming/poor-data recovery and locked-phone UPnP/Sonos desync.
Install this APK to get the diagnostics reporter + the follow-up fixes below; the prior build had only the index-level capture.
Diagnostics core (M9)
- Migration 0036:
diagnostic_events+ per-accountusers.debug_mode_enabled.POST /api/diagnostics(gated batch ingest),GET /api/admin/diagnostics(account/device/kind/time-window filters + export),/diagnostics/devices,PUT /api/admin/users/{id}/debug-mode. 30-day retention. - Android
DiagnosticsReporter(connectivity, server-health, UPnP, power/Doze/screen, lifecycle, heartbeat) → Room ring buffer →DiagnosticsUploader(offline-buffered, batched). Per-device OFF switch in Settings. - Web
/admin/diagnostics: timeline (auto-polls), remote toggle, Copy-JSON / Download-NDJSON.
Same-day follow-ups
- Web: diagnostics defaults to recent-500; time window under "Advanced"; newest-first sort.
playbackkind: route + player-state events relabeled out ofupnp_sync(they fire for any output); migration 0037.- Output-picker fix: connected Bluetooth now reads "Connected" (was "Available") —
isConnectedno longer derived from the wrongconnectionStatesignal. - Per-skip
track_changeevent + track-identity enrichment (local_track_id+sonos_uri) so a re-cast desync is unambiguous;sonos_*zeroed when not casting.
Use it
Install the APK, enable debug mode for the account at
/admin/diagnostics, open the app on that account, reproduce the issue, then export the window.🤖 Generated with Claude Code
Downloads
- Migration 0036: