Skip to main content

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() in store.ts now 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 requestAnimationFrame in MidiEditor.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 .bird file (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-native in CMakeLists.txt and Main.cpp, verify native crash reports.

Sample Editor

  • Enhanced sample editor — Load an audio track, verify waveform display and editing improvements work correctly.