Skip to content

Phase 2: make position-based lap delta the default pace method#44

Merged
TheAngryRaven merged 5 commits into
BETAfrom
claude/position-based-lap-delta
May 24, 2026
Merged

Phase 2: make position-based lap delta the default pace method#44
TheAngryRaven merged 5 commits into
BETAfrom
claude/position-based-lap-delta

Conversation

@TheAngryRaven
Copy link
Copy Markdown
Owner

Routes the app's pace computation through the new position delta behind a user setting. paceData keeps its exact shape, so every consumer (charts, race-line, overlays, video export, headline gap) upgrades transparently.

  • useReferenceLap now calls computeLapPace() for both the reference and best-lap-fallback paths, selecting position (default, zero-lag) vs the legacy distance method.
  • New settings: deltaMethod ('position' | 'distance', default position) and deltaSampleMeters (default 2), with a Settings -> Lap Delta toggle.
  • computeLapPace selector added to lapDelta.ts with 2 tests (distance delegates to the legacy path; position resamples + projects).

https://claude.ai/code/session_01QF56Xjp5ZMgXrqfTWD14Le

claude and others added 4 commits May 24, 2026 15:05
Routes the app's pace computation through the new position delta behind a
user setting. paceData keeps its exact shape, so every consumer (charts,
race-line, overlays, video export, headline gap) upgrades transparently.

- useReferenceLap now calls computeLapPace() for both the reference and
  best-lap-fallback paths, selecting position (default, zero-lag) vs the legacy
  distance method.
- New settings: deltaMethod ('position' | 'distance', default position) and
  deltaSampleMeters (default 2), with a Settings -> Lap Delta toggle.
- computeLapPace selector added to lapDelta.ts with 2 tests (distance delegates
  to the legacy path; position resamples + projects).

https://claude.ai/code/session_01QF56Xjp5ZMgXrqfTWD14Le
CI failed at `npm ci` with "Missing: @esbuild/<platform>@0.28.0 from lock
file" across all workflows. Root cause: vitest 4 pulls a nested vite 8 that
resolves esbuild 0.28.0, and the lockfile (written by npm 10.9+) records its
nested optional platform packages in a form the runner's Node 20 npm (10.8)
won't validate. `npm ci` passes cleanly under npm 10.9.7.

Bump all five workflows from Node 20 to Node 22 (current LTS, ships npm 10.9+),
which both reads the lockfile correctly and clears GitHub's Node 20 runner
deprecation warning. Lockfile is unchanged.

https://claude.ai/code/session_01QF56Xjp5ZMgXrqfTWD14Le
`npm ci` was failing with "Missing: esbuild@0.28.0 from lock file" — the
lockfile drifted out of sync with package.json after the recent merges, so
the esbuild 0.28.0 tree (pulled by vitest 4 / vite 8) wasn't fully recorded.
Ran `npm install` to reconcile; npm ci now passes and the full gate is green
(lint, typecheck, 295 tests, build).

https://claude.ai/code/session_01QF56Xjp5ZMgXrqfTWD14Le
@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 24, 2026

Coverage Summary

Lines: 14.52% (1470/10119) · Statements: 13.83% · Functions: 10.06% · Branches: 10.53%

Per-file coverage
File Lines Functions Branches
src/App.tsx 0% 0% 0%
src/components/AboutDialog.tsx 0% 0% 100%
src/components/admin/BannedIpsTab.tsx 0% 0% 0%
src/components/admin/CoursesTab.tsx 0% 0% 0%
src/components/admin/MessagesTab.tsx 0% 0% 0%
src/components/admin/SubmissionsTab.tsx 0% 0% 0%
src/components/admin/ToolsTab.tsx 0% 0% 0%
src/components/admin/TracksTab.tsx 0% 0% 0%
src/components/BrowserCompatDialog.tsx 0% 0% 0%
src/components/ContactDialog.tsx 0% 0% 0%
src/components/CreditsDialog.tsx 0% 0% 100%
src/components/DataloggerDownload.tsx 0% 0% 0%
src/components/drawer/DeviceSettingsTab.tsx 0% 0% 0%
src/components/drawer/DeviceTracksTab.tsx 0% 0% 0%
src/components/drawer/FilesTab.tsx 0% 0% 0%
src/components/drawer/KartsTab.tsx 0% 0% 0%
src/components/drawer/NotesTab.tsx 0% 0% 0%
src/components/drawer/SetupsTab.tsx 0% 0% 0%
src/components/drawer/TemplateCreator.tsx 0% 0% 0%
src/components/drawer/VehiclesTab.tsx 0% 0% 0%
src/components/ExternalRefBar.tsx 0% 0% 0%
src/components/FileImport.tsx 0% 0% 0%
src/components/FileManagerDrawer.tsx 0% 0% 0%
src/components/graphview/GraphPanel.tsx 0% 0% 0%
src/components/graphview/GraphViewPanel.tsx 0% 0% 0%
src/components/graphview/InfoBox.tsx 0% 0% 0%
src/components/graphview/MiniMap.tsx 0% 0% 0%
src/components/graphview/SingleSeriesChart.tsx 0% 0% 0%
src/components/InstallPrompt.tsx 0% 0% 0%
src/components/LandingPage.tsx 0% 0% 0%
src/components/LapSummaryWidget.tsx 0% 0% 0%
src/components/LapTable.tsx 0% 0% 0%
src/components/LocalWeatherDialog.tsx 0% 0% 0%
src/components/NavLink.tsx 0% 0% 0%
src/components/RaceLineView.tsx 0% 0% 0%
src/components/RangeSlider.tsx 0% 0% 0%
src/components/ResizableSplit.tsx 0% 0% 0%
src/components/SettingsModal.tsx 0% 0% 0%
src/components/SubmitTrackDialog.tsx 0% 0% 0%
src/components/SupportedFilesDialog.tsx 0% 0% 0%
src/components/tabs/GraphViewTab.tsx 0% 0% 100%
src/components/tabs/LabsTab.tsx 0% 0% 100%
src/components/tabs/LapTimesTab.tsx 0% 0% 100%
src/components/tabs/RaceLineTab.tsx 0% 0% 0%
src/components/TelemetryChart.tsx 0% 0% 0%
src/components/track-editor/AddCourseDialog.tsx 0% 0% 0%
src/components/track-editor/AddTrackDialog.tsx 0% 0% 0%
src/components/track-editor/CourseForm.tsx 0% 0% 0%
src/components/track-editor/EditorModeToggle.tsx 0% 0% 0%
src/components/track-editor/VisualEditor.tsx 0% 0% 0%
src/components/TrackEditor.tsx 0% 0% 0%
src/components/TrackPromptDialog.tsx 0% 0% 0%
src/components/video-overlays/AnalogOverlay.tsx 0% 0% 0%
src/components/video-overlays/BarOverlay.tsx 0% 0% 0%
src/components/video-overlays/BubbleOverlay.tsx 0% 0% 0%
src/components/video-overlays/dataSourceResolver.ts 0% 0% 0%
src/components/video-overlays/DigitalOverlay.tsx 0% 0% 0%
src/components/video-overlays/GraphOverlay.tsx 0% 0% 0%
src/components/video-overlays/LapTimeOverlay.tsx 0% 0% 0%
src/components/video-overlays/MapOverlay.tsx 0% 0% 0%
src/components/video-overlays/OverlaySettingsPanel.tsx 0% 0% 0%
src/components/video-overlays/overlayUtils.ts 0% 0% 0%
src/components/video-overlays/PaceOverlay.tsx 0% 0% 0%
src/components/video-overlays/registry.ts 0% 0% 100%
src/components/video-overlays/SectorOverlay.tsx 0% 0% 0%
src/components/video-overlays/sectorUtils.ts 0% 0% 0%
src/components/video-overlays/themes.ts 0% 0% 0%
src/components/video-overlays/types.ts 0% 100% 100%
src/components/video-overlays/VideoExportDialog.tsx 0% 0% 0%
src/components/VideoPlayer.tsx 0% 0% 0%
src/components/WeatherPanel.tsx 0% 0% 0%
src/contexts/AuthContext.tsx 0% 0% 0%
src/contexts/DeviceContext.tsx 0% 0% 0%
src/contexts/SessionContext.tsx 0% 0% 0%
src/contexts/SettingsContext.tsx 0% 0% 0%
src/hooks/use-mobile.tsx 0% 0% 100%
src/hooks/use-toast.ts 0% 0% 0%
src/hooks/useAuth.ts 100% 100% 100%
src/hooks/useDataLoader.ts 0% 0% 0%
src/hooks/useDocumentHead.ts 0% 0% 0%
src/hooks/useFileManager.ts 0% 0% 0%
src/hooks/useKartManager.ts 100% 100% 100%
src/hooks/useLapManagement.ts 0% 0% 0%
src/hooks/useNoteManager.ts 0% 0% 0%
src/hooks/useOnlineStatus.ts 0% 0% 0%
src/hooks/usePlayback.ts 0% 0% 0%
src/hooks/useReferenceLap.ts 0% 0% 0%
src/hooks/useSessionData.ts 0% 0% 0%
src/hooks/useSessionMetadata.ts 0% 0% 0%
src/hooks/useSettings.ts 0% 0% 0%
src/hooks/useSetupManager.ts 0% 0% 100%
src/hooks/useTemplateManager.ts 0% 0% 0%
src/hooks/useTrackEditorForm.ts 0% 0% 0%
src/hooks/useVehicleManager.ts 0% 0% 100%
src/hooks/useVideoSync.ts 0% 0% 0%
src/integrations/lovable/index.ts 0% 0% 0%
src/lib/aimParser.ts 11.27% 18.18% 3.08%
src/lib/alfanoParser.ts 7.81% 40% 3.93%
src/lib/ble/test/mockBle.ts 100% 100% 50%
src/lib/ble/battery.ts 93.33% 100% 87.5%
src/lib/ble/connection.ts 0% 0% 0%
src/lib/ble/fileTransfer.ts 90.69% 95% 72.91%
src/lib/ble/format.ts 42.85% 100% 61.11%
src/lib/ble/index.ts 100% 100% 100%
src/lib/ble/internal.ts 100% 100% 50%
src/lib/ble/settings.ts 93.6% 100% 85.29%
src/lib/ble/trackSync.ts 89.69% 90.9% 70.96%
src/lib/ble/types.ts 100% 100% 100%
src/lib/bleDatalogger.ts 100% 100% 100%
src/lib/brakingZones.ts 0% 0% 0%
src/lib/browserCompat.ts 0% 0% 0%
src/lib/chartColors.ts 0% 0% 0%
src/lib/chartUtils.ts 0% 0% 0%
src/lib/courseDetection.ts 99.01% 100% 84.14%
src/lib/datalogParser.ts 17.3% 50% 17.39%
src/lib/db/index.ts 0% 0% 0%
src/lib/db/supabaseAdapter.ts 0% 0% 0%
src/lib/db/types.ts 100% 100% 100%
src/lib/dbUtils.ts 3.33% 0% 0%
src/lib/deviceSettingsSchema.ts 0% 0% 0%
src/lib/deviceTrackSync.ts 100% 100% 90%
src/lib/doveParser.ts 82.4% 72.72% 56.36%
src/lib/dovexParser.ts 76.56% 76.92% 47.27%
src/lib/fieldResolver.ts 0% 0% 0%
src/lib/fileStorage.ts 0% 0% 0%
src/lib/gforceCalculation.ts 92.85% 100% 86.95%
src/lib/graphPrefsStorage.ts 0% 0% 0%
src/lib/kartStorage.ts 0% 0% 0%
src/lib/lapCalculation.ts 96.12% 100% 90.32%
src/lib/lapDelta.ts 98.96% 100% 82.35%
src/lib/motecParser.ts 4.29% 3.44% 0.69%
src/lib/nmeaParser.ts 84.43% 92.85% 67.62%
src/lib/noteStorage.ts 0% 0% 100%
src/lib/overlayCanvasRenderer.ts 0% 0% 0%
src/lib/parserUtils.ts 100% 100% 98.52%
src/lib/referenceUtils.ts 78.33% 72.72% 46.42%
src/lib/setupStorage.ts 0% 0% 0%
src/lib/speedBounds.ts 0% 0% 0%
src/lib/speedEvents.ts 0% 0% 0%
src/lib/templateStorage.ts 0% 0% 0%
src/lib/trackStorage.ts 0% 0% 0%
src/lib/trackUtils.ts 22.22% 12.5% 22.72%
src/lib/ubxParser.ts 5% 0% 0%
src/lib/utils.ts 0% 0% 100%
src/lib/vboParser.ts 2.4% 9.09% 2.43%
src/lib/vehicleStorage.ts 0% 0% 0%
src/lib/videoExport.ts 0% 0% 0%
src/lib/videoFileStorage.ts 0% 0% 0%
src/lib/videoStorage.ts 0% 0% 0%
src/lib/weatherService.ts 0% 0% 0%
src/pages/Admin.tsx 0% 0% 0%
src/pages/AuthCallback.tsx 0% 0% 0%
src/pages/ForgotPassword.tsx 0% 0% 0%
src/pages/Index.tsx 0% 0% 0%
src/pages/Login.tsx 0% 0% 0%
src/pages/NotFound.tsx 0% 0% 0%
src/pages/Privacy.tsx 0% 0% 0%
src/pages/Register.tsx 0% 0% 0%
src/pages/ResetPassword.tsx 0% 0% 0%
src/plugins/cloud-sync/cloudClient.ts 0% 0% 100%
src/plugins/cloud-sync/CloudSyncPanel.tsx 0% 0% 0%
src/plugins/cloud-sync/index.ts 0% 0% 0%
src/plugins/cloud-sync/syncEngine.ts 0% 0% 0%
src/plugins/cloud-sync/syncStores.ts 100% 100% 100%
src/plugins/index.ts 0% 0% 0%
src/plugins/panels.ts 100% 100% 100%
src/plugins/PluginPanelHost.tsx 0% 0% 0%
src/plugins/registry.ts 100% 100% 100%
src/plugins/types.ts 100% 100% 100%
src/types/racing.ts 100% 100% 100%

0.0.3 broke the build by importing its own panel via the host `@/` alias
(`@/panel/CoachPanel`), which resolves to the host's src at bundle time. 0.0.4
uses relative internal imports (`./panel/CoachPanel`, `../analysis/insights`)
while keeping host contracts on `@/`, so the coach's Labs panel now bundles and
loads. Build + full gate green.

https://claude.ai/code/session_01QF56Xjp5ZMgXrqfTWD14Le
@TheAngryRaven TheAngryRaven merged commit 8a3aba3 into BETA May 24, 2026
5 checks passed
@TheAngryRaven TheAngryRaven deleted the claude/position-based-lap-delta branch May 24, 2026 16:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants