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

3.8 KiB

Tasks: enterprise-audio-engine-server

Change ID: enterprise-audio-engine-server Package: @suaveplan/audio-engine-server Target path: packages/media/audio/audio-engine-server Prerequisite packages on Verdaccio: @suaveplan/audio-core, @suaveplan/audio-timeline, @suaveplan/audio-transport, @suaveplan/audio-codecs, @suaveplan/streams, @suaveplan/error, @suaveplan/types


1. Scaffold

  • Create directory packages/media/audio/audio-engine-server/ with src/, tests/, src/__benchmarks__/, and all feature subdirectories per the layout in proposal.md.
  • Write package.json at version 0.1.0 with "type": "module", "sideEffects": false, full exports map, deps: @suaveplan/audio-core workspace:^, @suaveplan/audio-timeline workspace:^, @suaveplan/audio-transport workspace:^, @suaveplan/audio-codecs workspace:^, @suaveplan/streams workspace:^, @suaveplan/error workspace:^, @suaveplan/types workspace:^, @suaveplan/opentelemetry workspace:^, zod catalog:forms.
  • Write tsconfig.json extending @suaveplan/typescript-config/library.json.
  • Write vitest.config.ts using createTestConfig() from @suaveplan/testing/config.
  • Add lint, typecheck, test, test:coverage, build, docs:check scripts.

2. Types + errors

  • Write src/error-codes.ts — defineCodes("AUDIO_ENGINE_SERVER", [...]) producing AUDIO_ENGINE_SERVER.* code strings; export AudioEngineServerErrorCode, AUDIO_ENGINE_SERVER_ERROR_METADATA, registerAudioEngineServerErrorCodes(), and an AudioEngineServerError class extending AudioError from @suaveplan/audio-core.
  • Write Zod schemas: FileSourceOptionsSchema, FileSinkOptionsSchema, ServerAdapterOptionsSchema.

3. FileSourceAdapter

  • Implement FileSourceAdapter with injectable FsLike:
    • load(path) — read file, detect format, decode to AudioDocument
    • createReadStream(path) — return ReadableStream<Uint8Array>
    • loadMany(paths) — parallel load with Promise.all
  • Write file-source.test.ts and file-source.md (≥200 words).

4. FileSinkAdapter

  • Implement FileSinkAdapter with injectable FsLike:
    • save(doc, path, format) — encode and write file
    • createWriteStream(path) — return WritableStream<Uint8Array>
    • saveMany(docs, pathFormat) — parallel save
  • Write file-sink.test.ts and file-sink.md (≥200 words).

5. ServerTimelineAdapter

  • Implement ServerTimelineAdapter implementing TimelineAdapter:
    • All timeline state methods (setTracks, addTrack, removeTrack, updateTrack)
    • Transport controls (play, pause, stop, seek)
    • play() renders via audio-core.streamPlan() → codec encoder → file sink
    • getCurrentTime() returns render progress
  • Write server-adapter.test.ts and server-adapter.md (≥200 words).
  • Wire OTel: spans, counters, histograms.

6. Benchmarks

  • Write src/__benchmarks__/io.bench.ts — load 100MB WAV, save 100MB FLAC.

7. Tests

  • Write tests/integration.test.ts — full load → edit → save round-trip.
  • Write tests/property.test.ts (fast-check) — load then save → file exists, round-trip preserves sample count.

8. Docs + verify + publish

  • All co-located .md files (≥200 words each).
  • Write README.md at package root.
  • bunx turbo lint typecheck test --filter=@suaveplan/audio-engine-server — green.
  • bunx turbo test:coverage --filter=@suaveplan/audio-engine-server — 100%.
  • bun scripts/publish.ts --package @suaveplan/audio-engine-server.
  • Fold specs/audio-engine-server/spec.md into openspec/specs/audio-engine-server/spec.md.
  • Archive to openspec/archive/2026-05-14-enterprise-audio-engine-server/.