• Mahmoud Aglan's avatar
    feat(play): a bot plays for a player who drops; tournaments wait, then rule · 7267057e
    Mahmoud Aglan authored
    Casual online games: a player gone 30 s gets a ring on the other screen
    (no claim button); at 60 s a bot plays their seat until they are back, and
    the game goes on to its natural end. Nobody is handed a win for a drop.
    - Chess: the server plays the absent side (game.php standin_move: the
      engine near their rating; the caller never picks the move), through the
      normal move path, so clock and position checks apply. includes/chess.php
      chessApplyUci() applies the engine's move (castling, en passant,
      promotion, counters).
    - Backgammon: the client still at the table plays the seat with the bot
      and publishes each action tagged with the seat it was for; a client that
      comes back to actions played for it rebuilds from the snapshot.
    - Ludo: three silent turns no longer end a casual game; the table's bot
      keeps the seat. Domino already played gone seats; it now never ends a
      casual game on a drop.
    - A player still away when the game ends is not paid (no AFK farming).
    - A "they left" claim while the other player is plainly at the table is
      refused by the server in every game.
    - Casual tables everyone left 15+ minutes ago are closed by the scheduler
      (unpaid), and bot games idle a day; 184 rows had been stuck in progress.
    
    Tournament games: no bot. The tournament sets how long to wait and what
    then: a forfeit, or a draw (chess). The ring counts the tournament's wait,
    the server checks the absence itself (match_presence), and the scheduler
    applies the rule when no client is left to claim it.
    
    Tests: tests/play/standin-api.mjs (server rules, chess), a backgammon
    stand-in section; resume, online and tournament suites pass.
    Co-Authored-By: 's avatarClaude Opus 5.5 <noreply@anthropic.com>
    7267057e
Name
Last commit
Last update
..
2026-10-19-award-coins-type.sql Loading commit data...
2026-10-19-backgammon-online.sql Loading commit data...
2026-10-19-ludo-queue-player-count.sql Loading commit data...
2026-10-25-complete-match-level.sql Loading commit data...
2026-10-25-domino-tables.sql Loading commit data...
2026-10-25-ghost-profiles.sql Loading commit data...
2026-10-25-group-chat-privacy.sql Loading commit data...
2026-10-25-match-invites.sql Loading commit data...
2026-10-25-match-presence.sql Loading commit data...
2026-10-25-social.sql Loading commit data...
2026-10-26-ad-tracking.sql Loading commit data...
2026-10-26-complete-match-results.sql Loading commit data...
2026-10-26-game-config-keys.sql Loading commit data...
2026-10-26-manager-columns.sql Loading commit data...
2026-10-26-manager-orgs.sql Loading commit data...
2026-10-26-org-player-api.sql Loading commit data...
2026-10-26-org-unify.sql Loading commit data...
2026-10-26-profiles-guard.sql Loading commit data...
2026-10-26-redeem-followups.sql Loading commit data...
2026-10-26-redeem-functions.sql Loading commit data...
2026-10-26-redeem-tournament-reasons.sql Loading commit data...
2026-10-26-redeem.sql Loading commit data...
2026-10-26-season-progress.sql Loading commit data...
2026-10-26-security-lockdown.sql Loading commit data...
2026-10-26-tournament-economy.sql Loading commit data...
2026-10-26-tournament-rounds-rls.sql Loading commit data...
2026-10-27-comms-fixes.sql Loading commit data...
2026-10-27-disconnect-rules.sql Loading commit data...
2026-10-27-hosting-bracket.sql Loading commit data...
2026-10-27-hosting-engine.sql Loading commit data...
2026-10-27-hosting-prizes.sql Loading commit data...
2026-10-27-hosting-registration.sql Loading commit data...
2026-10-27-hosting-schema.sql Loading commit data...
2026-10-27-test-accounts.sql Loading commit data...
2026-10-27-tournaments-grants.sql Loading commit data...