• Mahmoud Aglan's avatar
    fix(live): make the manager show the tournaments EL3AB actually runs · 4a2cb04f
    Mahmoud Aglan authored
    The manager could only ever see the external Swiss service. Every tournament
    the player app's own engine ran was invisible here: standings came back empty,
    pairings were read from a column that does not exist (swiss_api_round_id,
    against a swiss_round_id column), and three of the fallback tables the service
    queried have never existed in this schema.
    
    The public live page was also fatal. The Swiss service wraps its rows in
    {"data": [...]}; the standings view iterated the wrapper, so "data" + 1
    crashed PHP 8 and printed a stack trace with server paths to anyone holding the
    link. Two more views did the same thing to the native pairing shape, which puts
    an object where the Swiss shape puts a name.
    
    - NativeTournamentService reads the engine's rounds and computes standings,
      pairings and tiebreaks from them; LiveDataService is native-first throughout.
    - display_errors is off in the image, so a fatal is logged, never rendered.
    - Start no longer flips a tournament to in_progress and leaves it unpaired, and
      Generate Round no longer answers "no link to the Swiss system" for every
      tournament EL3AB runs. Both ask the player app's engine, authenticating with
      the service key both apps already hold.
    
    Two controls on the live page were scenery. The player-compare selects were
    filled from a class the players view no longer emits, and choosing two names ran
    a function whose whole body hid the result; the player card modal needed a
    data-player payload nothing rendered. Both now work off data already on the page.
    
    Visually the page was rebuilt around what a spectator opens it for: the boards
    and the leaderboard first (the share box and compare tool used to be pulled
    above them on a phone by order:-1), a podium, avatars and form dots, board cards
    that show at a glance which games are still running, a readable rounds timeline,
    a knockout bracket with connectors, and a QR that leads the share card instead of
    hiding behind a disclosure. Sections no longer render at opacity 0 when script
    does not run.
    
    tools/verify-cycle.mjs runs the whole cycle across both apps and checks the
    manager reports what the players did; it passes.
    Co-Authored-By: 's avatarClaude Opus 5 (1M context) <noreply@anthropic.com>
    4a2cb04f
Name
Last commit
Last update
Connections and docs Loading commit data...
api Loading commit data...
config Loading commit data...
core Loading commit data...
layouts Loading commit data...
migrations Loading commit data...
modules Loading commit data...
public Loading commit data...
storage Loading commit data...
tools Loading commit data...
.gitignore Loading commit data...
.htaccess Loading commit data...
Dockerfile Loading commit data...
EL3AB_MANAGEMENT_SYSTEM.md Loading commit data...
EL3AB_PLAYER_APP_DATA.md Loading commit data...
captain-definition Loading commit data...
index.php Loading commit data...