Files
pubsub/tasks/012-worker-adapter-implementation.md
glm-5.1 1306716897 Decompose architecture into atomic, dependency-ordered tasks
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.
2026-05-08 05:50:43 +00:00

2.5 KiB

id, name, status, depends_on, scope, risk, impact, level
id name status depends_on scope risk impact level
worker-adapter-implementation Implement Worker event target adapter(s) pending
worker-adapter-rd
review-websocket-adapters
moderate medium component implementation

Description

Implement the Worker event target adapter(s) based on the outcome of worker-adapter-rd. The architecture specifies two factory functions:

  • createWorkerHostEventTarget(worker: Worker): TypedEventTarget<TEvent> — wraps a Worker instance on the main thread side
  • createWorkerThreadEventTarget(): TypedEventTarget<TEvent> — wraps parent message port on the worker thread side

The naming convention: Host is the side that owns the Worker object, Thread is the side that runs inside the worker.

Key requirements from architecture:

  • Bidirectional — both sides can publish and subscribe
  • Per-worker — each worker gets its own event target on the main thread
  • Messages use EventEnvelope format over postMessage
  • Structured clone for serialization (but EventEnvelope is JSON-serializable for cross-platform)
  • No native deps — works in any environment with Worker support
  • createWorkerHostEventTarget wraps a Worker instance
  • createWorkerThreadEventTarget wraps self.onmessage/self.postMessage (Web) or parentPort (Node)

The scope depends on worker-adapter-rd outcome. At minimum, implement Web Worker support.

Acceptance Criteria

  • src/event-target-worker.ts (or split files) exists
  • createWorkerHostEventTarget(worker) creates event target for main thread side
  • createWorkerThreadEventTarget() creates event target for worker thread side
  • dispatchEvent on host side calls worker.postMessage(event.detail)
  • dispatchEvent on thread side calls globalThis.postMessage(event.detail) (Web) or parentPort.postMessage(event.detail) (Node, if supported)
  • Receiving on host side: worker.onmessage parses envelope, creates CustomEvent with type:id
  • Receiving on thread side: globalThis.onmessage (or parentPort.on('message')) parses envelope, creates CustomEvent
  • Both sides support addEventListener and removeEventListener
  • No comments in source code (project convention)
  • Sub-path export added to package.json and tsup.config.ts
  • Barrel re-export added to src/index.ts

References

  • docs/architecture/event-targets/worker.md
  • src/types.ts

Notes

To be filled by implementation agent

Summary

To be filled on completion