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

3.7 KiB

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