3.8 KiB
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/withsrc/,tests/,src/__benchmarks__/, and all feature subdirectories per the layout inproposal.md. - Write
package.jsonat version0.1.0with"type": "module","sideEffects": false, fullexportsmap, 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.jsonextending@suaveplan/typescript-config/library.json. - Write
vitest.config.tsusingcreateTestConfig()from@suaveplan/testing/config. - Add
lint,typecheck,test,test:coverage,build,docs:checkscripts.
2. Types + errors
- Write
src/error-codes.ts—defineCodes("AUDIO_ENGINE_SERVER", [...])producingAUDIO_ENGINE_SERVER.*code strings; exportAudioEngineServerErrorCode,AUDIO_ENGINE_SERVER_ERROR_METADATA,registerAudioEngineServerErrorCodes(), and anAudioEngineServerErrorclass extendingAudioErrorfrom@suaveplan/audio-core. - Write Zod schemas:
FileSourceOptionsSchema,FileSinkOptionsSchema,ServerAdapterOptionsSchema.
3. FileSourceAdapter
- Implement
FileSourceAdapterwith injectableFsLike:load(path)— read file, detect format, decode toAudioDocumentcreateReadStream(path)— returnReadableStream<Uint8Array>loadMany(paths)— parallel load withPromise.all
- Write
file-source.test.tsandfile-source.md(≥200 words).
4. FileSinkAdapter
- Implement
FileSinkAdapterwith injectableFsLike:save(doc, path, format)— encode and write filecreateWriteStream(path)— returnWritableStream<Uint8Array>saveMany(docs, pathFormat)— parallel save
- Write
file-sink.test.tsandfile-sink.md(≥200 words).
5. ServerTimelineAdapter
- Implement
ServerTimelineAdapterimplementingTimelineAdapter:- All timeline state methods (setTracks, addTrack, removeTrack, updateTrack)
- Transport controls (play, pause, stop, seek)
play()renders viaaudio-core.streamPlan()→ codec encoder → file sinkgetCurrentTime()returns render progress
- Write
server-adapter.test.tsandserver-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
.mdfiles (≥200 words each). - Write
README.mdat 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.mdintoopenspec/specs/audio-engine-server/spec.md. - Archive to
openspec/archive/2026-05-14-enterprise-audio-engine-server/.