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