Skip to content

Forward per-stem name/description from song_info to consumers#41

Merged
topkoa merged 5 commits into
mainfrom
feat/stem-name-description
Jul 19, 2026
Merged

Forward per-stem name/description from song_info to consumers#41
topkoa merged 5 commits into
mainfrom
feat/stem-name-description

Conversation

@topkoa

@topkoa topkoa commented Jul 19, 2026

Copy link
Copy Markdown
Contributor

Part 2 of 3 for per-stem display metadata (feedpak 1.16.0, spec §5.3 name/description).
Depends on core passthrough got-feedBack/feedBack#1013; harmless without it (fields just stay
undefined).

What

  • loadStems result rows and the live stemState objects keep name/description from
    song_info stems.
  • stems:state provider-ready event gains stems: [{id, name?, description?}]stemIds
    stays a plain string array so existing listeners are untouched.
  • window.stems.getState() rows gain name/description (undefined when pack/core predates
    the fields). API doc comment updated.
  • Version 0.9.0 (also aligns package.json, which had drifted to 0.8.1 vs plugin.json 0.8.2).

Purely additive; this plugin's own chip UI still renders ids. Display work lands in
stem_mixer (part 3).

Verification

  • node --test tests/*.mjs — 53 pass
  • pytest tests/test_manifest.py — 10 pass
  • node --check src/main.js — clean

🤖 Generated with Claude Code

feedpak 1.16.0 (spec §5.3) added optional presentational fields to a
stems[] entry — `name` (display label) and `description` (free text) —
and core now passes them through the song_info stems payloads
(feedback#1013). Carry them from load to state so consumer plugins can
display them:

- loadStems keeps name/description on its result rows, stemState keeps
  them on the live stem objects
- the stems:state provider-ready event gains `stems: [{id, name?,
  description?}]` alongside `stemIds`, which stays a plain string array
  so existing listeners are untouched
- window.stems.getState() rows gain name/description (undefined when
  the pack or core predates the fields)

Purely additive; this plugin's own chip UI still renders ids. Display
work lands in stem_mixer. 53/53 node tests + manifest contract pass.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: topkoa <topkoa@gmail.com>
@coderabbitai

coderabbitai Bot commented Jul 19, 2026

Copy link
Copy Markdown

Warning

Review limit reached

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

Next review available in: 4 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: 24860174-ebf3-4569-882a-7e10adba2069

📥 Commits

Reviewing files that changed from the base of the PR and between 8ac42e9 and 4ea1650.

📒 Files selected for processing (4)
  • CHANGELOG.md
  • package.json
  • plugin.json
  • src/main.js
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/stem-name-description

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.

Copilot AI 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.

Pull request overview

Adds support for forwarding per-stem presentational metadata (name/description) from song_info through this plugin’s internal stem state and outward-facing consumer surfaces, aligning with feedpak spec §5.3 and enabling downstream UIs (e.g. stem_mixer) to display friendly labels.

Changes:

  • Extend decoded stem result rows and live S.stemState entries to retain name/description.
  • Augment the stems:state provider-ready payload with a stems: [{id, name?, description?}] array while keeping stemIds unchanged.
  • Update window.stems.getState() to include name/description, and bump plugin/package versions to 0.9.0 with a changelog entry.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

File Description
src/main.js Propagates per-stem name/description through load/state, adds stems metadata payload to provider-ready, and extends getState() output.
plugin.json Bumps plugin version to 0.9.0.
package.json Aligns npm package version to 0.9.0.
CHANGELOG.md Documents the addition of forwarded per-stem display metadata.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/main.js
Comment thread CHANGELOG.md Outdated
Copilot review: stemState carried raw manifest values while the
provider-ready payload filtered to non-empty strings, so getState()
could expose a different type than the event for the same stem. Fold
both through presentationalString() at the loadStems boundary — a
non-blank string passes, everything else (missing, blank, non-string)
becomes undefined — so every surface exposes `string | undefined`
consistently. The changelog no longer implies core passthrough already
ships everywhere; it names the core change (feedback#1013) and the
older-core behaviour (fields undefined, nothing changes).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: topkoa <topkoa@gmail.com>

Copilot AI 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.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment thread CHANGELOG.md Outdated
The conditional-on-core rewording left the original continuation ("the
stems:state provider-ready event gains...") dangling as a lowercase
fragment after a full stop. One bullet again: what a passing core gets,
what an older core sees, how values are normalized.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: topkoa <topkoa@gmail.com>

Copilot AI 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.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment thread src/main.js
The early-return for an archive / stem-less sloppak announced only
{ stemCount: 0 }, so the payload shape depended on which path fired: a
listener could not tell "song with 0 stems" from "old plugin that never
sent stemIds/stems at all". Emit both as empty arrays there — same
contract on every provider-ready. (stemIds was already missing on this
path before this branch; fixed while the contract is being extended.)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: topkoa <topkoa@gmail.com>

Copilot AI 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.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment thread CHANGELOG.md
The PR bumps plugin.json/package.json to 0.9.0 but its entries sat
under [Unreleased]. Retitle the block as "## [0.9.0] — Per-stem display
metadata (name/description)" and leave a fresh empty [Unreleased] above,
matching the file's versioned-section convention. The block also folds
in the items accumulated since [0.8.1] (the full-mix rename, the
ES-module migration steps) — 0.9.0 is the release that ships them.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: topkoa <topkoa@gmail.com>

Copilot AI 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.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated no new comments.

@topkoa
topkoa merged commit 7082b23 into main Jul 19, 2026
4 checks passed
@topkoa
topkoa deleted the feat/stem-name-description branch July 19, 2026 16:10
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