81 lines
3.8 KiB
Markdown
81 lines
3.8 KiB
Markdown
# 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/`.
|