Files
2026-05-27 23:29:53 +01:00

81 lines
3.7 KiB
Markdown

# Tasks: enterprise-audio-controllers
**Change ID**: enterprise-audio-controllers
**Package**: `@suaveplan/audio-controllers`
**Target path**: `packages/audio/audio-controllers`
**Prerequisite packages on Verdaccio**: `@suaveplan/audio-core`, `@suaveplan/audio-transport`, `@suaveplan/events`, `@suaveplan/error`, `@suaveplan/types`
---
## 1. Scaffold
- [ ] Create directory `packages/audio/audio-controllers/` with `src/`, `tests/`, `src/__benchmarks__/`, `src/plugins/`, `tests/e2e/`, 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-transport workspace:^`, `@suaveplan/events 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` with `happy-dom` environment for Web MIDI mocking.
- [ ] Add `lint`, `typecheck`, `test`, `test:coverage`, `build`, `docs:check` scripts.
---
## 2. Types + errors
- [ ] Write `src/error-codes.ts` — `AudioControllerErrorCode`, `AUDIO_CONTROLLER.*` codes, `registerAudioControllerErrorCodes()`.
- [ ] Write Zod schemas: `ControllerMetadataSchema`, `CCMappingSchema`, `LEDUpdateSchema`.
---
## 3. Base classes
- [ ] Implement `MidiControllerPlugin` abstract base class with:
- MIDI lifecycle (`requestAccess`, `onStateChange`)
- LED feedback (`flushLEDs`)
- CC mapping DSL (`defineMappings`)
- Learn mode (`enterLearnMode`, `exitLearnMode`)
- Event bus (`on`, `off`)
- Sequencer access
- [ ] Write `midi-controller-plugin.test.ts` and `midi-controller-plugin.md` (≥200 words).
- [ ] Implement `Sequencer` class using `@suaveplan/audio-transport` for scheduling.
- [ ] Write `sequencer.test.ts` and `sequencer.md` (≥200 words).
- [ ] Implement `Arpeggiator` class as `Transport` event subscriber.
- [ ] Write `arpeggiator.test.ts` and `arpeggiator.md` (≥200 words).
- [ ] Implement `LearnMode` for CC mapping capture.
- [ ] Write `learn-mode.test.ts` and `learn-mode.md` (≥200 words).
---
## 4. Device plugins
- [ ] Implement `KontrolS88Plugin` with scale modes, arp modes, pitch/mod wheel, LED control.
- [ ] Write `kontrol-s88.test.ts` and `kontrol-s88.md` (≥200 words).
- [ ] Implement `MaschinePlugin` with pad velocity, step sequencing, sample loading.
- [ ] Write `maschine.test.ts` and `maschine.md` (≥200 words).
- [ ] Implement `TraktorS4Plugin` with deck loading, crossfader, channel volume.
- [ ] Write `traktor-s4.test.ts` and `traktor-s4.md` (≥200 words).
---
## 5. Benchmarks
- [ ] Write `src/__benchmarks__/midi.bench.ts` — MIDI message throughput, sequencer step scheduling.
---
## 6. Tests
- [ ] Write `tests/integration.test.ts` — controller → sequencer → transport → synth trigger.
- [ ] Write `tests/e2e/kontrol-s88.e2e.test.ts` with mocked Web MIDI.
- [ ] Write `tests/e2e/maschine.e2e.test.ts` with mocked Web MIDI.
- [ ] Write `tests/e2e/traktor-s4.e2e.test.ts` with mocked Web MIDI.
---
## 7. 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-controllers` — green.
- [ ] `bunx turbo test:coverage --filter=@suaveplan/audio-controllers` — 100%.
- [ ] `bun scripts/publish.ts --package @suaveplan/audio-controllers`.
- [ ] Fold `specs/audio-controllers/spec.md` into `openspec/specs/audio-controllers/spec.md`.
- [ ] Archive to `openspec/archive/2026-05-14-enterprise-audio-controllers/`.