# Changelog User-visible changes to RC RaceCore are recorded here, starting with the 1.1.0 baseline. Earlier development has not been reconstructed as individual releases. The application version is maintained in `package.json` and displayed in the administration menu. Add changes under **Unreleased** as they are made. When preparing a release, move those entries into a dated version section and update the version in both `package.json` and `package-lock.json`. ## Unreleased No changes recorded yet. ## 1.2.0 - 2026-09-09 ### Added - "Jämna varv" (even laps): a guided practice exercise inside an active Open Practice session. Set a target lap time, tolerance and lap count (with a suggested target from the driver's own personal best); the Training page shows the live streak and today's best streak, and a missed lap starts a new streak without losing the best one. - Personal mobile profiles show last successful data retrieval, stale-data and failed-update warnings, and a Retry button without replacing loaded statistics or active forms. Requests time out after 15 seconds and cannot overlap. - Browser coverage for Race Day start/pause/resume/finish and switching to the next queued heat, against a simulated decoder socket. - Browser coverage for opening the OBS overlay as a real popup window (not a direct URL load): compact layout, and live clock updates that freeze on pause, polling independently of the admin page. - Browser coverage for decoder auto-reconnect after a dropped socket (simulated network interruption): reconnects onto exactly one connection, never a duplicate, and stops retrying once auto-reconnect is turned off. ### Fixed - Open Practice sessions on a sponsor (track-mode) event could show a ready/green Race Day preflight yet refuse to start, blocked by a stricter assignment check the preflight never warned about. Open Practice is now exempt from that check everywhere, matching the preflight. - The Race Day view did not refresh when the decoder connected, disconnected, or errored, so its Start button and preflight checklist could stay stale after a page load until something else triggered a re-render. - Printing or exporting start lists, results, heat sheets and team reports always showed a false "popup blocked" error and produced nothing, in every modern browser. Opening the OBS overlay as a popup had the same false "blocked" check and its window never received focus. Both used `window.open(..., "noopener,noreferrer,...")`, which returns `null` even on success by current browser standards; both now open without those flags. - The Training page crashed for any driver with fewer than 3 laps in every stint - a common state, e.g. a driver's first couple of laps in a session - because a dedup step read a property off a `null` "best stint" entry. ## 1.1.2 - 2026-09-08 ### Reliability checks - Browser coverage for sponsor-event edits, endurance race creation, team membership changes/deletion, session-type conversion and lap-limit persistence. - Overlay sorting headings share the same column tracks as driver rows. Narrow displays scroll the headings and values together. ### Added - Browser-local decoder/socket diagnostics in Settings: per-channel counters, bounded logs, pause/clear/copy and independent updates that preserve form drafts. - A prioritized ROADMAP.md with completion checklists. - Server/save status, last load/save times, stale/offline warnings and manual retry of local changes. - Isolated browser regression checks for class/driver/car creation and editing, retained drafts, reload persistence and offline save recovery (`npm run test:browser`). ### Fixed - New browser profiles connect to the page origin rather than assuming backend port 8081. - Correct chronological sorting of zero-padded times and deterministic ordering of distinct numeric-looking driver/car names. Name and identifier columns are explicitly treated as text. - OBS race-info and standings panels wrap on narrow sources. Driver names retain space and timing fields wrap instead of overflowing. ## 1.1.1 - 2026-09-07 ### Added - Sortable columns in the leaderboard, recent passings, and training tables/lists, with each list remembering its own sort choice. - OBS overlay leaderboard layout split into a race-info panel (left) and a driver-stats panel (right), so each can be positioned independently on stream. ### Fixed - Sorting by driver or car name no longer merges differently zero-padded numbers (e.g. "09" and "9") into the same position. - Sorting the interactive overlay no longer changes the row order shown on the OBS broadcast source. ## 1.1.0 - 2026-09-05 ### Added - Visible application version in the menu, read from the running server's package version. - This changelog as the starting point for tracking future changes. ### Baseline The existing feature set includes race and sponsor-event setup, team racing, AMMC timing, Race Day preflight, overlays and OBS views, Swedish and English race audio, training statistics, personal mobile profiles, import/export, and backups. See the README and in-app guide for configuration and usage. Recent improvements included in this baseline: - More compact mobile training profiles and consistent class-selector text sizing. - Mobile refresh protection while entering data, selecting a class, or saving a car change. - Separate unsaved car-change notes per class during page updates and class switching. - Preservation of loaded mobile statistics during temporary refresh failures. - Race Day preflight lists blockers first and provides shortcuts to the relevant configuration.