This release adds 3 notable features for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Topics
Summary
AI summaryBroad release touches Server & celery resilience, viewer, Viewer & webview, and Build & infra.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Feature | Low |
Adds arm64/Qt6 support for pi3-64 board and Rock Pi 4 fleet; retains 32‑bit pi3 legacy. Adds arm64/Qt6 support for pi3-64 board and Rock Pi 4 fleet; retains 32‑bit pi3 legacy. Source: llm_adapter@2026-06-09 Confidence: high |
— |
| Feature | Low |
Adds Sentry error tracking to Django services. Adds Sentry error tracking to Django services. Source: llm_adapter@2026-06-09 Confidence: high |
— |
| Feature | Low |
Tags Sentry events with device type, host kernel, and board model. Tags Sentry events with device type, host kernel, and board model. Source: llm_adapter@2026-06-09 Confidence: high |
— |
| Feature | Low |
Stamps releases with build hash and tags balena deploys in Sentry. Stamps releases with build hash and tags balena deploys in Sentry. Source: llm_adapter@2026-06-09 Confidence: high |
— |
| Feature | Low |
Offers HandBrake GUI steps for rejected video uploads in server. Offers HandBrake GUI steps for rejected video uploads in server. Source: granite4.1:30b@2026-06-09-audit Confidence: low |
— |
| Feature | Low |
Adds hourly job to unpin pinned fleet devices in balena automation. Adds hourly job to unpin pinned fleet devices in balena automation. Source: granite4.1:30b@2026-06-09-audit Confidence: low |
— |
| Feature | Low |
Unpinner also rolls OS and supervisor updates for fleets in balena automation. Unpinner also rolls OS and supervisor updates for fleets in balena automation. Source: granite4.1:30b@2026-06-09-audit Confidence: low |
— |
| Dependency | Low |
Bumps uvicorn from 0.32.1 to 0.49.0, pyyaml from 6.0.2 to 6.0.3, django‑stubs from 6.0.3 to 6.0.5, and updates github‑actions group. Bumps uvicorn from 0.32.1 to 0.49.0, pyyaml from 6.0.2 to 6.0.3, django‑stubs from 6.0.3 to 6.0.5, and updates github‑actions group. Source: llm_adapter@2026-06-09 Confidence: high |
— |
| Performance | Medium |
Paces Qt6 video frame delivery to scene‑render capacity in viewer. Paces Qt6 video frame delivery to scene‑render capacity in viewer. Source: llm_adapter@2026-06-09 Confidence: high |
— |
| Bugfix | Medium |
Stops reporting transient Redis blips and client disconnects to Sentry. Stops reporting transient Redis blips and client disconnects to Sentry. Source: llm_adapter@2026-06-09 Confidence: high |
— |
| Bugfix | Medium |
Drops transient Redis TimeoutError events from Sentry reporting. Drops transient Redis TimeoutError events from Sentry reporting. Source: llm_adapter@2026-06-09 Confidence: high |
— |
| Bugfix | Medium |
Silences celery redis‑backend reconnect‑retry log messages. Silences celery redis‑backend reconnect‑retry log messages. Source: llm_adapter@2026-06-09 Confidence: high |
— |
| Bugfix | Medium |
Runs PulseAudio so Qt 6 video plays with audio in viewer. Runs PulseAudio so Qt 6 video plays with audio in viewer. Source: llm_adapter@2026-06-09 Confidence: high |
— |
| Bugfix | Medium |
Opens SQLite with WAL journaling and a busy timeout in server. Opens SQLite with WAL journaling and a busy timeout in server. Source: granite4.1:30b@2026-06-09-audit Confidence: low |
— |
| Bugfix | Medium |
Gates worker startup on applied database migrations in celery. Gates worker startup on applied database migrations in celery. Source: granite4.1:30b@2026-06-09-audit Confidence: low |
— |
| Bugfix | Medium |
Catches asset‑probe timeout instead of hard‑killing the celery worker. Catches asset‑probe timeout instead of hard‑killing the celery worker. Source: granite4.1:30b@2026-06-09-audit Confidence: low |
— |
| Bugfix | Medium |
Survives unreadable static files instead of crash‑looping in server. Survives unreadable static files instead of crash‑looping in server. Source: granite4.1:30b@2026-06-09-audit Confidence: low |
— |
| Bugfix | Low |
Aspect-fit, gapless looping, and caps video to 30 fps on pi1/2/3 in viewer. Aspect-fit, gapless looping, and caps video to 30 fps on pi1/2/3 in viewer. Source: granite4.1:30b@2026-06-09-audit Confidence: low |
— |
| Bugfix | Low |
Defaults x86 audio fallback to ALSA 'default' in viewer. Defaults x86 audio fallback to ALSA 'default' in viewer. Source: granite4.1:30b@2026-06-09-audit Confidence: low |
— |
| Bugfix | Low |
Waits for Wayland socket before spawning webview in viewer. Waits for Wayland socket before spawning webview in viewer. Source: granite4.1:30b@2026-06-09-audit Confidence: low |
— |
| Bugfix | Low |
Adds page‑load watchdog to prevent stalled fetches from freezing display in webview. Adds page‑load watchdog to prevent stalled fetches from freezing display in webview. Source: granite4.1:30b@2026-06-09-audit Confidence: low |
— |
| Bugfix | Low |
Respawns webview when it dies mid‑DBus call, before setup's bus.get, and on video‑play DBus death rather than logging and stopping. Respawns webview when it dies mid‑DBus call, before setup's bus.get, and on video‑play DBus death rather than logging and stopping. Source: granite4.1:30b@2026-06-09-audit Confidence: low |
— |
| Bugfix | Low |
Silences shell monitor‑thread crash report on webview exit in viewer. Silences shell monitor‑thread crash report on webview exit in viewer. Source: granite4.1:30b@2026-06-09-audit Confidence: low |
— |
| Bugfix | Low |
Stores display_power in redis as a string, not a bool, in server/celery. Stores display_power in redis as a string, not a bool, in server/celery. Source: granite4.1:30b@2026-06-09-audit Confidence: low |
— |
| Bugfix | Low |
Keeps legacy host timezones from causing Django crash loops in server. Keeps legacy host timezones from causing Django crash loops in server. Source: granite4.1:30b@2026-06-09-audit Confidence: low |
— |
| Bugfix | Low |
Streams backup download to avoid timeouts for large libraries in server. Streams backup download to avoid timeouts for large libraries in server. Source: granite4.1:30b@2026-06-09-audit Confidence: low |
— |
| Bugfix | Low |
Accepts 12‑hour AM/PM times in asset edit form in views. Accepts 12‑hour AM/PM times in asset edit form in views. Source: granite4.1:30b@2026-06-09-audit Confidence: low |
— |
| Bugfix | Low |
Surfaces exception detail in GitHub update‑check warnings and logs release‑check failures at warning level, not error, in server/views. Surfaces exception detail in GitHub update‑check warnings and logs release‑check failures at warning level, not error, in server/views. Source: granite4.1:30b@2026-06-09-audit Confidence: low |
— |
| Bugfix | Low |
Ships libwebpdemux2 so pi3 Pillow can save WebP images. Ships libwebpdemux2 so pi3 Pillow can save WebP images. Source: granite4.1:30b@2026-06-09-audit Confidence: low |
— |
| Bugfix | Low |
Persists Redis data to mounted volume for device identity survival on recreation. Persists Redis data to mounted volume for device identity survival on recreation. Source: granite4.1:30b@2026-06-09-audit Confidence: low |
— |
Full changelog
Maintenance release rolling up everything since 2026.06.1 (the 2026.06.2 bump was never cut as a release). Focus areas: arm64/Qt6 board support, Sentry error tracking, viewer/webview crash-recovery, and server/celery resilience. Cutting this triggers the balena OTA deploy to all screenly_ose/anthias-* fleets; unpinned devices pull it and restart.
New boards & fleets
- feat(viewer,build,balena): add arm64/Qt6 pi3-64 board and the Rock Pi 4 fleet; keep 32-bit pi3 as legacy (#2985).
Observability
- feat(sentry): add Sentry error tracking to the Django services (#3007).
- feat(sentry): tag events with device type, host kernel, and board model (#3021).
- feat(sentry): stamp the release with the build hash and tag balena deploys (#3025).
- fix(sentry): stop reporting transient redis blips and client disconnects (#3018), also drop transient redis TimeoutError events (#3028), and silence the celery redis-backend reconnect-retry log (#3036).
- fix(celery): don't report the by-design codec rejection to Sentry (#3041).
Performance
- perf(viewer): pace Qt6 video frame delivery to scene-render capacity (#3006).
- fix(viewer): aspect-fit, gapless looping, and 30fps cap for pi1/2/3 video (#3004).
Viewer & webview
- fix(viewer): run PulseAudio so Qt 6 video plays with audio (#3001).
- fix(viewer): default x86 audio fallback to ALSA 'default' (#3038).
- fix(viewer): wait for cage's Wayland socket before spawning the webview (#3030).
- fix(webview): add a page-load watchdog so a stalled fetch can't freeze the display (#3003).
- fix(viewer): respawn the webview when it dies mid-D-Bus call (#3012), before setup's
bus.get(#3020), and on a video-play D-Bus death rather than log+stop (#3031). - fix(viewer): silence sh's monitor-thread crash report on webview exit (#3011).
Server & celery resilience
- fix(server): open SQLite with WAL journaling and a busy timeout (#3015).
- fix(celery): gate worker startup on applied database migrations (#3016).
- fix(celery): catch the asset-probe timeout instead of hard-killing the worker (#3017).
- fix(celery): store
display_powerin redis as a string, not a bool (#3032). - fix(server): survive unreadable static files instead of crash-looping (#3026).
- fix(server): keep legacy host timezones from crash-looping Django (#3010).
- fix(server): stream the backup download so large libraries don't time out (#3005).
- fix(views): accept 12-hour AM/PM times in the asset edit form (#3002).
- fix(server): surface the exception detail in GitHub update-check warnings (#3023) and log release-check failures at warning, not error (#3019).
Uploads
- feat(server): offer HandBrake GUI steps for rejected video uploads (#3040).
Balena fleet automation
- feat(balena): hourly job to unpin pinned fleet devices (#2980).
- feat(balena): unpinner also rolls OS + supervisor updates (#2984).
Build & infra
- fix(build): ship libwebpdemux2 so pi3 Pillow can save WebP (#3042).
- fix(redis): persist data to the mounted volume so device identity survives recreation (#2983).
- fix(docker): pull the BuildKit frontend via mirror.gcr.io (#3008).
- Fixes SBOM (#2982).
Dependencies
- Bump uvicorn 0.32.1 → 0.49.0 (#2991), pyyaml 6.0.2 → 6.0.3 (#2993), django-stubs 6.0.3 → 6.0.5 (#2989), types-python-dateutil (#2992), and the github-actions group (#2994).
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
Related context
Related tools
Earlier breaking changes
- v2026.05.1 Removes legacy `srly-ose-redis` container on upgrade.
Beta — feedback welcome: [email protected]