Major reliability hardening plus peer-to-peer Popcorn transfers, real Popcorn duels, Magic 8-Ball, and a dedicated Popcorn leaderboard, built additively on the existing 1.0.9 streaming, chat, account, reward, Direct R2, and Tailscale systems.
- Reliability fix: ignore delayed same-session host-offline events with an older host or stream revision so a newer heartbeat cannot be incorrectly undone.
- Reliability fix: full calendar backup restores now support up to 250 events in one transactional operation; an import failure rolls back instead of leaving a partially restored calendar.
- Reliability fix: Cloud heartbeat, host-offline and stale-host expiry updates now use an additive D1 generation guard, preventing concurrent updates from committing stale Cloud state. Migration 0004 is applied before the updated Worker deploys.
- Reliability fix: Direct R2 signed URL renewal is recognized as the same media object and refreshes the existing player source instead of destroying and rebuilding the player; manual Catch Up is unchanged.
- Finishing patch: fixed cross-device Popcorn watch-reward timer resets. An idle/closing phone no longer clears watch progress while another device is actively watching; movie stop and final-device disconnect still reset the timer.
- Finishing patch: enforced the existing 2,000,000,000 Popcorn balance ceiling for chat and watch rewards. Slots check the maximum 20x payout before taking the bet or starting cooldown; unsafe spins are rejected without changing odds, payouts, or current balances.
- Finishing patch: added owner-side PopcornBot queue lifecycle diagnostics and cumulative counters for received, completed, rejected and expired commands. Logs include command identifiers but never command arguments or private chat text; diagnostic failures cannot block commands.
- Finishing patch: added behavioural regression tests for multi-device watch leases, capped rewards and full slot payouts, transfers, duels, queued-command ACK/retries and expiry. Tests are required by both the Windows build and Cloudflare release validation gates.
- Hot fix: added the built-in !givepopcorn @username <amount> command. Any signed-in viewer can transfer Popcorn from their own authoritative balance to another active registered account; self-transfers, invalid/negative amounts, insufficient funds, unavailable accounts, and transfers that would exceed the 2,000,000,000 balance ceiling are rejected server-side. The PopcornBot built-in command panel was also rebuilt as a smaller 3×3 grid so all built-ins fit cleanly, and the reclaimed height is given to the Custom Commands editor/list.
- Hot fix: added Default/Main theme header customization under Settings → Themes. The Owner can type live header text, size it from 12–38 px, upload WOFF2/WOFF/TTF/OTF fonts up to 4 MB, or remove the font/text. Custom fonts are stored in the existing R2 storage and served to every viewer; the title is hard-clipped to the existing header safe area so it cannot render above or below the bar, and Resident Evil, Fallout, and Spooktober remain unchanged.
- Hot fix: repaired subtitles after background-tab/app suspension. Returning to the watch tab now refreshes stream state first, re-times the existing Movie File Mode cues, restores the viewer's saved subtitle On/Off state, forces the browser caption renderer to repaint when needed, and reloads only a failed subtitle track with the newest authorized URL without seeking or auto-catching-up the video.
- Hot fix: removed viewer-list opening lag. The viewer list now opens immediately from the existing realtime presence state instead of waiting on an HTTP/D1 round trip; stale/reconnect fallback refreshes happen in the background, and the fallback D1 query reads only currently present user IDs instead of scanning the full users table.
- Hot fix: reduced 7TV Load Set UI stalls. Loading a set no longer builds up to 600 hidden emote-picker cells/images while the picker is closed, older reply previews refresh in small low-priority batches, picker images use async/low-priority loading, and duplicate Load Set clicks are blocked while the request is in flight.
- Hot fix: repaired Movie File Mode and OBS/HLS viewer-list synchronization without automatic playback catch-up. Stream revisions now force each viewer browser to re-report its real Watching/Synced state, the existing 30-second realtime cadence re-confirms that state as a safety net, and manual Catch Up remains the only action that seeks a viewer forward.
- Hot fix: improved iPad/iPadOS Safari connection recovery. Returning from fullscreen, app switching, a suspended tab, or a network change now immediately revalidates the realtime WebSocket and live stream; stale-open sockets are rebuilt instead of waiting through reconnect backoff, and viewer leases tolerate Safari timer throttling without changing Popcorn reward timing or amounts.
- Hot fix: duel responses are now the simple !accept and !decline commands. GIF posts now stack directly under the sender username instead of leaving a large horizontal gap, including GIPHY picker posts and shared/direct GIF links; the Powered By GIPHY credit is reduced to a much smaller unobtrusive label.
- Added versioned Durable Object schema management so PartyRoom upgrades are additive, preserve existing chat/Popcorn data, and record a known schema version without rebuilding populated storage.
- Added Host Session ID + revision protection. New hosting sessions identify themselves uniquely, older/out-of-order host updates cannot overwrite a newer session, and legacy traffic remains compatible until a 1.1.0 session establishes ownership.
- Added Cloud/PartyRoom heartbeat ACK + reconciliation reporting. Cloud state can succeed even if PartyRoom temporarily misses an update; the host reports reconciliation pending and the next normal heartbeat retries automatically without stopping streaming.
- Added a background-task supervisor around existing host jobs. It observes failures and consumes task exceptions without replacing the existing heartbeat, relay, subtitle, telemetry, failover, recovery, or PopcornBot scheduling logic.
- Added short-lived viewer/watch leases using the existing WebSocket heartbeat and the existing PartyRoom alarm. Sleeping/disconnected viewers expire automatically without adding a competing timer system or changing Popcorn reward amounts/timing.
- Added a durable bounded PopcornBot command queue for Windows-forwarded commands, including unique command IDs, reconnect delivery, acknowledgements, expiry, and duplicate-response protection while keeping normal connected commands immediate.
- Added the real server-side !duel command. Use !duel @username <25-1000>, then the challenged viewer can !accept or !decline; challengers can !duel cancel and unanswered challenges expire after 60 seconds.
- Duel wagers use the authoritative Popcorn balances. Both balances are rechecked at acceptance, the winner is chosen with server-side cryptographic randomness, the winner gains the wager, the loser loses it, and duplicate settlement/negative-balance cases are blocked.
- Added the built-in !8ball command with randomized server-side Magic 8-Ball responses. Commands do not award chat Popcorn and !8ball never changes a balance.
- Added the built-in !top command. Using !top posts the full Popcorn leaderboard link in chat instead of automatically navigating the viewer, and no new button or item was added to the existing top header.
- Added a dedicated Popcorn leaderboard page that lists every registered account from highest balance to lowest using the same authoritative balances as !popcorn, !slots, !duel, and host balance tools. Zero-balance accounts are included and ties are deterministic.
- Added Back to Watching on the leaderboard. The leaderboard is a true separate page, so the Watch player is unloaded rather than leaving movie audio/video running invisibly behind it.
- Expanded PopcornBot built-in command presentation and auditing for !duel, !accept, !decline, !8ball, and !top while preventing those built-ins from being replaced by custom commands.
- Preserved Movie File Mode, OBS, FFmpeg, MediaMTX, Direct R2, Tailscale emergency failover, HLS/player controls, subtitle synchronization, accounts, roles, calendar data, chat history, !popcorn, !slots, existing balances, and existing reward amounts/timing during the 1.1.0 hardening work.