diff --git a/CHANGELOG.md b/CHANGELOG.md index 2933d88..d629459 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,12 @@ The application version is maintained in `package.json` and displayed in the adm No changes recorded yet. +## 1.15.0 - 2026-09-10 + +### Changed + +- The session picker in Timing (and the session replay picker) now group sessions by event, most recently created event first, instead of one long flat list of every session ever created - much easier to find the right one once a club has run several races. + ## 1.14.1 - 2026-09-10 ### Fixed diff --git a/ROADMAP.md b/ROADMAP.md index 9c1d777..151d345 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -359,6 +359,14 @@ Reported 2026-09-10 by the user, right after testing the staggered-release annou Verified 2026-09-10: new unit tests cover both directly - `tests/race_timing_logic.test.js` (`getEventDrivers` follows selection order and drops stale/out-of-class ids; the staggered clock extension math for 4 drivers/3s gaps, a mass-start session with the same driver count staying unextended, and a solo staggered heat having no extension). A full headless-browser run reproduced the user's exact setup (4 drivers, participant order deliberately reversed from directory order, real "Generate qualifying" button, real Race Day "Start"): the Start List now correctly reads in the selected participant order, the announced transponder order matched it, and the live clock started at 05:09 and counted down normally instead of a flat, unextended 05:00. +## Session picker grouped by event + +Reported 2026-09-10 by the user: the "select session" dropdown (Timing) and the session replay picker turn into one very long, flat, hard-to-scan list once a club has generated several races' worth of practice + qualifying heats + finals. + +- [x] `groupSessionsByEventRecency` (`src/timing_views.js`, new, view-local) groups sessions into ``s by their event, most-recently-created event first (`state.events` is already append-order), leaving each event's own sessions in their existing order. Applied to both `activeSessionSelect` and `sessionReplaySelect`; the event name moved from being repeated on every single option to the group label instead, shortening each option to just the session name and type. + +Verified 2026-09-10 with a live headless-browser check against a real, isolated server: seeded 3 events with a mix of practice/qualifying/final sessions and confirmed the rendered ` - ${replayable.map((session) => ``).join("")} + ${groupSessionsByEventRecency(replayable, state) + .map( + ({ eventId, sessions }) => ` + ${sessions + .map((session) => ``) + .join("")} + ` + ) + .join("")} @@ -427,11 +452,15 @@ export function renderTimingView(deps) {