fix(live): make the manager show the tournaments EL3AB actually runs
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:
Claude Opus 5 (1M context) <noreply@anthropic.com>
Showing
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
tools/README.md
0 → 100644
tools/dev-server.php
0 → 100644
tools/verify-cycle.mjs
0 → 100644
This diff is collapsed.
Please register or sign in to comment