Live timing: verify POWERUPS column against a real capture #27

Closed
opened 2026-10-19 22:08:16 +00:00 by mintopia · 3 comments
Owner

What to build

Confirm the live-timing POWERUPS column (#24) against real feed data once standings carry powerups, and fix anything that differs from the mockup.

  • Record a 20-racer SP race with ws_tap.py record (keep the capture out of git).
  • Replay it into examples/live-timing/index.html; the column sits between MPH and MODS, one icon per slot, empty slots as outlines.
  • Check icon names from the feed resolve to files in examples/live-timing/icons (e.g. shield); missing ones fall back to initials.

Acceptance criteria

  • POWERUPS column appears with a real capture and tracks pickups/fires during replay
  • Every powerup kind the feed sends shows its icon
  • Below 900 px wide the column still fits without wrapping

Blocked by

## What to build Confirm the live-timing POWERUPS column (#24) against real feed data once standings carry `powerups`, and fix anything that differs from the mockup. - Record a 20-racer SP race with `ws_tap.py record` (keep the capture out of git). - Replay it into `examples/live-timing/index.html`; the column sits between MPH and MODS, one icon per slot, empty slots as outlines. - Check icon names from the feed resolve to files in `examples/live-timing/icons` (e.g. `shield`); missing ones fall back to initials. ## Acceptance criteria - [ ] POWERUPS column appears with a real capture and tracks pickups/fires during replay - [ ] Every powerup kind the feed sends shows its icon - [ ] Below 900 px wide the column still fits without wrapping ## Blocked by - #26
Author
Owner

Not done: needs a real 20-racer SP race recorded from the running game (GUI session), which I cannot drive unattended. No code changed.

Static checks done instead:

  • Existing captures in /tmp/pk (ws2-5, wsss) predate #26: zero powerups keys, so they cannot verify the column.
  • Feed names (docs/state-websocket.md, #26): nitro, shock, shunt, bolt, barge, mine, repair, shield, unknown. All but unknown have icons/<name>.webp; unknown falls back to initials ("U") via modIcon onerror.
  • <=900px: MODS/MPH/S1-S3 hidden (.wide); grid uses var(--pu) for the POWERUPS column. Not checked visually.
  • Header order is MODS then POWERUPS, not "between MPH and MODS" as the issue text says.

Next: human records ws_tap.py record 9000 race.jsonl on a powerups-enabled build, then replay into index.html and tick the ACs.

Not done: needs a real 20-racer SP race recorded from the running game (GUI session), which I cannot drive unattended. No code changed. Static checks done instead: - Existing captures in /tmp/pk (ws2-5, wsss) predate #26: zero `powerups` keys, so they cannot verify the column. - Feed names (docs/state-websocket.md, #26): nitro, shock, shunt, bolt, barge, mine, repair, shield, unknown. All but `unknown` have `icons/<name>.webp`; `unknown` falls back to initials ("U") via modIcon onerror. - <=900px: MODS/MPH/S1-S3 hidden (.wide); grid uses var(--pu) for the POWERUPS column. Not checked visually. - Header order is MODS then POWERUPS, not "between MPH and MODS" as the issue text says. Next: human records `ws_tap.py record 9000 race.jsonl` on a powerups-enabled build, then replay into index.html and tick the ACs.
mintopia removed their assignment 2026-10-19 22:16:05 +00:00
Author
Owner

Done on harmonic/task-26 (b9c3147, 19ad00c). All on BLUR_ENGINE=recomp.

Race run (per feedback): 5 clients in LAN mode, Custom Game → Barcelona Oval (City Breach), 3 laps. All 5 joined, raced and finished; feed recorded from every instance with ws_tap.py record (/tmp/t26/final/{alpha..echo}.jsonl, ~2.4 MB each, not in git; track = SPA_Barcelona_Oval_1).

  • 3+ instances on one Mac didn't work before, so I added dev-only BLUR_LANSIM=k: instance k is 10.77.0.k to the game, and on the wire it uses 127.0.0.1 with ports +100·k, plus a broadcast fan-out. Documented in docs/multiplayer-lan.md / dev-flags.md.

Acceptance criteria (capture replayed into index.html in headless Chrome at 1600, 860 and 700 px):

  • POWERUPS column appears and tracks pickups/fires: ~165 queue changes per instance over 5 racers, empty slots drawn as outlines.
  • Every kind the feed sent shows its icon: shock, shunt, mine, shield, barge (final run), plus bolt, repair (earlier runs). No broken images. A transient unknown (~1 s, one racer, one instance) falls back to initials "U", now the same size as the icons.
  • Fits below 900 px without wrapping. Bug found and fixed: below 900 px the row's MODS cell stayed visible, because .mods{display:flex} overrode .wide{display:none} at equal specificity. Every cell shifted, POWERUPS spilled into GAP and POS wrapped. Now .row > .wide.

Also fixed: racer names were truncated to 5 chars (charlie → charl). Node +0x54 is not the name length (memory dump: 5 for every player), so names are now read up to the NUL. Verified on a 3-instance run; ADR 0013 updated.

Placement: the column sits after MODS (MODS | POWERUPS | GAP), per #24's mockup. Below 900 px it follows RACER. The issue's "between MPH and MODS" wording was not applied, since MPH is at the far right.

Follow-up: #28 covers feed problems seen in the captures, all outside this ticket: names drop after finish, a bogus 0.1 s best lap, race_result inconsistent across instances, and the unknown blip.

Tests: full ctest 23/23 pass.

Done on `harmonic/task-26` (b9c3147, 19ad00c). All on `BLUR_ENGINE=recomp`. **Race run (per feedback)**: 5 clients in LAN mode, Custom Game → Barcelona Oval (City Breach), 3 laps. All 5 joined, raced and finished; feed recorded from every instance with `ws_tap.py record` (`/tmp/t26/final/{alpha..echo}.jsonl`, ~2.4 MB each, not in git; `track` = `SPA_Barcelona_Oval_1`). - 3+ instances on one Mac didn't work before, so I added dev-only **`BLUR_LANSIM=k`**: instance k is 10.77.0.k to the game, and on the wire it uses 127.0.0.1 with ports +100·k, plus a broadcast fan-out. Documented in `docs/multiplayer-lan.md` / `dev-flags.md`. **Acceptance criteria** (capture replayed into `index.html` in headless Chrome at 1600, 860 and 700 px): - [x] POWERUPS column appears and tracks pickups/fires: ~165 queue changes per instance over 5 racers, empty slots drawn as outlines. - [x] Every kind the feed sent shows its icon: shock, shunt, mine, shield, barge (final run), plus bolt, repair (earlier runs). No broken images. A transient `unknown` (~1 s, one racer, one instance) falls back to initials "U", now the same size as the icons. - [x] Fits below 900 px without wrapping. **Bug found and fixed:** below 900 px the row's MODS cell stayed visible, because `.mods{display:flex}` overrode `.wide{display:none}` at equal specificity. Every cell shifted, POWERUPS spilled into GAP and POS wrapped. Now `.row > .wide`. **Also fixed:** racer names were truncated to 5 chars (`charlie` → `charl`). Node `+0x54` is not the name length (memory dump: 5 for every player), so names are now read up to the NUL. Verified on a 3-instance run; ADR 0013 updated. **Placement:** the column sits after MODS (MODS | POWERUPS | GAP), per #24's mockup. Below 900 px it follows RACER. The issue's "between MPH and MODS" wording was not applied, since MPH is at the far right. **Follow-up:** #28 covers feed problems seen in the captures, all outside this ticket: names drop after finish, a bogus 0.1 s best lap, `race_result` inconsistent across instances, and the `unknown` blip. Tests: full ctest 23/23 pass.
Author
Owner

Completed and merged by Harmonic (task 26).

Completed and merged by Harmonic (task 26).
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
mintopia/blur#27
No description provided.