Skip to content

feat(editor): master mix strip (mute/solo/fader) in the Tracks pane - #308

Merged
byrongamatos merged 2 commits into
mainfrom
feat/editor-master-pane-mute
Jul 17, 2026
Merged

byrongamatos merged 2 commits into
mainfrom
feat/editor-master-pane-mute

Conversation

@ChrisBeWithYou

@ChrisBeWithYou ChrisBeWithYou commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

Requested by Christian while dogfooding: the master mix couldn''t be muted from the side pane — its M/S/fader lived only in the mixer drawer (a deliberate early carve-out, now reversed by the same person who asked for it originally).

The pane now mirrors the drawer: the mixControls gate collapses to "every row with a strip key" (new _trackRowShowsStripPure pure), riding the existing key-generic mix-mute/mix-solo/mix-vol handlers and the same canonical partMix state — so the pane strip and the drawer strip are one state, and the master keeps its output-bus semantics (own mute silences it; another track''s solo never does, per _mixerPartAudiblePure''s audio:master carve-out).

Tests: tests/track_strip_master.test.mjs — master-row predicate fails on main; stem/transcription rows keep strips; folders/malformed rows never strip. Full suite 205 green + new, lint 0 errors.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Added inline mute, solo, and volume controls to the master row in the Tracks pane.
    • Master controls now mirror the mixer drawer while preserving master bus output behavior.
  • Bug Fixes

    • Corrected track-strip visibility so controls appear for eligible rows and remain hidden for folders or invalid entries.
  • Tests

    • Added coverage for master, stem, folder, and invalid track rows.

The master row carried no inline M/S/fader — its controls lived only in
the mixer drawer (a deliberate early carve-out). Dogfooding kept
reaching for a pane mute on the master, so the pane now mirrors the
drawer: the mixControls gate collapses to "every row with a strip key"
(new _trackRowShowsStripPure), riding the same key-generic
mix-mute/mix-solo/mix-vol handlers and the same canonical partMix.
Master keeps its output-bus semantics — its own mute silences it,
another track''s solo never does (_mixerPartAudiblePure''s carve-out).

Tests: tests/track_strip_master.test.mjs — the master-row strip
predicate fails on main; stem/transcription rows keep strips; folders
and malformed rows never strip.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: ChrisBeWithYou <chris@rifflarr.local>
@coderabbitai

coderabbitai Bot commented Jul 17, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

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

Next review available in: 52 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: b0ee0d9e-c4bd-4b29-8314-4606b8a2bf12

📥 Commits

Reviewing files that changed from the base of the PR and between 317b81c and b1ff1ce.

📒 Files selected for processing (1)
  • CHANGELOG.md
📝 Walkthrough

Walkthrough

The Tracks pane now shows inline mute, solo, and fader controls for the master mix row using shared mix-key visibility logic. New tests cover master, non-folder, and invalid rows, and the changelog documents the behavior.

Changes

Master strip controls

Layer / File(s) Summary
Strip visibility and rendering
src/track-session.js, CHANGELOG.md
Adds _trackRowShowsStripPure(row) and uses it to render inline controls for the master row and other rows with valid mix keys.
Strip visibility validation
tests/track_strip_master.test.mjs
Tests master-row visibility, non-folder rows, invalid rows, and reports pass/fail status.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main change: adding master mix strip controls in the Tracks pane.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/editor-master-pane-mute

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
tests/track_strip_master.test.mjs (1)

32-48: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Exercise the rendered controls, not only the predicate.

These tests prove that rows have strip keys, but never call render() or inspect the emitted mix-mute, mix-solo, and mix-vol controls. A wiring regression could therefore leave the tests green while the Tracks pane still omits the master strip. Add a focused rendering assertion, or test an extracted pure markup helper.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/track_strip_master.test.mjs` around lines 32 - 48, Extend the focused
master-row test around _trackRowShowsStripPure to exercise the rendered output,
either by calling the row’s render() method or an extracted pure markup helper.
Assert that the emitted markup includes the mix-mute, mix-solo, and mix-vol
controls, while preserving the existing master mixKey and strip predicate
assertions.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@CHANGELOG.md`:
- Around line 11-15: Update the older Unreleased changelog entry describing
master controls as mixer-only so it reflects their availability in the Tracks
pane, keeping the surrounding changelog content unchanged and consistent with
the newer entry.

---

Nitpick comments:
In `@tests/track_strip_master.test.mjs`:
- Around line 32-48: Extend the focused master-row test around
_trackRowShowsStripPure to exercise the rendered output, either by calling the
row’s render() method or an extracted pure markup helper. Assert that the
emitted markup includes the mix-mute, mix-solo, and mix-vol controls, while
preserving the existing master mixKey and strip predicate assertions.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 144abff9-2c3f-494b-8557-cebfd0b6e1ec

📥 Commits

Reviewing files that changed from the base of the PR and between a5bdae7 and 317b81c.

📒 Files selected for processing (3)
  • CHANGELOG.md
  • src/track-session.js
  • tests/track_strip_master.test.mjs

Comment thread CHANGELOG.md
@byrongamatos
byrongamatos merged commit d13eb12 into main Jul 17, 2026
4 checks passed
@byrongamatos
byrongamatos deleted the feat/editor-master-pane-mute branch July 17, 2026 21:49
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