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.
This commit is contained in:
57
tasks/012-worker-adapter-implementation.md
Normal file
57
tasks/012-worker-adapter-implementation.md
Normal file
@@ -0,0 +1,57 @@
|
||||
---
|
||||
id: worker-adapter-implementation
|
||||
name: Implement Worker event target adapter(s)
|
||||
status: pending
|
||||
depends_on: [worker-adapter-rd, review-websocket-adapters]
|
||||
scope: moderate
|
||||
risk: medium
|
||||
impact: component
|
||||
level: 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
|
||||
Reference in New Issue
Block a user