Commit graph

  • 1a5c468537 fix(#148) android root cause: single-socket-per-device invariant (no duplicate connections) ScreenTinker 2026-07-02 19:29:50 -0500
  • bd5f4253ae docs(#148): android duplicate-socket root-cause fix + verification spec ScreenTinker 2026-07-02 19:29:50 -0500
  • 26d07c7b06 chore(release): v1.9.2-patch2 v1.9.2-patch2 ScreenTinker 2026-07-02 19:13:06 -0500
  • 2f9d2719ea docs(#148): 1.9.2-patch2 changelog (server-only eviction-storm net; not a #148 close) ScreenTinker 2026-07-02 19:13:05 -0500
  • e1ce36b2a8 fix(#148) patch2: per-device session-settle debounce — absorb duplicate-socket storms ScreenTinker 2026-07-02 19:12:46 -0500
  • 9922a0c30d docs(#148): server eviction-storm analysis (field-safe net spec) ScreenTinker 2026-07-02 19:12:46 -0500
  • 7d2233cd42 chore(release): v1.9.2-patch1 v1.9.2-patch1 ScreenTinker 2026-07-02 15:00:40 -0500
  • 28434d8677 docs(#148): 1.9.2-patch1 changelog (server-only connection-lifecycle hardening; not a guaranteed #148 fix) ScreenTinker 2026-07-02 15:00:39 -0500
  • bcfe3eaf8b fix(#148) Items 2-4: mark-offline closes the socket + tighten ping + TCP keepalive ScreenTinker 2026-07-02 14:59:25 -0500
  • 8809007d9e fix(#148) Item 1: exempt paired+authenticated devices from the flap-limiter quarantine ScreenTinker 2026-07-02 14:59:25 -0500
  • d737b4f2b0 docs(#148): mass-disconnect + connection-lifecycle + half-open analyses ScreenTinker 2026-07-02 14:59:25 -0500
  • afa8bec2bc chore(release): v1.9.2 v1.9.2 ScreenTinker 2026-07-01 22:42:31 -0500
  • 34ed0683f0 docs(#146): 1.9.2 changelog / release notes (major hardening + billing + player fixes) ScreenTinker 2026-07-01 22:42:00 -0500
  • 4c92391ba0 Merge #145 (Update Italian translation) into main ScreenTinker 2026-07-01 22:38:29 -0500
  • 04256e59a1 Merge fix/146-hardening (#146 hardening) into main for 1.9.2 ScreenTinker 2026-07-01 22:36:38 -0500
  • 5ba5905637 fix(#146): web player — guard PlayerMediaHealth calls by METHOD, not object (stale-module TypeError) ScreenTinker 2026-07-01 22:19:22 -0500
  • b57e7eec7f fix(#146): web player — reconnect drops video to "Waiting for content" (idle reset over live playback) ScreenTinker 2026-07-01 22:03:44 -0500
  • 26c72d62bf fix(#146): web player — no-change refresh loses video (keeps audio); re-attach idempotently ScreenTinker 2026-07-01 21:51:52 -0500
  • 385eda3cb1 feat(#146): owner-only CLI to mint billing:read tokens (scripts/mint-billing-token.js) ScreenTinker 2026-07-01 21:31:11 -0500
  • 677b17028e feat(#146): billing:read scoped token — dual-path auth for the Usage Report (Option C) ScreenTinker 2026-07-01 21:16:21 -0500
  • 977407ce99 feat(#146): usage metering + admin-gated Billable Screens report (contract system-of-record) ScreenTinker 2026-07-01 20:45:27 -0500
  • 9418582de5 feat(#146): always-on devices_connected + admin-toggleable /api/status debug block ScreenTinker 2026-07-01 18:45:40 -0500
  • fa3ab44c20 feat(#146): /api/status.debug throughput counters (gauges -> gauges + work done) ScreenTinker 2026-06-30 23:24:32 -0500
  • e5661c9894 chore(release): v1.9.2-beta7 ScreenTinker 2026-06-30 22:24:40 -0500
  • 73e9992ffc docs(#146): fallout doc — auto-quarantine (P0) + band-aware downloads (P1.2) ScreenTinker 2026-06-30 22:16:15 -0500
  • 4547a677ab test(#146) P3.9: de-flake storm harness — keep max-gap invariant, drop tick-count ScreenTinker 2026-06-30 22:14:17 -0500
  • bfa99771ca feat(#146) P3.8: soak observability block on /api/status ScreenTinker 2026-06-30 22:13:40 -0500
  • 0f990c2e7e fix(#146) P3.7: coalescer carries the PEAK numeric over the window ScreenTinker 2026-06-30 22:10:45 -0500
  • 7e68e18a17 test(#146) P2.6: boot health during a large startup trim — confirmed ScreenTinker 2026-06-30 22:08:55 -0500
  • a80f0b8f6f test(#146) P2.5: buildPlaylistPayload cost under mass reconnect — mitigated ScreenTinker 2026-06-30 22:08:55 -0500
  • ad0442c80d test(#146) P1.4: block-endpoint authz — owner allowed, others denied ScreenTinker 2026-06-30 22:06:34 -0500
  • 8dd6491288 fix(#146) P1.3: per-feature env kill switches + fallout doc section ScreenTinker 2026-06-30 22:03:00 -0500
  • 067aebfd75 fix(#146) P1.2: band-aware download caps — serve freely when healthy ScreenTinker 2026-06-30 22:00:28 -0500
  • d4b2532c9a fix(#146) P1.1: resolveIdentity short-circuits on device_id (zero-lookup hot path) ScreenTinker 2026-06-30 21:57:55 -0500
  • 317754376c fix(#146) P0: auto-quarantine is in-memory + time-limited, never a DB block ScreenTinker 2026-06-30 21:56:20 -0500
  • e19a363750 docs(#146): hardening fallout summary + measured before/after blocking costs ScreenTinker 2026-06-30 21:41:05 -0500
  • 4a8d13d288 test(#146): storm harness — the bulletproof proof ScreenTinker 2026-06-30 21:39:26 -0500
  • 4bda49cf60 fix(#146) E: log/write self-protection — coalesced logs, batched telemetry, bounded maps ScreenTinker 2026-06-30 21:34:01 -0500
  • 97d489223f fix(#146) D: operator block — close the device_id-less gap + dashboard toggle ScreenTinker 2026-06-30 21:27:40 -0500
  • f037dd476a fix(#146) C: OTA hardening under SNAT — no per-request fs, global download caps ScreenTinker 2026-06-30 21:05:32 -0500
  • 9e3222a503 fix(#146) B: sustained flap-rate limiter (the trigger fix), SNAT-safe identity chain ScreenTinker 2026-06-30 20:59:53 -0500
  • 2f7133f8c8 fix(#146) A: non-blocking maintenance — chunked+yield+band-gate all sweeps ScreenTinker 2026-06-30 20:55:05 -0500
  • 106eddee52 docs(#146): event-loop hardening plan — blast-radius audit + failure model + sequenced plan ScreenTinker 2026-06-30 20:44:46 -0500
  • d0f2557957 chore(release): v1.9.2-beta6 v1.9.2-beta6 ScreenTinker 2026-06-29 23:38:35 -0500
  • cbf81a05a3 fix(#146): crash-hardening — one device's handler throw can't take down the fleet ScreenTinker 2026-06-29 23:38:11 -0500
  • 5a094710e5 chore(release): v1.9.2-beta5 v1.9.2-beta5 ScreenTinker 2026-06-29 22:12:57 -0500
  • 81e7d58099 fix(#146): reconnect/heartbeat storm containment (beta5) ScreenTinker 2026-06-29 22:12:13 -0500
  • a6e9237db0 chore(release): v1.9.2-beta4 v1.9.2-beta4 ScreenTinker 2026-06-28 23:40:17 -0500
  • 289d6b6f95 fix(#144): OTA update-check circuit-breaker + phantom guard + per-device keying ScreenTinker 2026-06-28 23:29:40 -0500
  • ddf1338190
    Update Italian translation albanobattistella 2026-06-28 10:40:22 +0200
  • 6642841cd8 chore(release): v1.9.2-beta3 v1.9.2-beta3 ScreenTinker 2026-06-28 00:02:43 -0500
  • 8d37c7f5ff fix(#143): notify a screen it's paired on reconnect (recovery-critical) ScreenTinker 2026-06-27 23:52:30 -0500
  • e32c91cfd1 chore(release): v1.9.2-beta2 v1.9.2-beta2 ScreenTinker 2026-06-27 23:18:19 -0500
  • e73428182d fix(#143): fingerprint-reclaim stuck loop — reclaim by runtime liveness, throttle log ScreenTinker 2026-06-27 22:56:48 -0500
  • 404c3301dd fix(#143): enforceable device block + fix the null-token auth short-circuit ScreenTinker 2026-06-27 22:40:30 -0500
  • dbac699854 fix(#143): content-ack flood control — per-device rate budget + loop-lag valve ScreenTinker 2026-06-27 22:21:57 -0500
  • d9fb914b9e chore(release): v1.9.2-beta1 v1.9.2-beta1 ScreenTinker 2026-06-27 19:59:34 -0500
  • ce78d0dde4 docs(#142): 1.9.2-beta1 changelog + device_status_log VACUUM maintenance note ScreenTinker 2026-06-27 19:59:17 -0500
  • f206537fed Merge #142 (reconnect-storm hardening) into main for 1.9.2-beta1 ScreenTinker 2026-06-27 19:56:46 -0500
  • 139d7d09fa fix(#142): provisioning-row cleanup window 365d -> 24h (matches its own comment) ScreenTinker 2026-06-27 19:56:32 -0500
  • 852219cb45 chore(release): v1.9.1 v1.9.1 ScreenTinker 2026-06-27 19:50:09 -0500
  • 15448d1c5d fix(#142): dedup repeated content-ack reports (secondary load) ScreenTinker 2026-06-27 19:35:04 -0500
  • 29a8896aa8 fix(#142): global device_status_log retention sweep + STATUS_LOG_RETENTION_DAYS ScreenTinker 2026-06-27 19:34:19 -0500
  • 101f086204 fix(#142): load-aware per-device reconnect throttle (the outage fix) ScreenTinker 2026-06-27 19:18:00 -0500
  • ed3cf72b82 feat(#142): event-loop lag telemetry (perf_hooks) + bounded storage ScreenTinker 2026-06-27 19:01:08 -0500
  • d90cfb3986 fix(#142): index device_status_log + de-dupe its CREATE TABLE ScreenTinker 2026-06-27 18:54:57 -0500
  • f96b65576f chore(release): guard bump-version.sh against a diverged origin/main ScreenTinker 2026-06-25 12:26:23 -0500
  • ed164647b8 Merge origin/main (Update SECURITY.md) into beta9 cut ScreenTinker 2026-06-25 12:16:47 -0500
  • ae018b8eea chore(release): v1.9.1-beta9 v1.9.1-beta9 ScreenTinker 2026-06-25 12:06:44 -0500
  • 071d7cc9c3 fix(server): persist per-item mute into the published snapshot (#129) ScreenTinker 2026-06-25 12:06:29 -0500
  • 1e1ed7e29a
    Update SECURITY.md screentinker 2026-06-24 12:09:25 -0500
  • 36c4bf523f chore(release): v1.9.1-beta8 v1.9.1-beta8 ScreenTinker 2026-06-24 11:43:31 -0500
  • 16c381254b fix(android): lower minSdk 26 -> 24 to support Android 7.0/7.1 panels (#141) ScreenTinker 2026-06-24 11:38:56 -0500
  • 01e5b10f53
    feat(setup): Debian 13 player/server install script (#137) Christopher Cookman 2026-06-23 22:47:22 -0600
  • d57d5ef591 fix(setup): poll /api/status (not /api/health) in the kiosk wait-loop ScreenTinker 2026-06-23 23:46:02 -0500
  • 9c990ff91f chore(release): v1.9.1-beta7 v1.9.1-beta7 ScreenTinker 2026-06-23 23:23:00 -0500
  • a6fe849c67 Merge fix/ota-redownload-loop (#140): stop OTA re-download loop on devices that can't silently install (#139) ScreenTinker 2026-06-23 23:22:29 -0500
  • 0c0a8dd68a fix(ota): surface stuck OTA on dashboard + read APK signer correctly on API 28/29 (#139) ScreenTinker 2026-06-23 22:49:01 -0500
  • aa23cf02dd fix(ota): stop OTA re-download loop on devices that cannot silently install (#139) ScreenTinker 2026-06-23 19:53:55 -0500
  • a9cf8747cb chore(release): v1.9.1-beta6 v1.9.1-beta6 ScreenTinker 2026-06-22 23:31:33 -0500
  • 99cad902f2 Merge fix/multizone-screenshot-composite (#138): composite multi-zone layouts in screenshot capture ScreenTinker 2026-06-22 23:22:43 -0500
  • 0ebbd20968 fix(player): composite multi-zone layouts in screenshot/stream capture ScreenTinker 2026-06-22 23:12:21 -0500
  • 184f07c272 Merge fix/mute-and-zone-orphan-fallback: per-item mute round-trip + multi-zone orphan-zone fallback ScreenTinker 2026-06-22 23:21:35 -0500
  • a36880b147 fix: per-item mute round-trip + multi-zone orphan-zone fallback & warnings ScreenTinker 2026-06-22 23:16:29 -0500
  • 7256fd0353 Fix some stuff Christopher Cookman 2026-06-20 03:24:11 -0600
  • f47b52f21e
    Fix kiosk fullscreen: detect resolution at runtime, replace --start-fullscreen with --window-position/--window-size copilot-swe-agent[bot] 2026-06-20 04:46:15 +0000
  • 852dccaec2
    Add Debian 13 setup script with server/player modes copilot-swe-agent[bot] 2026-06-20 03:59:01 +0000
  • fa3aed720f chore(release): v1.9.1-beta5 v1.9.1-beta5 ScreenTinker 2026-06-19 15:33:51 -0500
  • 1f2e923005
    fix(#134): quiet false "reconnect" log + report HDMI output and UI render resolution (#136) screentinker 2026-06-19 15:32:11 -0500
  • 7f9d403cb0 fix(#134): quiet false "reconnect" log + report HDMI output and UI render resolution ScreenTinker 2026-06-19 15:29:08 -0500
  • 7660d7433e
    fix(#109): render Android PiP overlay above the YouTube WebView video plane (#135) screentinker 2026-06-19 14:49:20 -0500
  • 255d8c0600 feat(#109): implement PiP close_button on Android (was a documented no-op) ScreenTinker 2026-06-19 14:45:14 -0500
  • 10abb3b35f docs(#109): record web PiP (HTML+JS) verification on emulator ScreenTinker 2026-06-19 14:38:30 -0500
  • 4528d07c53 fix(#109): image PiPs never painted — set slot token before decode ScreenTinker 2026-06-19 14:33:37 -0500
  • ce7b2948ae fix(#109): render Android PiP overlay above the YouTube WebView video plane ScreenTinker 2026-06-19 14:19:32 -0500
  • 89cbcac2cd
    Add PIP-Weather-Radar example (TV-style live radar overlay) (#133) screentinker 2026-06-18 21:05:19 -0500
  • e85c08eb26 docs(radar): note Leaflet is vendored locally, not committed ScreenTinker 2026-06-18 21:02:42 -0500
  • 44a0fff0ed Add PIP-Weather-Radar example (TV-style live radar overlay) ScreenTinker 2026-06-18 20:58:52 -0500
  • 0b138f10c6
    Add PiP overlay example recipes (#132) screentinker 2026-06-18 20:20:37 -0500
  • ab771ec595 Add PiP overlay example recipes ScreenTinker 2026-06-18 20:17:38 -0500