ScreenTinker v1.9.2
Changes
- chore(release): v1.9.2
- docs(#146): 1.9.2 changelog / release notes (major hardening + billing + player fixes)
- fix(#146): web player — guard PlayerMediaHealth calls by METHOD, not object (stale-module TypeError)
- fix(#146): web player — reconnect drops video to "Waiting for content" (idle reset over live playback)
- fix(#146): web player — no-change refresh loses video (keeps audio); re-attach idempotently
- feat(#146): owner-only CLI to mint billing:read tokens (scripts/mint-billing-token.js)
- feat(#146): billing:read scoped token — dual-path auth for the Usage Report (Option C)
- feat(#146): usage metering + admin-gated Billable Screens report (contract system-of-record)
- feat(#146): always-on devices_connected + admin-toggleable /api/status debug block
- feat(#146): /api/status.debug throughput counters (gauges -> gauges + work done)
- chore(release): v1.9.2-beta7
- docs(#146): fallout doc — auto-quarantine (P0) + band-aware downloads (P1.2)
- test(#146) P3.9: de-flake storm harness — keep max-gap invariant, drop tick-count
- feat(#146) P3.8: soak observability block on /api/status
- fix(#146) P3.7: coalescer carries the PEAK numeric over the window
- test(#146) P2.6: boot health during a large startup trim — confirmed
- test(#146) P2.5: buildPlaylistPayload cost under mass reconnect — mitigated
- test(#146) P1.4: block-endpoint authz — owner allowed, others denied
- fix(#146) P1.3: per-feature env kill switches + fallout doc section
- fix(#146) P1.2: band-aware download caps — serve freely when healthy
- fix(#146) P1.1: resolveIdentity short-circuits on device_id (zero-lookup hot path)
- fix(#146) P0: auto-quarantine is in-memory + time-limited, never a DB block
- docs(#146): hardening fallout summary + measured before/after blocking costs
- test(#146): storm harness — the bulletproof proof
- fix(#146) E: log/write self-protection — coalesced logs, batched telemetry, bounded maps
- fix(#146) D: operator block — close the device_id-less gap + dashboard toggle
- fix(#146) C: OTA hardening under SNAT — no per-request fs, global download caps
- fix(#146) B: sustained flap-rate limiter (the trigger fix), SNAT-safe identity chain
- fix(#146) A: non-blocking maintenance — chunked+yield+band-gate all sweeps
- docs(#146): event-loop hardening plan — blast-radius audit + failure model + sequenced plan
- Update Italian translation
Artifacts
screentinker-1.9.2.tar.gz- bundle: server + frontend source + the Tizen .wgt (the signed Android APK is added at the root during release finalization).ScreenTinker.wgt- Tizen TV web app, unsigned - for inspection only.
Sign it with your own Samsung certificate (Tizen Studio + a profile that includes
your TV's DUID) to install, or - easiest - point a Tizen TV browser / URL Launcher
athttps://<your-instance>/player(no signing needed).- Docker image:
ghcr.io/screentinker/screentinker:1.9.2(also:latest). ScreenTinker.apk- signed Android player (attached during release finalization).