MotorSignal-App/website/lib
Developer dd35b216d1 fix(website): persisted-only ride creation and reconciled replay timing (PR #38 hardening)
Phase 1 — group ride creation (no phantom rides):
- Check authentication and Firestore availability BEFORE touching UI state; an unauthenticated
  user (or unavailable Firestore) now gets an actionable error and no phantom ride, instead of a
  local entry that was never saved.
- Insert the ride into UI state ONLY after batch.commit() confirms the write; on commit failure
  nothing is inserted and an error is shown.
- Prevent duplicate submissions: the create modal disables its submit button while in flight, and
  the hub guards with a ref.
- The join code remains the real Firestore document id (no fabricated ids).
- Extract commitGroupRide (pure, dependency-injected) so every path is unit-testable.

Phase 2 — replay playback timing:
- The elapsed clock and rider marker both derive from the same cursor, so they cannot drift.
- Manual seeks (scrub, restart, corner jump, arrow keys) go through seekTo(), which reconciles
  playback timing (clears carry/last-frame) so no stale budget is applied after a seek.
- Make gap compression explicit: a caption labels the timeline as recorded elapsed time and warns
  that dead time in multi-segment recordings is skipped during playback.

Tests: commitGroupRide (unauthenticated / unavailable / commit-ok / commit-failed); group-rides
hub now uses an authenticated mock with deterministic Firebase — authenticated create persists,
unauthenticated create is blocked with no phantom, a failed commit leaves no phantom, and the
create modal blocks duplicate submits.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-14 13:12:49 -04:00
..
aws-maps.ts feat(core): reconcile local development, hybrid design, sensor fusion, and docs 2026-10-09 05:12:01 -04:00
club-community.ts fix(website): label fallback club routes and chat as examples (W-routes, W-chat) 2026-10-14 12:08:15 -04:00
club-data.ts feat: add club members and wall management 2026-10-01 08:31:45 -04:00
club-fixtures.ts feat(web): add clubs rides management (#9) 2026-09-20 07:23:00 -04:00
cms.ts feat(ops): add dual speedtest options, support ticket fixes, cms sync, and overview card redesign (#23) 2026-09-22 01:38:54 -04:00
create-group-ride.ts fix(website): persisted-only ride creation and reconciled replay timing (PR #38 hardening) 2026-10-14 13:12:49 -04:00
firebase-admin.ts fix(website): isolate Firebase configuration for staging and enforce safety guards 2026-10-08 10:50:28 -04:00
firebase-client.ts fix(website): isolate Firebase configuration for staging and enforce safety guards 2026-10-08 10:50:28 -04:00
firebase-config.ts fix(website): isolate Firebase configuration for staging and enforce safety guards 2026-10-08 10:50:28 -04:00
group-ride-payload.ts fix(website): truthful group-ride creation — no false success, no fabricated GPS (Phase 3) 2026-10-14 12:49:16 -04:00
ops-data.ts feat(ops): add dual speedtest options, support ticket fixes, cms sync, and overview card redesign (#23) 2026-09-22 01:38:54 -04:00
request-origin.ts feat: add Operations incident management 2026-09-10 14:48:08 -04:00
telemetry-export.ts fix: resolve Android CI breakpoint overflow and address Codex PR #28 findings 2026-10-09 18:53:39 -04:00
telemetry-track.ts fix(website): synchronize telemetry replay playback with recorded time (Phase 4) 2026-10-14 12:36:07 -04:00
use-ops-session.ts feat(ops): add dual speedtest options, support ticket fixes, cms sync, and overview card redesign (#23) 2026-09-22 01:38:54 -04:00