# 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/`.