-
Mahmoud Aglan authored
Found by the gameplay pass, verified against production with throwaway accounts (31/31 checks): - ludo: the queue filtered and ordered on created_at, a column ludo_queue does not have, so no two players were ever matched; five stale rows from July to September were also deleted. - domino and ludo status/get decoded jsonb columns that already arrive as arrays: a PHP 8 TypeError, so the waiting player never learned of the match and every live poll failed. - all three: the zero-UUID claim placeholder was reported as a found match and its row deleted; failed inserts were reported as success; domino hands were renumbered by array_merge; complete passed p_winners as a string (the RPC refused it) and could pay twice. Complete now pays once, to seated players. - engine.js loads each game module independently, so one module failing to load can no longer stop the whole app from booting. Co-Authored-By:Claude Opus 5.5 <noreply@anthropic.com>
1b6fe1dc