refactor: isolate Telemetry Inspector stream - #671
Conversation
|
Warning Review limit reached
Next review available in: 50 minutes You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (4)
📝 WalkthroughWalkthroughThe change replaces legacy telemetry with a dedicated Telemetry Inspector bridge. It adds demand-driven 10 Hz delivery, renderer subscription streams, explicit widget configuration, frontend providers, and updated Storybook and test wiring. ChangesTelemetry Inspector migration
Estimated code review effort: 4 (Complex) | ~45 minutes Sequence Diagram(s)sequenceDiagram
participant TelemetryInspectorWidget
participant TelemetryInspectorProvider
participant telemetryInspectorBridge
participant WebSocketBridge
participant bridgeProxy
TelemetryInspectorWidget->>TelemetryInspectorProvider: request telemetry and session data
TelemetryInspectorProvider->>telemetryInspectorBridge: subscribe to streams
telemetryInspectorBridge->>WebSocketBridge: send telemetryInspectorSubscribe
WebSocketBridge->>bridgeProxy: register stream subscription
bridgeProxy-->>WebSocketBridge: deliver cached or rate-limited data
WebSocketBridge-->>telemetryInspectorBridge: receive inspector data
telemetryInspectorBridge-->>TelemetryInspectorProvider: update stores
Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 3
🧹 Nitpick comments (1)
src/frontend/components/Standings/Standings.stories.tsx (1)
1150-1150: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueUse
TelemetryDecorator()for mock telemetry setup.Replace the direct
StoryTelemetryProviderinstances withTelemetryDecorator(). Compose the compact dashboard bridge setup separately.As per coding guidelines, “Use
TelemetryDecorator()from@irdashies/storybookin component stories to provide mock telemetry.”Also applies to: 1164-1164
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/frontend/components/Standings/Standings.stories.tsx` at line 1150, Replace the direct StoryTelemetryProvider usage in the affected stories with TelemetryDecorator() from `@irdashies/storybook`, and compose the compact dashboard bridge setup separately while preserving each story’s existing mock telemetry behavior.Source: Coding guidelines
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/app/bridge/iracingSdk/iracingSdkBridge.ts`:
- Around line 264-269: Update the ready-window telemetry seed in the bridge flow
around telemetryForRenderer so it only publishes when that specific overlay is
subscribed to telemetryInspector, using the same per-window subscription check
as normal Inspector delivery; otherwise remove this direct seed and rely on the
subscription snapshot path.
In `@src/frontend/components/TelemetryInspector/TelemetryInspector.stories.tsx`:
- Line 2: Update the TelemetryDecorator import in the TelemetryInspector story
to use the shared `@irdashies/storybook` alias instead of the local
.storybook/telemetryDecorator path.
In `@src/frontend/context/DashboardContext/DashboardContext.tsx`:
- Line 289: Update the error thrown by the useTelemetry hook to identify
useTelemetry and the required raw telemetry store provider, instead of
referencing useDashboard or an incorrect provider.
---
Nitpick comments:
In `@src/frontend/components/Standings/Standings.stories.tsx`:
- Line 1150: Replace the direct StoryTelemetryProvider usage in the affected
stories with TelemetryDecorator() from `@irdashies/storybook`, and compose the
compact dashboard bridge setup separately while preserving each story’s existing
mock telemetry behavior.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: e3bcf931-2bfc-4732-bdcf-6587c62796c0
📒 Files selected for processing (61)
.storybook/telemetryDecorator.tsxdocs/IMPLEMENTATION_PLAN.mdsite/src/utils/mockSetup.tsxsrc/app/bridge/iracingSdk/iracingSdkBridge.tssrc/app/bridge/iracingSdk/mock-data/generateMockData.tssrc/app/bridge/iracingSdk/mock-data/mockSdkBridge.spec.tssrc/app/bridge/iracingSdk/mock-data/mockSdkBridge.tssrc/app/bridge/iracingSdk/setup.tssrc/app/bridge/legacyRendererSubscriptions.tssrc/app/bridge/rendererDataSubscriptions.tssrc/app/bridge/rendererExposeBridge.tssrc/app/overlayManager.tssrc/app/webserver/bridgeProxy.tssrc/app/webserver/componentRenderer.spec.tssrc/app/webserver/componentRenderer.tsxsrc/app/webserver/componentServer.tssrc/dashboard-view-entry.tsxsrc/frontend/components/Battle/widgetRuntimeDefinition.tssrc/frontend/components/BlindSpotMonitor/widgetRuntimeDefinition.tssrc/frontend/components/CornerNameOverlay/widgetRuntimeDefinition.tssrc/frontend/components/FasterCarsFromBehind/widgetRuntimeDefinition.tssrc/frontend/components/Flag/widgetRuntimeDefinition.tssrc/frontend/components/FlatTrackMap/widgetRuntimeDefinition.tssrc/frontend/components/FuelCalculator/widgetRuntimeDefinition.tssrc/frontend/components/GarageCover/widgetRuntimeDefinition.tssrc/frontend/components/HeartRate/widgetRuntimeDefinition.tssrc/frontend/components/InformationBar/widgetRuntimeDefinition.tssrc/frontend/components/Input/widgetRuntimeDefinition.tssrc/frontend/components/LapTimeLog/widgetRuntimeDefinition.tssrc/frontend/components/PitlaneHelper/widgetRuntimeDefinition.tssrc/frontend/components/RejoinIndicator/widgetRuntimeDefinition.tssrc/frontend/components/Relative/widgetRuntimeDefinition.tssrc/frontend/components/RendererDataProviders/RendererDataProviders.spec.tsxsrc/frontend/components/RendererDataProviders/RendererDataProviders.tsxsrc/frontend/components/SectorDelta/widgetRuntimeDefinition.tssrc/frontend/components/SlowCarAhead/widgetRuntimeDefinition.tssrc/frontend/components/Standings/Relative.stories.tsxsrc/frontend/components/Standings/Standings.stories.tsxsrc/frontend/components/Standings/widgetRuntimeDefinition.tssrc/frontend/components/Tachometer/widgetRuntimeDefinition.tssrc/frontend/components/TelemetryInspector/TelemetryInspector.stories.tsxsrc/frontend/components/TelemetryInspector/widgetRuntimeDefinition.tssrc/frontend/components/TrackMap/widgetRuntimeDefinition.tssrc/frontend/components/TwitchChat/widgetRuntimeDefinition.tssrc/frontend/components/Weather/widgetRuntimeDefinition.tssrc/frontend/components/Wind/widgetRuntimeDefinition.tssrc/frontend/context/DashboardContext/DashboardContext.tsxsrc/frontend/context/RunningStateContext/RunningStateContext.spec.tsxsrc/frontend/context/TelemetryInspectorStore/TelemetryInspectorProvider.spec.tsxsrc/frontend/context/TelemetryInspectorStore/TelemetryInspectorProvider.tsxsrc/frontend/context/TelemetryInspectorStore/index.tssrc/frontend/context/TelemetryStore/StoryTelemetryProvider.tsxsrc/frontend/context/TelemetryStore/TelemetryProvider.tsxsrc/frontend/context/index.tssrc/frontend/widgetRuntime.spec.tsxsrc/frontend/widgetRuntime.tsxsrc/interface.d.tssrc/main.tssrc/types/index.tssrc/types/irSdkBridge.tssrc/types/telemetryInspectorBridge.ts
💤 Files with no reviewable changes (26)
- src/frontend/components/Battle/widgetRuntimeDefinition.ts
- src/frontend/context/RunningStateContext/RunningStateContext.spec.tsx
- src/frontend/components/Relative/widgetRuntimeDefinition.ts
- src/frontend/components/HeartRate/widgetRuntimeDefinition.ts
- src/frontend/components/FlatTrackMap/widgetRuntimeDefinition.ts
- src/frontend/components/GarageCover/widgetRuntimeDefinition.ts
- src/frontend/components/FasterCarsFromBehind/widgetRuntimeDefinition.ts
- src/frontend/components/FuelCalculator/widgetRuntimeDefinition.ts
- src/app/bridge/legacyRendererSubscriptions.ts
- src/frontend/components/BlindSpotMonitor/widgetRuntimeDefinition.ts
- src/frontend/context/TelemetryStore/TelemetryProvider.tsx
- src/frontend/components/Standings/widgetRuntimeDefinition.ts
- src/frontend/components/SlowCarAhead/widgetRuntimeDefinition.ts
- src/frontend/components/TwitchChat/widgetRuntimeDefinition.ts
- src/frontend/components/Tachometer/widgetRuntimeDefinition.ts
- src/frontend/components/RejoinIndicator/widgetRuntimeDefinition.ts
- src/frontend/components/Flag/widgetRuntimeDefinition.ts
- src/frontend/components/Wind/widgetRuntimeDefinition.ts
- src/frontend/components/TrackMap/widgetRuntimeDefinition.ts
- src/frontend/components/InformationBar/widgetRuntimeDefinition.ts
- src/frontend/components/Input/widgetRuntimeDefinition.ts
- src/frontend/components/PitlaneHelper/widgetRuntimeDefinition.ts
- src/frontend/components/SectorDelta/widgetRuntimeDefinition.ts
- src/frontend/components/Weather/widgetRuntimeDefinition.ts
- src/frontend/components/LapTimeLog/widgetRuntimeDefinition.ts
- src/frontend/components/CornerNameOverlay/widgetRuntimeDefinition.ts
Description
Completes the final Phase 4 renderer-telemetry cleanup from
docs/ARCHITECTURE_REVIEW.md.IrSdkBridgetelemetryInspectorBridgeThe Inspector remains behaviorally compatible: configured telemetry and session properties render from the same raw stores. Normal widgets continue to use their typed snapshot channels. Final Windows A/B re-profiling remains follow-up evidence after this code lands.
Validation:
npm test— 150 files passed, 1 skipped; 1,217 tests passed, 1 skippednpm run lintnpm run test:replay:curated— 36,000 frames, 70 session revisions, 14 probesnpm run build-storybookgit diff --checkArchitecture checklist:
src/appdefineBridge; subscriptions are per-window and hidden overlays are suppressedScreenshots
Before
No visual change. Telemetry Inspector used the generic legacy renderer telemetry provider and stream.
After
No visual change. Telemetry Inspector uses the dedicated diagnostic bridge; normal renderers cannot subscribe to raw telemetry.
Type of Change
Checklist
npm testnpm run lintand fixed any issuesSummary by CodeRabbit