MotorSignal-App/website
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
..
app feat(website): grounded FAQ and validated contact on Support Center (W2) 2026-10-14 12:11:20 -04:00
components fix(website): persisted-only ride creation and reconciled replay timing (PR #38 hardening) 2026-10-14 13:12:49 -04:00
docs docs(website): device-connections backend contract for the full "build real" feed (W-devices) 2026-10-14 12:12:02 -04:00
lib fix(website): persisted-only ride creation and reconciled replay timing (PR #38 hardening) 2026-10-14 13:12:49 -04:00
public/images fix: restore website visual assets and shell 2026-09-13 03:45:35 -04:00
test-support fix: resolve Android CI breakpoint overflow and address Codex PR #28 findings 2026-10-09 18:53:39 -04:00
tests fix(website): persisted-only ride creation and reconciled replay timing (PR #38 hardening) 2026-10-14 13:12:49 -04:00
.env.example fix(website): isolate Firebase configuration for staging and enforce safety guards 2026-10-08 10:50:28 -04:00
.gitignore Improve ride recording and telemetry workflows 2026-09-08 02:13:03 -04:00
AGENTS.md Improve ride recording and telemetry workflows 2026-09-08 02:13:03 -04:00
CLAUDE.md Improve ride recording and telemetry workflows 2026-09-08 02:13:03 -04:00
next-env.d.ts Improve ride recording and telemetry workflows 2026-09-08 02:13:03 -04:00
next.config.ts feat(website): expose and verify deployed Git revision (#13) 2026-09-20 18:59:17 -04:00
package-lock.json feat(core): reconcile local development, hybrid design, sensor fusion, and docs 2026-10-09 05:12:01 -04:00
package.json feat(core): reconcile local development, hybrid design, sensor fusion, and docs 2026-10-09 05:12:01 -04:00
tsconfig.json Improve ride recording and telemetry workflows 2026-09-08 02:13:03 -04:00
vitest.config.ts fix(website): isolate Firebase configuration for staging and enforce safety guards 2026-10-08 10:50:28 -04:00