Skip to content

Share Replay and Spectate workspace in a feature package - #493

Merged
Snazzie merged 5 commits into
mainfrom
Snazzie/replay
Oct 22, 2026
Merged

Snazzie merged 5 commits into
mainfrom
Snazzie/replay

Conversation

@Snazzie

@Snazzie Snazzie commented Oct 21, 2026

Copy link
Copy Markdown
Collaborator

Change

  • Share the workspace and Insights UI between single-lap Replay and paired Compare → Spectate, while preserving their separate AI scopes.
  • Add Compare Insights A/B selection and seek findings on the selected lap's native recorded timeline, including safe distance-lock fallback.
  • Extract the implementation, browser-safe contracts, real Hono handlers, unit/integration tests and 11 browser specs into @raceiq/lap-replay with explicit /ui, /server and /contracts exports.
  • Register typed application host bindings, feature-owned Playwright projects, hardware WebGPU separation, Turbo impact inputs and CI discovery. Remove obsolete implementations instead of keeping forwarding shims.
  • Keep the single replay renderer height-bounded during panel and viewport changes.
  • Update Unreleased notes for the final user-visible behavior relative to main.

Validation

Manual validation used the complete compiled application and real backend through page-only browser automation:

  • Desktop/mobile Replay: one 3D renderer, no paired playback, shared Insights, usable panel controls and no horizontal page overflow. Renderer height remained bounded after resizing.
  • Compare: selected B in Insights while paired playback remained mounted; the recorded-event browser scenarios verified both A and B native positions.
  • LMU Replay: semantic telemetry and lap-scoped AI status each returned HTTP 200.
  • Real isolated storage fixtures: incomplete capture references and an uncommitted live member preserved the existing HTTP 200 parse-error response, empty telemetry/findings and unavailable detector coverage.
Check Result
Package unit suite 59 passed, 315 assertions
Client telemetry consumer regressions 27 passed, 150 assertions
Package route integration suite 2 passed, 17 assertions
Complete compiled application feature E2Es 30 passed and one case passed on retry, including setup; all three hardware WebGPU cases passed
Package UI/server, client, stories, backend and Playwright typing Passed
Package lint, import boundaries and production browser build Passed
Deliberate forbidden UI → server import in isolated feature copy Rejected by the actual boundary CLI, exit 1
Ordinary test ownership All 421 files assigned exactly once
Full Playwright discovery 266 tests in 68 files; all 11 feature specs uniquely owned, with 27 ordinary and three native GPU cases
Controlled Turbo impact checks Eight scenarios passed; invalid explicit SCM baseline failed closed
Changelog validation 11 passed

Detailed outcomes and coverage limits: verification record.

Known limits

  • The existing schematic zoom E2E passed on retry after its first attempt ended below the expected camera-radius threshold.
  • Rare invalid/coalesced/tail/plateau seek inputs have controller unit coverage, but were not individually forced through browser fixtures. The later publication-disappearance race and generic HTTP 422 catch were not fault-injected.
  • Unrelated full-mode application tests were not executed. A pre-extraction full-discovery count was not retained; the final relocated spec inventory and unique ownership were checked.
  • Existing labels were reused. The existing Car layout literal remains; locale catalogs were not changed.

PR checklist

  • I have manually tested the change to validate that it is working.
  • I have added or updated tests covering the changed observable behavior, or explained why tests are not applicable.
  • My UI changes use locale messages for new or changed user-facing text, including accessibility labels, with all supported locale catalogs updated; or this change does not affect UI text. Existing Car layout literal is reused; see known limits.
  • I have run relevant automated checks and reported any failures or checks not run.

@Snazzie
Snazzie requested a review from a team October 21, 2026 17:25
@github-actions

Copy link
Copy Markdown
Contributor

Replay benchmark comparison

Runtime: Bun 1.4.3; CPU: AMD Ryzen 9 7950X 16-Core Processor (32 logical); OS: linux 6.18.33.2-microsoft-standard-WSL2 x64

Launches: processes=2, retainedProcesses=5, retainedWarmups=1; warmup=1000ms, measurement=2000ms, samples=10-100; caseOrder=forward

Case Baseline median Current median Estimated change (95% CI) CI margin Result
replay/parse 20,000 raw lap frames (CPU) 68291061.00 69824017.00 2.37% (-1.71%, 5.39%) 3.55% PASS
replay/parse 20,000 raw lap frames (retained heap) 12020.00 12021.00 -0.00% (-0.06%, 0.04%) 0.05% PASS
replay/resolve 20,000 canonical envelopes (CPU) 60488258.00 61346823.00 -0.55% (-3.67%, 2.16%) 2.91% PASS
replay/resolve 20,000 canonical envelopes (retained heap) 3540.00 3537.00 unmeasurable — INCONCLUSIVE

@github-actions

Copy link
Copy Markdown
Contributor

App UI changes

Current PR screenshots compared with main.

Removed: responsive tablet analyse-actions-menu

Base PR Diff
base pr diff

Added: storybook ReusableBadges

Base PR Diff
base pr diff

Added: storybook ReusableAvatars

Base PR Diff
base pr diff

Added: storybook ReusableButtons

Base PR Diff
base pr diff

Added: storybook AnalyseDataPanelParity

Base PR Diff
base pr diff

Added: storybook IRacingLiveDashboard

Base PR Diff
base pr diff

Added: storybook ForzaLiveDashboard

Base PR Diff
base pr diff

Added: storybook ReusableTable

Base PR Diff
base pr diff

Added: storybook ReusableDropdownMenu

Base PR Diff
base pr diff

Added: storybook ReusableNoteModal

Base PR Diff
base pr diff

Added: storybook ComboDash2

Base PR Diff
base pr diff

Added: storybook theme-semantic-states

Base PR Diff
base pr diff

Added: storybook ReusablePanelSectionHeader

Base PR Diff
base pr diff

Added: storybook ReusableSearchMultiSelect

Base PR Diff
base pr diff

Removed: responsive mobile analyse-actions-menu

Base PR Diff
base pr diff

Changed: responsive mobile fm23-driver

Base PR Diff
base pr diff

Added: storybook ReusableCollapsible

Base PR Diff
base pr diff

Added: storybook ReusableDialog

Base PR Diff
base pr diff

Added: storybook ComboDash1

Base PR Diff
base pr diff

Removed: responsive desktop analyse-actions-menu

Base PR Diff
base pr diff

Changed: responsive desktop analyse-data-panel-loaded

Base PR Diff
base pr diff

Added: storybook AcEvoLiveDashboard

Base PR Diff
base pr diff

Added: storybook F1LiveDashboard

Base PR Diff
base pr diff

Added: storybook AccLiveDashboard

Base PR Diff
base pr diff

Added: storybook AnalyseTrackPanel

Base PR Diff
base pr diff

Added: storybook AnalyseVizPanel3DViewMenuOpen

Base PR Diff
base pr diff

Added: storybook AnalyseVizPanel3D

Base PR Diff
base pr diff

Added: storybook ReusableTabs

Base PR Diff
base pr diff

Added: storybook ReusableCard

Base PR Diff
base pr diff

Added: storybook SetupBrowserReadOnly

Base PR Diff
base pr diff

Added: storybook SetupBrowser

Base PR Diff
base pr diff

Added: storybook ReusableSearchSelect

Base PR Diff
base pr diff

Rendered from Storybook and responsive app screenshot tests against main.

@mars-snazzie

mars-snazzie Bot commented Oct 22, 2026

Copy link
Copy Markdown

MARS pipeline failure analysis

Bench compare — run #2493, attempt 1

The 'Bench compare' workflow failed because the Bun lockfile was out of sync with the project's dependency definitions during the installation step.

bench — step 5

The 'Install benchmark dependencies' step failed because 'bun install' detected that the lockfile required updates. Since the CI environment enforces a frozen lockfile (standard for production/CI builds), it prevented the installation from proceeding to ensure consistency.
Suggested fix:
Run 'bun install' locally to update the lockfile, then commit and push the updated lockfile to the branch.

Evidence:

error: lockfile had changes, but lockfile is frozen
note: try re-running without --frozen-lockfile and commit the updated lockfile

AI-generated suggestions; verify before applying.

@Snazzie
Snazzie merged commit b32475c into main Oct 22, 2026
2 of 4 checks passed
@Snazzie
Snazzie deleted the Snazzie/replay branch October 22, 2026 15:00
@mars-snazzie

mars-snazzie Bot commented Oct 22, 2026

Copy link
Copy Markdown

MARS pipeline failure analysis

Build & Test — run #3153, attempt 1

The CI pipeline failed primarily due to dependency installation errors across multiple jobs where the lockfile was out of sync with the manifest. Additionally, one job failed during the checkout step because it attempted to fetch a non-existent pull request reference.

changelog — step 4

The 'bun install' command failed because the lockfile contained changes that were not reflected in the expected state, which is disallowed when using the --frozen-lockfile flag.
Suggested fix:
Run 'bun install' locally to update the lockfile and commit the updated lockfile to the repository.

playwright-e2e / Seed database — step 2

The 'actions/checkout@​v7' action failed because it could not find the remote reference 'refs/pull/493/merge'. This may be due to a mismatch between the PR number in the workflow configuration and the actual PR number.
Suggested fix:
Verify the PR number being used in the checkout step; the current logs show it trying to fetch PR 493, while the run metadata indicates PR 3153.

visual-regression/compare / Storybook / Render — step 7

The dependency installation failed due to a frozen lockfile mismatch, similar to the failure in the 'changelog' job.
Suggested fix:
Update the lockfile locally and commit it to the branch.

visual-regression/compare / Responsive / Collect — step 4

The dependency installation failed because the lockfile was out of sync with the dependencies listed in the manifest.
Suggested fix:
Update the lockfile locally and commit it to the branch.

Evidence:

bun install --frozen-lockfile --ignore-scripts
error: lockfile had changes, but lockfile is frozen
note: try re-running without --frozen-lockfile and commit the updated lockfile

Evidence:

ref: refs/pull/493/merge
##[error]fatal: couldn't find remote ref refs/pull/493/merge
The process '/usr/bin/git' failed with exit code 128

Evidence:

bun install --frozen-lockfile
error: lockfile had changes, but lockfile is frozen
note: try re-running without --frozen-lockfile and commit the updated lockfile

Evidence:

bun install --frozen-lockfile
error: lockfile had changes, but lockfile is frozen
note: try re-running without --frozen-lockfile and commit the updated lockfile

AI-generated suggestions; verify before applying.

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.

1 participant