# 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.4.1 - 2026-09-09 ### Fixed - A backup failure at startup (e.g. no write permission for the backups folder, a path beyond Windows' MAX_PATH, a OneDrive/cloud-sync folder locking it, or antivirus interference) could crash the entire server before it started listening, instead of just leaving backups unavailable. Backup-directory creation is now non-fatal and retried on each backup attempt, and a file rename right after a backup completes now retries briefly if a file is momentarily locked by antivirus/cloud-sync scanning. ## 1.4.0 - 2026-09-09 ### Added - "Jämna varv" and "Stegträning" can now be configured, started and stopped directly from the driver's own personal mobile profile link, the same way the existing self-service practice timer already works there - independent of whether an admin has the Training page open. Live progress (streak, today's best, tolerance-based lap coloring, step pills) is computed server-side from the driver's own share token, so raw lap rows and driver IDs never reach the mobile page - only sanitized aggregates, matching the existing public-profile security boundary. Each exercise tracks its own elapsed time independently of the general 5-minute practice timer and of each other. ## 1.3.0 - 2026-09-09 ### Added - "Stegträning" (step training): a second guided practice exercise inside an active Open Practice session. Configure a sequence of steps (lap count plus calm/controlled/fast effort per step, defaulting to the classic pyramid); the Training page shows the current step, remaining laps, and a per-step progress pill, and once two "controlled" steps have laps it shows the plain pace difference between the first and last one - never labeled as fatigue. ## 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.