8.5 KiB
RC RaceCore Roadmap
Track work here with checkboxes. Check off a task only after implementation and verification. Record user-visible changes under Unreleased in CHANGELOG.md. Priorities below are a working order, not release-date commitments.
Existing foundation
- Race Day, preflight checks and heat queue.
- Automatic SQLite backups and local restore command.
- Isolated session replay.
- Training statistics, personal mobile profiles and car-change markers.
- Interactive list sorting and OBS display modes.
- Visible application version and changelog.
Verified 2026-09-08: 122 logic/API tests and the register/offline browser smoke suite passed on Linux with Chrome. Checked items below describe that coverage; other platforms and workflows remain open.
1. Reliability and browser regression tests
Acceptance: real create/edit/save flows persist after reload; background updates do not discard edits. Tests use isolated data, never the installation's database.
- Add a repeatable browser smoke-test command with temporary database/profile.
- Cover create/edit/save for classes, drivers and cars, including reload verification.
- Verify register form drafts remain intact during background version polling.
- Cover sponsor-event creation/editing and endurance race wizard/name edits with reload verification.
- Cover team creation, membership changes, editing and deletion.
- Cover Open Practice to team-race conversion, duration/follow-up edits and persisted lap limits.
- Cover Race Day start/pause/resume/finish controls and switching to the next queued heat, with a simulated decoder socket (no real AMMC hardware).
- Cover session-type-specific start sequences (heat/qualification/race/team_race countdown and audio) and other transitions beyond Open Practice.
- Verify leaderboard/TV/team sorting heading alignment at 390/900/1600 px and preserved race positions.
- Verify OBS views have no interactive sorting controls.
- Cover actual popup launching and compact OBS layout automatically.
- Add Windows and Linux CI runs for supported runtimes.
Verified 2026-09-09: the OBS overlay popup opens via a real click on the admin "Open OBS overlay" button (window.open, not a direct URL navigation), renders the compact race-info/standings split layout, and its clock advances live and freezes on pause without a manual reload - polling independently of the admin page (tests/browser_obs_popup.js). Found and fixed a real bug in the process: window.open(..., "noopener,noreferrer,...") always returns null in modern browsers even when the window opens successfully (WHATWG spec), which made the blocked-popup check in openPrintWindow() and openOverlayWindow() always fire - print/export (start lists, results, heat sheets, team reports) showed a false "popup blocked" error and never wrote any content, and the overlay popup's .focus() call was unreachable. Both now open without those flags (same-origin, first-party content, so no security loss).
Verified 2026-09-08: Race Day start/pause/resume/finish and next-heat selection pass end to end (tests/browser_race_day.js) against a simulated decoder socket, with native-dialog auto-accept added to the browser harness so an unexpected alert()/confirm() fails the test instead of hanging it. Found and fixed two real bugs in the process: Open Practice sessions on a track-mode (sponsor) event showed a ready/green preflight but were silently blocked from starting by a stricter assignment check; and the Race Day view never refreshed when the decoder connected, disconnected, or errored, so its Start button and preflight checklist could stay stale after a page load.
2. Connection and save status
Acceptance: users can distinguish server contact, pending edits, an active save and a failed save; a health check never falsely confirms a failed write.
- Show pending, saving, saved and failed state in the main interface.
- Show last successful data load/save times.
- Warn when the server connection is lost or its status becomes stale.
- Offer manual retry for unsaved changes without discarding local edits.
- Verify save failure/reconnection in a real browser.
- Extend stale-data feedback to the personal mobile profile: last applied retrieval, 30-second stale warning, timeout and Retry without discarding loaded data.
- Review concurrent writes, reconnect recovery and multiple controllers editing the same race.
Implemented: decoder/socket diagnostics
Acceptance: each configured channel distinguishes an open socket from actual received data and successfully parsed passing messages. Inspecting diagnostics must not interrupt timing or rerender an active settings form.
- Show Main, Split, Pit entry and Pit exit separately, with the configured WebSocket URL.
- Show socket state, last connection, last received message and elapsed time since reception.
- Count received frames, recognized passing messages (not accepted laps), ignored messages and parse errors per channel.
- Add a bounded live message sample/log with pause, clear and copy controls.
- Show why an incoming passing was ignored or rejected without changing lap validation.
- Add simulated-socket tests for receiving, parsing, disconnecting and open status.
- Verify automatic reconnect against a real decoder/network interruption.
- Document IP/port/channel setup and the difference between decoder connection and incoming data.
Verified 2026-09-08: 128 logic/API tests and browser smoke tests passed, including mobile profile retention during network loss and recovery via Retry. Real decoder/network reconnect remains a hardware check.
3. Clearer practice follow-up
Acceptance: a driver receives a short, encouraging summary based on their own class-specific data, with one useful next goal.
- Add an end-of-practice summary: pace, consistency, progress and achieved goals.
- Suggest one next training goal using existing calculations.
- Keep summaries separate by class and explain insufficient sample sizes.
- Include the summary in the personal mobile profile.
- Add coach/parent reward follow-up without turning practice into a public ranking.
4. Results archive
- Search completed sessions by date, class and driver without Race Setup.
- Show standings, lap history and penalties together.
- Reuse existing PDF/export functions from the archive.
- Define what remains available after deleting a race.
5. More natural race speech
- Optional backend-generated neural speech.
- Cache announcements and driver names before race day.
- Keep credentials on the backend, outside exports and public responses.
- Invalidate cached speech when language, voice or pronunciation changes.
- Provide provider status and a pre-generate action.
- Verify offline fallback and that playback never delays timing.
6. Permissions and mobile Race Control
- Define Admin, Race Director, Speaker and Read-only capabilities.
- Enforce permissions on server endpoints, not only in the UI.
- Keep public overlays and training links restricted.
- Build compact mobile controls for start/stop, track call, flags and next heat.
- Test concurrent control and accidental repeated commands.
Documentation maintenance
- Update the architecture's module/dependency inventory as modules change.
- Complete state/settings/SQLite contracts and critical form-to-controller mappings.
- Consolidate older future-work notes so this file remains the primary roadmap.
Träningsstat
lägga till mera skoj utvecklande tränings format
- "Pyramiden" (För extrem mental uthållighet)I racing tappar man ofta koncentrationen i mitten av ett lopp. Detta upplägg tvingar dig att hålla fokus när hjärnan börjar bli trött.Fas 1: 5 varv på 70% fart (Hitta linjerna och värm upp)Fas 2: 5 varv på 90% fart (Skruva upp tempot)Fas 3: 5 varv på 100% fart (Maxattack)Fas 4: 5 varv på 90% fart (Håll farten trots trötthet)Fas 5: 5 varv på 70% fart (Nedvarvning och analys av bilen)
- "Konsistens-jakten" (F1-förarnas favorit)F1-team bryr sig ofta mer om konstanta varvtider än ett enda supersnabbt varv.Bestäm dig för en måltid (t.ex. 85% av din maxfart).Kör 15 varv på rad där målet är att alla varv ska ligga inom (konfigurerbart) 0,2 sekunder från varandra.Om du kör ett varv som är för snabbt eller för långsamt, "stryks" serien och du får börja om. Detta bygger ett otroligt muskelminne för bromspunkter och kurvhastighet.