2.6 KiB
2.6 KiB
Tasks — enterprise-react-audio-stream-transports (chunk B)
0. Pre-flight (non-negotiable)
- 0.1 Confirm clean working tree (
git statusreports nothing) and no in-flight worktrees with uncommitted work (git worktree listthengit statusin each) - 0.2 Account for every
.claude/worktrees/*entry; prune stale ones viabun scripts/worktree-prune.ts --remove. - 0.3 Confirm
MANIFEST.mdmatchesfind packages -maxdepth 3 -name package.json | wc -l.
1. Shared transport types
- 1.1
src/transports/transport.types.ts—StreamTransportAdapter,SignallingChannel,IceConfig,TransportEventunion - 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
RTCPeerConnectionshim (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— lazyimport("@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.jsonexports: 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
.mdper.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.