Songbird DAW — Work In Progress
Items that need manual testing and verification. Updated March 26, 2026.Bug Fixes
- Stock plugins UI not loading in release build — May be fixed (see release build investigation). Needs manual verification in a release build with
./utils/build.sh. - Loop position resets — Fixed:
processTrackNotes()instore.tsnow only updates transport state when values actually change, preventing unnecessary overwrites. - MIDI editor drag selection square not visible — Fixed: Canvas redraws immediately during selection drag via
requestAnimationFrameinMidiEditor.tsx. - Duplicate MIDI notes — Added: Press Cmd+D (Mac) / Ctrl+D (Windows) to duplicate selected notes. Duplicated notes placed immediately after the selection.
- Arrangement clip selection bubble missing — Fixed: MIDI clips in arrangement view now show a selection outline when Shift+clicked.
- Track header hover buttons not hiding — Fixed: Wrapper container correctly manages hover states and pointer events for Expand/Mute/Solo buttons.
- Plugin order reversed — Fixed: Stock plugins (reverb, channel strip) now open in the correct order from the mixer.
New Features to Test
Collaboration
- Create a collab room — Start server with
./utils/collab-server.sh, create room in the Collaboration panel, verify invite code is generated. - Join a collab room — Second instance joins with invite code, verify project files are received.
- Push/pull sync — Edit notes on one instance, verify changes appear on the other after auto-sync.
- Bird file merge — Two users edit different tracks in the same section, verify auto-merge works.
- JSON state merge — Two users adjust different mixer controls, verify both changes are applied.
- Presence — Verify peer join/leave notifications appear in the activity feed.
Plugin Compatibility
- Missing plugin detection — Load a project referencing a plugin you don’t have, verify the PluginCompatibilityModal appears.
- Best Match substitution — Click “Best Match” for a missing plugin, verify category-based fallback selects an appropriate substitute.
- Runtime-only substitutions — Verify substitutions are not saved to the
.birdfile (close and reopen should re-trigger the modal).
Application Lifecycle
- CrashGuard — Force-quit during plugin loading, verify sandbox mode auto-enables on next launch.
- Recent projects — Open several projects, verify the project picker shows them ordered by last-opened, capped at 10.
- Settings centralization — Verify all settings (API key, MIDI device, theme, Middle C reference) persist in
~/.songbird/settings.json.
MIDI Editor
- Ghost notes — Open a track in the piano roll, verify notes from other tracks appear as translucent “ghost” notes.
- Section editing — Click the edit button on an arrangement section, verify name and length can be modified.
Build & Validation
-
./utils/validate.sh— Run full validation suite, verify all 4 steps pass (C++ tests, TypeScript, ESLint, Vitest). -
./utils/build.sh— Run release build script, verify it produces a codesigned.app. -
./utils/validate.sh cpp— Run only C++ integration tests, verify they pass headlessly. -
./utils/validate.sh vitest— Run only Vitest tests, verify all store/slice tests pass.
AI Copilot
- Improved intent routing — Test EQ and channel strip operations, verify AI routes to correct tools.
- Granular commit messages — Make an AI-driven edit, verify the commit message describes the specific changes (not generic “LLM edit”).
Sentry (Needs Setup)
- React Sentry — Uncomment
sentry.ts, provide DSN, verify errors are reported from the WebView. - C++ Sentry — Uncomment
sentry-nativeinCMakeLists.txtandMain.cpp, verify native crash reports.
Sample Editor
- Enhanced sample editor — Load an audio track, verify waveform display and editing improvements work correctly.