Repository navigation
4.2.0 release review: Medium fixes - #451
Merged
Merged
Conversation
A drag (or waypoint) load kept the previous file's course selection, so canSnapshot stayed live and a 10-second drag run could replace that course's real snapshot (then cloud-sync it). Course-less pre-application now goes through applyCourselessLaps, which clears the selection, and useLapSnapshots refuses drag sessions outright (snapshotEligible). Every remaining bare min-reduce "fastest" pick (overlay best-lap, the Overlays menu and external-ref trophies, lapSnapshot.fastestLap, the generated course outline, useDataLoader's own helper) now goes through fastestRankedLap so an incomplete run's data window never ranks. The overlay range memo keyed only on the session arrays, but the data source defs close over the unit toggles; include their identity so a MPH/KPH or metric switch re-ranges the gauges (plan 0023). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NZ3Pt89yubdPtYn5Wc8fjW
loadRecording's background storeNativeVideo copy (and the async tryLoadNativeStored lookup) set nativeStoredKey whenever it resolved, so a copy started for session A that landed after switching to session B attached A's key to B — and VideoPlayer then exported A's footage under B's overlays. A small latest-wins gate (lib/latestGate) is invalidated on every session/video change; stale results are dropped. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NZ3Pt89yubdPtYn5Wc8fjW
useOfflineReadiness only checked "serviceWorker" in navigator, which Android's WebView exposes even though the native shell never registers a worker (main.tsx), so Settings read "not ready" forever. A new "native" readiness state is checked first via isNativeApp(); the row shows it as done with no download button, and the hook skips the deferred-asset counting there. i18n key added in every locale. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NZ3Pt89yubdPtYn5Wc8fjW
deleteNativeStoredVideo had no callers, so every session deleted in the native app orphaned its stored video (gigabytes) in app data, and the function was dead code. fileStorage.deleteFile already cascades the session's per-file weather cache; it now drops the native copy the same best-effort way, covering both the file manager and cloud-sync's remove-local path. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NZ3Pt89yubdPtYn5Wc8fjW
Moving samples/ and loggers/ out of the precache also moved them out of Workbox's per-file revisioning, and their runtime route is CacheFirst with no expiry, so an updated sample log or logger photo never reached a device that had already cached it. offline-assets.json now carries a content hash per file; the warm-up stamps each stored response with it (X-Asset-Revision, fetched with cache: reload), treats a mismatched or unstamped entry as missing, and prunes paths the build no longer ships (never against an empty manifest). The readiness count uses the same check. Plan 0027 and CLAUDE.md updated. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NZ3Pt89yubdPtYn5Wc8fjW
nativeVideoExport.ts carried the IPC sequencing, the stale stored-key retry and the fallback-vs-error classifier behind a 4.2.0 Fixed entry with no tests (release review T1). Pins: declines (web, multi-chunk, no dimensions), the begin-failure classifier as it stands today (unsupported:/unknown/not found/not allowed fall back; anything else reports), chunked upload -> run -> collect/save -> dispose order, the quality mapping, 15 Hz overlay layers, mid-job error + dispose, cancel, and the stored-source path including the retry without the key. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NZ3Pt89yubdPtYn5Wc8fjW
src/assets/fonts/ carries the two Archivo woff2 files but not their licence; OFL 1.1 condition 2 requires the copyright notice and licence to travel with redistributed copies. Add OFL.txt (Archivo's copyright line + the verbatim OFL 1.1 text) next to the fonts and point the README credit at it. Credits already list Archivo in both places. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NZ3Pt89yubdPtYn5Wc8fjW
CLAUDE.md, docs/subsystems.md and src/plugins/README.md had no mention of the native-storage plugin, nativeVideoExport / nativeVideoStore / nativeBytes, persistentStorage or pwaInstall (release review DOC-4, Rule 5). Adds them to the architecture map and first-party plugin list, a subsystems section for the native video bridge and one for offline durability, and the platform-gated plugin example. Plans 0022 and 0024 record this branch's review fixes (course-less selection clearing, range memo keyed on data sources, latest-wins key gate, delete cascade). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NZ3Pt89yubdPtYn5Wc8fjW
|
This pull request has been ignored for the connected project Preview Branches by Supabase. |
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
lapwing | 8823ec1 | Commit Preview URL Branch Preview URL |
Oct 02 2026, 01:10 AM |
Coverage SummaryLines: 62.58% (9111/14557) · Statements: 61.61% · Functions: 58.43% · Branches: 58.97% Per-file coverage
|
9 tasks done
TheAngryRaven
pushed a commit
that referenced
this pull request
Oct 3, 2026
Resolves the conflicts left by #450 and #451 landing first. CHANGELOG keeps both Fixed lists. useDataLoader tests keep the load-precedence tests and the course-clearing ones. countCachedAssets (plan 0027) now takes a predicate, so the readiness hook keeps the revision-aware isDeferredAssetCached check from #451 while the counting stays in the tested lib. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NZ3Pt89yubdPtYn5Wc8fjW
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by Dove · project thread
Summary
Fixes all ten Medium findings from the 4.2.0 release review of #423. The High fixes are in #450, and the Low fixes come in a separate PR.
Before:
After:
fastestRankedLap.How:
applyCourselessLapsinuseDataLoaderis shared by the drag and waypoint paths. A puresnapshotEligible()gates the snapshot logic inuseLapSnapshots(plan 0022).fastestRankedLapis now used in the overlay renderer,lapSnapshot,OverlaysMenu,ExternalRefBar,TrackEditoranduseDataLoader(plans 0022 and 0023).memoRangealso keys on thedataSourcesidentity (plan 0023).lib/latestGate.tsload token inuseVideoSync(plan 0024)."native"readiness state, with an i18n key in all 7 locales (plan 0027).fileStorage.deleteFilecascades todeleteNativeStoredVideo(plan 0024).offline-assets.jsonis now{url, revision}with a SHA-256 prefix. Warmup re-fetches stale or untagged entries and prunes files the build no longer ships (plan 0027).nativeVideoExport.ts.src/assets/fonts/OFL.txt(SIL OFL 1.1, Archivo copyright), linked from the README credit.native-storageplugin,pwaInstallandpersistentStorageare documented inCLAUDE.md,docs/subsystems.mdandsrc/plugins/README.md.The CHANGELOG gets Fixed bullets appended to the 4.2.0 list.
Type of Change
Checklist
bun run lintpassesbun run typecheckpassesbun run test:runpasses (3233 tests)bun run buildsucceedsREADME.md,CLAUDE.md,CHANGELOG.md)Notes for Reviewers
🤖 Generated with Claude Code
https://claude.ai/code/session_01NZ3Pt89yubdPtYn5Wc8fjW
Generated by Claude Code