Review finding
Every workbench uses the same default presenter BroadcastChannel name. That makes commands global to all Pulsar windows on the same origin instead of scoped to one presentation session.
Evidence
src/system/presenter/bridge.ts:20 defines DEFAULT_PRESENTER_CHANNEL = 'pulsar-presenter'.
src/system/presenter/bridge.ts:51 uses that default when callers do not supply a channel name.
src/system/presenter/bridge.ts:58 accepts any valid PresenterCommand received on that same-origin channel.
src/system/presenter/bridge.ts:83 broadcasts local commands to the same shared channel.
Impact
Two presentations running under the same origin can drive each other accidentally. Any same-origin page that knows the fixed channel name can also send valid presenter commands such as advance, back, or mute toggles. Same-origin is trusted in the current model, but this still creates surprising cross-talk for local workbench sessions.
Recommended fix
Add an explicit per-session scope to the presenter bridge, and ensure popout windows inherit that scope from the opener URL or bootstrap state.
Acceptance checks
- A per-workbench nonce or session id is included in the channel name or message envelope.
- The prompter popout receives the same session scope as the opener.
isPresenterCommand() validation remains in place for message shape.
- Tests prove two bridge instances with different session scopes do not receive each other's commands, while windows in the same session do.
Review finding
Every workbench uses the same default presenter
BroadcastChannelname. That makes commands global to all Pulsar windows on the same origin instead of scoped to one presentation session.Evidence
src/system/presenter/bridge.ts:20definesDEFAULT_PRESENTER_CHANNEL = 'pulsar-presenter'.src/system/presenter/bridge.ts:51uses that default when callers do not supply a channel name.src/system/presenter/bridge.ts:58accepts any validPresenterCommandreceived on that same-origin channel.src/system/presenter/bridge.ts:83broadcasts local commands to the same shared channel.Impact
Two presentations running under the same origin can drive each other accidentally. Any same-origin page that knows the fixed channel name can also send valid presenter commands such as advance, back, or mute toggles. Same-origin is trusted in the current model, but this still creates surprising cross-talk for local workbench sessions.
Recommended fix
Add an explicit per-session scope to the presenter bridge, and ensure popout windows inherit that scope from the opener URL or bootstrap state.
Acceptance checks
isPresenterCommand()validation remains in place for message shape.