← Back to suites
cv-ui-realtime zero-budget semantic-index

CV UI realtime

Pin the UI realtime channel: the changes-stream SSE client, the WebSocket connection implementation with relay-walker failover, presence, the green console diagnostic, the SDK bridge that joins client SDK + connection, and the tab coordinator that elects a leader for SSE wake.

Behaviours 0 Tests 82 Graph 83 nodes · 82 edges Runner - CircleCI - Source qa/suites/cv-ui-realtime.yaml

Test witnesses

These tests belong to the suite. Missing implementation links stay visible until a code-backed graph claim records them.

TestStatusImplementationOpen
close() closes the EventSource and is idempotent
@cv/ui · vitest · src/lib/realtime/changes-stream-client.test.ts
catalogmissing implementation linkTest
dispatches agent-presence events to the typed callback
@cv/ui · vitest · src/lib/realtime/changes-stream-client.test.ts
catalogmissing implementation linkTest
dispatches process-request events to the typed callback
@cv/ui · vitest · src/lib/realtime/changes-stream-client.test.ts
catalogmissing implementation linkTest
dispatches sub-doc events to the typed callback
@cv/ui · vitest · src/lib/realtime/changes-stream-client.test.ts
catalogmissing implementation linkTest
encodes the workspaceId path component
@cv/ui · vitest · src/lib/realtime/changes-stream-client.test.ts
catalogmissing implementation linkTest
fires onOpen on the open event
@cv/ui · vitest · src/lib/realtime/changes-stream-client.test.ts
catalogmissing implementation linkTest
ignores malformed JSON in event data
@cv/ui · vitest · src/lib/realtime/changes-stream-client.test.ts
catalogmissing implementation linkTest
opens an EventSource at the workspace endpoint
@cv/ui · vitest · src/lib/realtime/changes-stream-client.test.ts
catalogmissing implementation linkTest
readyState() reports -1 after close
@cv/ui · vitest · src/lib/realtime/changes-stream-client.test.ts
catalogmissing implementation linkTest
returns a no-op handle when EventSource is unavailable (SSR)
@cv/ui · vitest · src/lib/realtime/changes-stream-client.test.ts
catalogmissing implementation linkTest
returns a no-op handle when workspaceId is empty
@cv/ui · vitest · src/lib/realtime/changes-stream-client.test.ts
catalogmissing implementation linkTest
V3 Rule 2: agent-presence does NOT open WS on its own (humans-only predicate)
@cv/ui · vitest · src/lib/realtime/connection-impl.test.ts
catalogmissing implementation linkTest
V3 Rule 2: setSurface(cvl) opens WS for a previously-idle solo session
@cv/ui · vitest · src/lib/realtime/connection-impl.test.ts
catalogmissing implementation linkTest
V3 Rule 2: solo human on unknown surface — does not open WS, fetches agent-presence
@cv/ui · vitest · src/lib/realtime/connection-impl.test.ts
catalogmissing implementation linkTest
V3 Rule 2: surface=cvl forces WS open without presence call
@cv/ui · vitest · src/lib/realtime/connection-impl.test.ts
catalogmissing implementation linkTest
reuses the workspace device id for human realtime presence
@cv/ui · vitest · src/lib/realtime/connection-impl.test.ts
catalogmissing implementation linkTest
starts without reading or writing monolithic snapshots
@cv/ui · vitest · src/lib/realtime/connection-impl.test.ts
catalogmissing implementation linkTest
Y.applyUpdate on garbage bytes throws — should be caught and routed to warnRealtime
@cv/ui · vitest · src/lib/realtime/green-console.test.ts
catalogmissing implementation linkTest
broadcast_channel error ends up in ring buffer
@cv/ui · vitest · src/lib/realtime/green-console.test.ts
catalogmissing implementation linkTest
drainSuppressedErrors empties the buffer (idempotent second call)
@cv/ui · vitest · src/lib/realtime/green-console.test.ts
catalogmissing implementation linkTest
drainSuppressedErrors returns entries logged since last drain
@cv/ui · vitest · src/lib/realtime/green-console.test.ts
catalogmissing implementation linkTest
entry.message falls back to string cause
@cv/ui · vitest · src/lib/realtime/green-console.test.ts
catalogmissing implementation linkTest
entry.message is extracted from Error.message
@cv/ui · vitest · src/lib/realtime/green-console.test.ts
catalogmissing implementation linkTest
lib0 readVarUint on empty buffer throws — routed to warnRealtime
@cv/ui · vitest · src/lib/realtime/green-console.test.ts
catalogmissing implementation linkTest
postMessage error routed through warnRealtime: no console.error
@cv/ui · vitest · src/lib/realtime/green-console.test.ts
catalogmissing implementation linkTest
ring buffer caps at 64 and drops oldest
@cv/ui · vitest · src/lib/realtime/green-console.test.ts
catalogmissing implementation linkTest
severity=info calls console.info, not console.error
@cv/ui · vitest · src/lib/realtime/green-console.test.ts
catalogmissing implementation linkTest
warnRealtime("broadcast_channel") calls console.warn, not console.error
@cv/ui · vitest · src/lib/realtime/green-console.test.ts
catalogmissing implementation linkTest
warnRealtime("clipboard_denied") calls console.warn, not console.error
@cv/ui · vitest · src/lib/realtime/green-console.test.ts
catalogmissing implementation linkTest
warnRealtime("ws_open_failure") calls console.warn, not console.error
@cv/ui · vitest · src/lib/realtime/green-console.test.ts
catalogmissing implementation linkTest
warnRealtime("yjs_apply") calls console.warn, not console.error
@cv/ui · vitest · src/lib/realtime/green-console.test.ts
catalogmissing implementation linkTest
warnRealtime("yjs_apply") populates ring buffer
@cv/ui · vitest · src/lib/realtime/green-console.test.ts
catalogmissing implementation linkTest
counts human, agent, and pipeline clients separately
@cv/ui · vitest · src/lib/realtime/presence.test.ts
catalogmissing implementation linkTest
advance() on a single-entry list does not emit a cycle event
@cv/ui · vitest · src/lib/realtime/relay-walker.test.ts
catalogmissing implementation linkTest
current() always returns the single entry
@cv/ui · vitest · src/lib/realtime/relay-walker.test.ts
catalogmissing implementation linkTest
cycle event swallows callback errors without breaking the walk
@cv/ui · vitest · src/lib/realtime/relay-walker.test.ts
catalogmissing implementation linkTest
cycle telemetry never fires on a pinned walker
@cv/ui · vitest · src/lib/realtime/relay-walker.test.ts
catalogmissing implementation linkTest
cycles past the last entry and emits exactly one cycle event
@cv/ui · vitest · src/lib/realtime/relay-walker.test.ts
catalogmissing implementation linkTest
list() returns a defensive copy
@cv/ui · vitest · src/lib/realtime/relay-walker.test.ts
catalogmissing implementation linkTest
locks to a matching entry and never advances
@cv/ui · vitest · src/lib/realtime/relay-walker.test.ts
catalogmissing implementation linkTest
markOpenSucceeded resets the post-open strike counter
@cv/ui · vitest · src/lib/realtime/relay-walker.test.ts
catalogmissing implementation linkTest
open failure advances immediately to the next entry
@cv/ui · vitest · src/lib/realtime/relay-walker.test.ts
catalogmissing implementation linkTest
parses a valid two-entry list
@cv/ui · vitest · src/lib/realtime/relay-walker.test.ts
catalogmissing implementation linkTest
pin=null behaves like no pin
@cv/ui · vitest · src/lib/realtime/relay-walker.test.ts
catalogmissing implementation linkTest
post-open abnormal close advances only after TWO strikes
@cv/ui · vitest · src/lib/realtime/relay-walker.test.ts
catalogmissing implementation linkTest
post-open close BEFORE open is recorded becomes an open-failure
@cv/ui · vitest · src/lib/realtime/relay-walker.test.ts
catalogmissing implementation linkTest
reports diagnostics for the current entry
@cv/ui · vitest · src/lib/realtime/relay-walker.test.ts
catalogmissing implementation linkTest
returns null on empty relay value
@cv/ui · vitest · src/lib/realtime/relay-walker.test.ts
catalogmissing implementation linkTest
returns null when no relay param is present
@cv/ui · vitest · src/lib/realtime/relay-walker.test.ts
catalogmissing implementation linkTest
returns null when window is undefined (SSR)
@cv/ui · vitest · src/lib/realtime/relay-walker.test.ts
catalogmissing implementation linkTest
returns the relay query param
@cv/ui · vitest · src/lib/realtime/relay-walker.test.ts
catalogmissing implementation linkTest
starts at index 0
@cv/ui · vitest · src/lib/realtime/relay-walker.test.ts
catalogmissing implementation linkTest
throws on duplicate labels
@cv/ui · vitest · src/lib/realtime/relay-walker.test.ts
catalogmissing implementation linkTest
throws on empty array
@cv/ui · vitest · src/lib/realtime/relay-walker.test.ts
catalogmissing implementation linkTest
throws on empty list
@cv/ui · vitest · src/lib/realtime/relay-walker.test.ts
catalogmissing implementation linkTest
throws on invalid JSON
@cv/ui · vitest · src/lib/realtime/relay-walker.test.ts
catalogmissing implementation linkTest
throws on missing input
@cv/ui · vitest · src/lib/realtime/relay-walker.test.ts
catalogmissing implementation linkTest
throws when a url is not ws:// or wss://
@cv/ui · vitest · src/lib/realtime/relay-walker.test.ts
catalogmissing implementation linkTest
throws when an entry is missing label or url
@cv/ui · vitest · src/lib/realtime/relay-walker.test.ts
catalogmissing implementation linkTest
walker fires cycle event on every additional wrap (not just the first)
@cv/ui · vitest · src/lib/realtime/relay-walker.test.ts
catalogmissing implementation linkTest
warns + ignores an unknown pin label, falls back to default selection
@cv/ui · vitest · src/lib/realtime/relay-walker.test.ts
catalogmissing implementation linkTest
also attaches immediately when the connection is already live at bind time
@cv/ui · vitest · src/lib/realtime/sdk-bridge.test.ts
catalogmissing implementation linkTest
ignores pre-live sync updates without dropping updates immediately after live
@cv/ui · vitest · src/lib/realtime/sdk-bridge.test.ts
catalogmissing implementation linkTest
after leader stops heartbeating, exactly one of the two survivors wins
@cv/ui · vitest · src/lib/realtime/tab-coordinator.test.ts
catalogmissing implementation linkTest
broadcastNetworkUpdate forwards bytes to followers
@cv/ui · vitest · src/lib/realtime/tab-coordinator.test.ts
catalogmissing implementation linkTest
broadcastNetworkUpdate is a no-op after destroy
@cv/ui · vitest · src/lib/realtime/tab-coordinator.test.ts
catalogmissing implementation linkTest
exactly one leader among three tabs
@cv/ui · vitest · src/lib/realtime/tab-coordinator.test.ts
catalogmissing implementation linkTest
follower becomes leader after the leader is gone (via watchdog)
@cv/ui · vitest · src/lib/realtime/tab-coordinator.test.ts
catalogmissing implementation linkTest
follower eventually becomes leader after leader stops heartbeating
@cv/ui · vitest · src/lib/realtime/tab-coordinator.test.ts
catalogmissing implementation linkTest
follower starts new election when heartbeat stops
@cv/ui · vitest · src/lib/realtime/tab-coordinator.test.ts
catalogmissing implementation linkTest
follower watchdog is reset by incoming heartbeats — stays follower
@cv/ui · vitest · src/lib/realtime/tab-coordinator.test.ts
catalogmissing implementation linkTest
high-priority tab becomes leader; low-priority becomes follower
@cv/ui · vitest · src/lib/realtime/tab-coordinator.test.ts
catalogmissing implementation linkTest
highest-priority tab wins
@cv/ui · vitest · src/lib/realtime/tab-coordinator.test.ts
catalogmissing implementation linkTest
identical priorities resolve to exactly one leader
@cv/ui · vitest · src/lib/realtime/tab-coordinator.test.ts
catalogmissing implementation linkTest
is idempotent — calling destroy twice does not throw
@cv/ui · vitest · src/lib/realtime/tab-coordinator.test.ts
catalogmissing implementation linkTest
local Y.Doc mutation is delivered to the other tab as onRemoteUpdate
@cv/ui · vitest · src/lib/realtime/tab-coordinator.test.ts
catalogmissing implementation linkTest
lower-priority tab role-change list never contains "leader"
@cv/ui · vitest · src/lib/realtime/tab-coordinator.test.ts
catalogmissing implementation linkTest
newcomer doc is populated from existing tab state
@cv/ui · vitest · src/lib/realtime/tab-coordinator.test.ts
catalogmissing implementation linkTest
remote-origin (bc) updates are not re-broadcast
@cv/ui · vitest · src/lib/realtime/tab-coordinator.test.ts
catalogmissing implementation linkTest
role-change callback receives "leader"
@cv/ui · vitest · src/lib/realtime/tab-coordinator.test.ts
catalogmissing implementation linkTest
starts in pending role before ELECTION_WINDOW fires
@cv/ui · vitest · src/lib/realtime/tab-coordinator.test.ts
catalogmissing implementation linkTest
wins leadership after ELECTION_WINDOW with no competition
@cv/ui · vitest · src/lib/realtime/tab-coordinator.test.ts
catalogmissing implementation linkTest