Files
2026-05-27 23:29:53 +01:00

59 lines
2.6 KiB
Markdown

# Tasks — enterprise-react-audio-stream-transports (chunk B)
## 0. Pre-flight (non-negotiable)
- [ ] 0.1 Confirm clean working tree (`git status` reports nothing) and no in-flight worktrees with uncommitted work (`git worktree list` then `git status` in each)
- [ ] 0.2 Account for every `.claude/worktrees/*` entry; prune stale ones via `bun scripts/worktree-prune.ts --remove`.
- [ ] 0.3 Confirm `MANIFEST.md` matches `find packages -maxdepth 3 -name package.json | wc -l`.
## 1. Shared transport types
- [ ] 1.1 `src/transports/transport.types.ts` — `StreamTransportAdapter`, `SignallingChannel`, `IceConfig`, `TransportEvent` union
- [ ] 1.2 `src/transports/transport.md`, `src/transports/index.ts`
## 2. WebRTC adapter
- [ ] 2.1 `src/transports/webrtc/webrtc-transport.ts`
- [ ] 2.2 `src/transports/webrtc/webrtc-transport.types.ts`, `.test.ts`, `.md`, `index.ts`
- [ ] 2.3 Tests via a fake `RTCPeerConnection` shim (deterministic, no real network)
## 3. WebSocket adapter
- [ ] 3.1 `src/transports/websocket/websocket-transport.ts`
- [ ] 3.2 `src/transports/websocket/websocket-transport.types.ts`, `.test.ts`, `.md`, `index.ts`
- [ ] 3.3 Opus-encoded path gated by lazy import of `@suaveplan/audio-codec-ffmpeg-wasm` (graceful fallback to raw PCM when absent)
## 4. Trystero adapter
- [ ] 4.1 `src/transports/trystero/trystero-transport.ts` — lazy `import("@suaveplan/network-discovery-trystero")`
- [ ] 4.2 `src/transports/trystero/trystero-transport.types.ts`, `.test.ts`, `.md`, `index.ts`
- [ ] 4.3 Tests with an injectable trystero room factory (DI seam — not a mock; deterministic in-memory implementation of the room shape)
## 5. RTT probe + telemetry hook
- [ ] 5.1 Each adapter exposes `getRtt(): Promise<number>`
- [ ] 5.2 Wire-through into the histogram registered by chunk A
## 6. Subpath gating
- [ ] 6.1 `package.json` `exports`: add `./transports/webrtc`, `./transports/websocket`, `./transports/trystero`
- [ ] 6.2 `optionalDependencies`: `@suaveplan/network-discovery-trystero`
## 7. Bundle-size test
- [ ] 7.1 `tests/bundle-size/webrtc-only.size.test.ts` — asserts a WebRTC-only build excludes trystero
## 8. Tests + docs
- [ ] 8.1 Every `it(...)` carries `{ timeout: 5000 }`
- [ ] 8.2 Sibling `.md` per `.ts` (≥200 words, basic + advanced examples)
## 9. Pre-archive verification
- [ ] 9.1 `bunx turbo lint typecheck test --filter=@suaveplan/react-audio-stream` — green on chunk-B files
- [ ] 9.2 `bunx turbo test:coverage --filter=@suaveplan/react-audio-stream` — 100/100/100/100 on touched modules
## 10. Hand-off (no archive yet)
- [ ] 10.1 Commit on `feat/react-audio-stream-transports`. No spec fold / no archive.