Upgrade urgency: Recommended. Big batch of operator-felt wins.
Highlights
Accessibility (#1668 — M2/M3/M4/M5 merged; M6 in flight)
- Two-tier CSS palette with semantic tokens (
--palette-*→--color-*/--text-*); operators can now hot-swap theme palettes - WCAG AA color-contrast hits across all 22 audited routes — 443 baseline violations → 0 verified by the new axe CI gate (#1696)
- Typography pass: 14px body / 12px+500 chip floor across the entire chrome (#1679)
- Hash-cell analytics palette, badge contrast, /live VCR controls (#1681)
- Audio-lab BPM + Volume sliders now have aria-labels
MQTT observability
- Per-source MQTT status endpoint + Observers panel (#1682) — connected/disconnected/last-packet/error counters per broker
- Mobile-friendly: cards at ≤640px instead of squished table (#1698)
Cold-load + analytics correctness
- Packet-store cold-load actually loads the database now (#1691). Pre-fix: after restart, only 0.3% of DB rows were loaded into RAM, dashboards looked empty for hours. Root cause: hot-load filtered by
first_seen(immutable per hash) instead of effective recency. Newtransmissions.last_seendenormalized column + writer-side update fixes this end-to-end. - Analytics endpoint returns 503 Retry-After during warm-up (#1688) — operators no longer see post-restart partial slices
- Warm-up banner surfaces backfill state in the UI (#1683)
Firmware 1.16 sync
- Server-side decoder parity for extended ACK payloads (#1695)
- Customizer toggle to hide 1-byte path hops (collide ~8-way at 2k nodes) — #1689
Performance
/packetsinit parallelizes loadObservers + loadPackets (#1693) — first-row time dropped from 25-40s to <5s on slow links- Confidence rating weighted by hash mode (#1687) — 1-byte sightings carry less weight than 6-byte
CI / operability
- OpenAPI completeness gate (#1678 Phase 1)
- Release fast-path: re-tag :edge → :vX.Y.Z when SHA matches (#1680) — most patch releases now skip the 30min full pipeline rerun
- Staging disk monitor + cleanup cron (#1686)
- Slideover E2E flake-gate reduced 20× → 3×, root cause fixed in #1693
Container image
ghcr.io/kpa-clawbot/corescope:v3.9.2 (multi-arch: amd64, arm64)
Verification
- 22 routes × 2 themes × 2 viewports automated a11y gate (axe-core, #1696)
- All 19 PRs ran through the full polish chain (parallel reviewers + Kent Beck TDD gate)
- Cold-load fix verified by
transmissions.last_seentest fixture (#1691)
Operator upgrade (MikroTik)
/container add remote-image=ghcr.io/kpa-clawbot/corescope:v3.9.2 envlist=cs-env mounts=cs-data,cs-caddyfile interface=veth-corescope start-on-boot=yes name=corescope-prod-v392
Acknowledgements
External contributors carry over from v3.9.1.