19 tasks covering core testing, Redis hardening, WebSocket client/server adapters, Worker adapter, and final review gates. Iroh adapters are tracked as a deferred placeholder blocked on the @alkdev/iroh fork. Phases: core validation → Redis hardening → review gate → WebSocket adapters → review gate → Worker adapter → review gate → final validation.
2.6 KiB
2.6 KiB
id, name, status, depends_on, scope, risk, impact, level
| id | name | status | depends_on | scope | risk | impact | level | |
|---|---|---|---|---|---|---|---|---|
| websocket-client-adapter | Implement WebSocket client event target adapter | pending |
|
moderate | medium | component | implementation |
Description
Implement the createWebSocketClientEventTarget adapter as specified in docs/architecture/event-targets/websocket-client.md.
This is a symmetric (single-connection) adapter that wraps a WebSocket connection for the spoke/client side. It's bidirectional — can both send and receive events. It must implement subscription forwarding using __subscribe/__unsubscribe control events per ADR-003.
Key requirements from the architecture:
- Takes an already-connected
WebSocket(caller handles connection lifecycle) dispatchEvent→ws.send(JSON.stringify(event.detail))addEventListener→ register local listener + send__subscribecontrol event on first listener for topicremoveEventListener→ remove local listener + send__unsubscribewhen no listeners remain- Subscription reference counting:
__subscribesent only on firstaddEventListenerper topic - Malformed JSON from server → silently ignored, log warning
- Control events (
__subscribe,__unsubscribe) received from server → silently ignored ws.send()failure → error propagates to caller, no retry
Acceptance Criteria
src/event-target-websocket-client.tsexists- Implements
createWebSocketClientEventTarget(ws: WebSocket): TypedEventTarget<TEvent> dispatchEventserializes envelope and callsws.send()addEventListenerregisters local listener and sends__subscribeon first listener for topic- Subscription reference counting: only one
__subscribeper topic regardless of listener count removeEventListenerremoves local listener and sends__unsubscribewhen no listeners remain- Malformed JSON messages from server are silently ignored (logged)
- Control events received from server are silently ignored
ws.onmessageparses envelope, createsCustomEventwithtype:idtopic, dispatches to listenersws.send()failure propagates to caller- No comments in source code (project convention)
- Sub-path export added to
package.jsonandtsup.config.ts - Barrel re-export added to
src/index.ts
References
- docs/architecture/event-targets/websocket-client.md
- docs/architecture/decisions/003-subscription-control-protocol.md
- src/types.ts (TypedEventTarget, TypedEvent, EventEnvelope)
Notes
To be filled by implementation agent
Summary
To be filled on completion