Files
suaveplan/openspec/archive/2026-05-23-enterprise-react-audio-stream-transports/tasks.md
2026-05-27 23:29:53 +01:00

2.6 KiB

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.