Skip to content

feat(editor): unify project creation around imported tracks - #286

Merged
byrongamatos merged 2 commits into
mainfrom
feat/editor-unified-create-tracks
Jul 15, 2026
Merged

byrongamatos merged 2 commits into
mainfrom
feat/editor-unified-create-tracks

Conversation

@ChrisBeWithYou

Copy link
Copy Markdown
Contributor

What changed

  • removes the obsolete “What are you arranging?” role picker
  • replaces split staging controls with one imported-track table for audio, Guitar Pro, MIDI, and XML/sync sources
  • uploads every selected audio file, keeps them as separate stems, and makes Master / Guide an exclusive audio-only choice
  • imports the selected Guitar Pro and MIDI child tracks from that same table
  • preserves source display names and hands create-time sources directly to the stacked DAW track-session layer
  • updates the user guide and changelog

Why

Project creation only staged audioFiles[0], while backend builds only emitted stems/full.*. That made all but one uploaded stem disappear and kept source selection separate from transcription-track selection. The resulting project did not match the DAW-style track model shown after creation.

Risk

This is stacked on feat/editor-midi-create. The backend continues to write the selected guide through the legacy full stem path for compatibility; additional audio sources are additive manifest stems. The new track-session host hook is inert until the DAW track-session PR is present.

Validation

  • npm test — 160 suites passed
  • python -m pytest — 258 passed, 2 skipped
  • npm run lint — 0 errors (3 existing warnings)
  • git diff --check

@coderabbitai

coderabbitai Bot commented Jul 15, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@byrongamatos, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 42 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 707dd19d-068e-4c5e-9ee4-8a465f589274

📥 Commits

Reviewing files that changed from the base of the PR and between 577f929 and 6ab4d49.

📒 Files selected for processing (14)
  • CHANGELOG.md
  • assets/v3-theme.css
  • docs/USER-GUIDE.md
  • routes.py
  • screen.html
  • src/create.js
  • src/host.js
  • src/import.js
  • src/main.js
  • tests/create_gate.test.mjs
  • tests/create_track_table.test.mjs
  • tests/import_create_teardown.test.mjs
  • tests/midi_create.test.mjs
  • tests/test_create_audio_tracks.py
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/editor-unified-create-tracks

Comment @coderabbitai help to get the list of available commands.

@byrongamatos
byrongamatos changed the base branch from feat/editor-midi-create to main July 15, 2026 20:29
@byrongamatos
byrongamatos marked this pull request as ready for review July 15, 2026 20:45
@byrongamatos
byrongamatos force-pushed the feat/editor-unified-create-tracks branch from 3620a61 to 6ab4d49 Compare July 15, 2026 20:45
@byrongamatos
byrongamatos merged commit 35b7632 into main Jul 15, 2026
3 of 4 checks passed
@byrongamatos
byrongamatos deleted the feat/editor-unified-create-tracks branch July 15, 2026 20:45
byrongamatos pushed a commit that referenced this pull request Jul 16, 2026
…n tree (#289)

* feat(editor): tracks become first-class — the persistent track-session tree

A song's tracks (master recording, studio stems, transcription parts,
optional folders) are now one ordered, persistent tree — the
editor_track_session manifest extension key — instead of surfaces
re-deriving ad-hoc lists from whatever the song contains.

The tree LAYERS OVER canonical song data, never replacing it:

- rows reference sources ('master' / bare manifest stem ids) and chart
  tracks (_partViewKeyPure keys — the same dialect editor_stem_links
  speaks); unknown references drop on normalize, new parts append,
  parent cycles repair;
- pairing is NOT stored: rows project S.stemLinks, so the two stores
  can never disagree (a link to a tombstoned source projects unpaired);
- sources are derived on demand from (audioUrl, S.stems) — no parallel
  copy to go stale under /stem-op renames;
- removing an audio track is non-destructive: a removedSourceIds
  tombstone hides the row, the media stays in the pack, restore
  re-appends it;
- the tempo-guide role (which source is the timing reference, locked or
  not, audio vs metronome) persists on the tree; its behavior ships
  separately;
- a fully-default tree saves as null and the backend removes the key,
  so untouched packs stay byte-identical (absent ≠ null: an older
  client's absence has no authority to erase a persisted tree).

Wired at every persistence boundary (save, save-as, build, load) and
through the create/import seam #286 reserved (installCreatedTrackSession
now real: seeds S.stems from the server's audio_sources — bare ids,
unconditional reset so a previous song's stems can't leak into a fresh
import). This slice is model + persistence; the unified Tracks surface
that renders the tree ships separately.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EBQCHCNA81E9tHmSDHSe2Q

* Prevent canonical track ID collisions

* Bound removed source normalization

---------

Co-authored-by: ChrisBeWithYou <chris@rifflarr.local>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants