3.1 KiB
3.1 KiB
Tasks — enterprise-audio-fx-plugin-spessasynth
0. Pre-flight (non-negotiable)
- 0.1 Confirm clean working tree (
git statusreports nothing) and no in-flight worktrees with uncommitted work (git worktree listthengit statusin each) - 0.2 Account for every
.claude/worktrees/*entry; prune stale ones viabun scripts/worktree-prune.ts --remove. - 0.3 Confirm
MANIFEST.mdmatchesfind packages -maxdepth 3 -name package.json | wc -l.
1. Spec authoring
- 1.1 Draft
proposal.md(this file's sibling),tasks.md,specs/audio-fx-plugin-spessasynth/spec.md
2. Catalog additions
- 2.1 Add
spessasynth_lib(latest stable, pinned) tocatalog:audioin rootpackage.json - 2.2
bun installto update lockfile
3. Implementation
- 3.1
src/error-codes.ts—SPESSASYNTH.{SOUNDFONT_LOAD_FAILED, SOUNDFONT_PARSE_FAILED, UNSUPPORTED_FORMAT, VOICE_LIMIT_EXCEEDED, NOT_INITIALIZED}viadefineCodes - 3.2
src/loader/soundfont-loader.ts— lazyimport("spessasynth_lib"), async URL/bytes fetch, SF2/SF3 parse, validation - 3.3
src/midi-router/midi-router.ts—MidiPortLikeconsumer; channel-voice → synth, program-change → preset, NRPN/RPN → registered handlers - 3.4
src/parameters/parameters.ts— 16-channel × 5-param + master surface; bound throughaudio-fx-plugin-baseautomation - 3.5
src/voice-manager/voice-manager.ts—getActiveVoiceCount,setMaxPolyphony,allNotesOff, voice-stealing - 3.6
src/plugin/spessasynth-plugin.ts— implementsAudioFxPlugin(init,process,dispose,getParameters,snapshot,restore) - 3.7
src/telemetry/telemetry.ts— counterspessasynth_voices_triggered_total, gaugespessasynth_voices_active, histogramspessasynth_process_duration_us - 3.8
src/register/register.ts— register the plugin withPluginChain's discovery
4. Tests
- 4.1 Per-feature
.test.tscovering every scenario - 4.2
tests/integration.test.ts— load a vendored SF2 fixture, render a C-major chord throughprocess(), assert non-zero RMS - 4.3
tests/midi-routing.test.ts— feed a 4-bar MIDI sequence, assert correct voice activations - 4.4
tests/automation.test.ts— automate volume on channel 1 over a render, assert output envelope matches the schedule - 4.5 Every
it(...)has{ timeout: 5000 }(30000 for the integration that loads SF2)
5. Documentation
- 5.1 Sibling
.mdper.ts(≥200 words, basic + advanced examples) - 5.2 README with quickstart + SF2 loading example + control-surface integration example
6. Pre-archive verification
- 6.1
bunx turbo lint typecheck test --filter=@suaveplan/audio-fx-plugin-spessasynth— green - 6.2
bunx turbo test:coverage --filter=@suaveplan/audio-fx-plugin-spessasynth— 100/100/100/100 - 6.3
bunx turbo build --filter=@suaveplan/audio-fx-plugin-spessasynth— green
7. Archive
- 7.1 Fold spec delta →
openspec/specs/audio-fx-plugin-spessasynth/spec.md - 7.2 Move folder →
openspec/archive/<yyyy-mm-dd>-enterprise-audio-fx-plugin-spessasynth/ - 7.3 Refresh
MANIFEST.md - 7.4 Prune worktree