The recording panel shares one live stream per tab (#1247) #1355

Merged
claude-bot merged 1 commit from perf/1247-shared-recording-stream into main 2026-11-06 21:03:50 +00:00
Collaborator

The recording panel and Table mode each opened their own /record/stream. A small registry (recordingStream.js) now opens one EventSource per session on the first subscriber, closes it when the last leaves (ref-counted), and fans readings out. useRecording subscribes through it; reconnect and error handling are unchanged.

New tests cover one stream for two hooks, partial and full unmount, StrictMode, separate sessions, and fan-out.

Refs #1247.

🤖 Generated with Claude Code

The recording panel and Table mode each opened their own `/record/stream`. A small registry (`recordingStream.js`) now opens one EventSource per session on the first subscriber, closes it when the last leaves (ref-counted), and fans readings out. `useRecording` subscribes through it; reconnect and error handling are unchanged. New tests cover one stream for two hooks, partial and full unmount, StrictMode, separate sessions, and fan-out. Refs #1247. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
perf(webapp): share one recording stream per session per tab (#1247)
All checks were successful
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 1m2s
CI / Backend lint (ruff) (pull_request) Successful in 34s
CI / Bot/backend version sync (pull_request) Successful in 30s
CI / Feedback site tests (pull_request) Successful in 57s
CI / Does this change touch the recording path? (pull_request) Successful in 24s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Has been skipped
CI / Docker image build (pull_request) Successful in 53s
CI / Which journeys does this change need? (pull_request) Successful in 24s
CI / Bot tests and audit (pull_request) Successful in 4m12s
CI / Frontend (shard 2/2) (pull_request) Successful in 9m47s
CI / Frontend (shard 1/2) (pull_request) Successful in 12m14s
CI / End-to-end journeys (desktop) (pull_request) Successful in 14m29s
CI / Backend migration, tests, and audit (pull_request) Successful in 1h19m37s
71dfe4c2a2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Author
Collaborator

Full frontend suite (orchestrator), docker-test, committed code 71dfe4c2: 5,727 passed, 15 failed, 1 skipped. eslint has 0 errors.

  • Every file that uses the recording hook passed: recordingStream.test.jsx (6), RecordingPanel.test.jsx (24) and GmTable.test.jsx (96). Only RecordingPanel.jsx, GmTable.jsx and recording.js import it.
  • The 15 failures are in files this PR doesn't touch: CampaignSettingsGeneral, DesignReference, Home, AppFrame, LevelUp, SheetEdit, StartCharacter, wiki/Front and SuggestionsFacts. They're waitFor timeouts at a host load average of 45–60, the "busy host" case in the project profile. An earlier run at a load of about 60 had 41 such failures plus vitest worker timeouts.
  • CI's own run settles it on an unloaded runner.

Cleaned up: qb-fe-1247b and qb-fe-modules-1247b.

**Full frontend suite (orchestrator), docker-test, committed code `71dfe4c2`:** 5,727 passed, 15 failed, 1 skipped. eslint has 0 errors. - **Every file that uses the recording hook passed:** `recordingStream.test.jsx` (6), `RecordingPanel.test.jsx` (24) and `GmTable.test.jsx` (96). Only `RecordingPanel.jsx`, `GmTable.jsx` and `recording.js` import it. - **The 15 failures are in files this PR doesn't touch:** `CampaignSettingsGeneral`, `DesignReference`, `Home`, `AppFrame`, `LevelUp`, `SheetEdit`, `StartCharacter`, `wiki/Front` and `SuggestionsFacts`. They're `waitFor` timeouts at a host load average of 45–60, the "busy host" case in the project profile. An earlier run at a load of about 60 had 41 such failures plus vitest worker timeouts. - CI's own run settles it on an unloaded runner. Cleaned up: `qb-fe-1247b` and `qb-fe-modules-1247b`.
Sign in to join this conversation.
No description provided.