feat(workspace): open Stem Lab as honest isolation lanes - #884
feat(workspace): open Stem Lab as honest isolation lanes#884cursor[bot] wants to merge 26 commits into
Conversation
Replace the Stem Lab coming-soon dead end with a display-only board that names the parts to isolate from the analyzed song, including range, sections, and clash warnings. Keep playback out of scope until a local stem-file contract exists. Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.com>
There was a problem hiding this comment.
Review (head 2f31406a)
Stem Lab is the right buyer-facing fix for the coming-soon dead end. This head opens a display-only isolation board, keeps playback out, pairs Korean/English copy, adds Storybook Workspace/Stem Lab, and records design tokens plus doctoring.
No Critical findings. Do not self-approve or merge. Keep this draft until the range-merge residual is fixed and exact-head CI is green. Do not open a second Stem Lab PR.
Held
- Sidebar
stemsview is navigable before analysis and shows a next action, notComing soon. - After analysis, one lane per role id lists range, sections, and clash warnings.
- No Play / Loop / Solo control and no new file or playback API.
- Distinct from NIM landing #885, lock-in residual #880, and CLI authority #811.
Residual
collectStemLanes does not widen range when the same role appears in a later section. The merge test already uses A1–A2 then A1–C3 and never asserts the chorus ceiling. Fix that on this branch.
Also trim the first-seen section label the same way pushUniqueLabel does, so a padded label cannot duplicate after merge.
Sent by Cursor Automation: Fix Issues
There was a problem hiding this comment.
Stem Lab lanes are the right slice; range merge is still first-seen only
Display-only isolation lanes, honest empty-state copy, paired ko/en strings, Storybook Workspace/Stem Lab, and no playback API are the correct buyer cut. Do not add Play / Loop / Solo here.
Residual on exact head 2f31406a:
collectStemLaneswrites range only on first insert. A later section with a wider ceiling is dropped.- The merge fixture uses verse
A1–A2then chorusA1–C3and never assertshighestNote === "C3".
Next action: widen lowest/highest across sections on this branch and lock that in stemLanes.test.ts. Do not open a second Stem Lab PR. Distinct from #811, #880, and #885.
Sent by Cursor Automation: Fix Issues
The range-merge commit dropped the first-seen section-label trim, so a padded verse label could appear twice after merge. Trim first-insert labels and range notes, and skip blank first section names. Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.com>
Lanes already computed the highest priority across sections but hid it. Surface a next-action priority line in Korean and English so the player knows which part to lock first tonight. Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.com>
|
Exact-head maintenance update for
Fresh exact-head repository runs were emitted. Several runnerless jobs were cancelled with the GitHub annotation |


Buyer-visible Stem Lab slice
Stem Lab was a
coming soondead end even after analysis had named roles, ranges, and clashes. This Draft opens it as a display-only isolation board: sidebar/compact-nav access before and after analysis, an honest pre-analysis next action, and one role lane showing validated range evidence, sections to lock first, clashes, and rehearsal priority without pretending a playable stem file exists.Exact current head:
e33ca56a3922b78b5569e32e1a949f5a488c7e01.Protected base:
develop@acdbea6344fe1231c39535b575f4de35e4c607c9.Draft retained.
No Play/Loop/Solo control, generic file API, playback IPC, dependency/root-lock, database, model, or new filesystem/network authority is added. Korean/English copy, Storybook
Workspace/Stem Lab, repeatable lane design tokens, doctoring, and CHANGELOG remain part of the bounded UI slice.Current-head convergence and test-first repairs
The former documented head
30f69b370c2c6669e96a30a283187679bd9b963eis historical. Current head is a direct 10-commit descendant and changes only Stem Lab range/lane behavior, focused tests, locale copy, doctoring, and CHANGELOG.Earlier review findings on cross-section range widening and first-section-label trimming were fixed and their current inline threads are resolved. Subsequent work tightened the range evidence boundary further:
Playable rangeclaim and instead trigger the explicit ear-check action;Current
stemLanes.range-integrity.test.tsexplicitly proves that a contradictory section range (A0–C-1) cannot widen a previously validA2–C4role range. Current production source documents the same fail-closed contract. No dependency, lockfile, model, network, filesystem, database, IPC, or reviewer-credential authority changed in these follow-ups.Exact-current-head repository evidence
All evidence below binds only to
e33ca56a3922b78b5569e32e1a949f5a488c7e01.Terminal-success BandScope repository workflows:
cirun31989049887;releaserun31989049835;build-baselinerun31989049893;sbomrun31989049890;secret-scan-gaterun31989049795;SAST Semgreprun31989049875; andbanditrun31989049874.Two exact-head repository security workflows are non-passing and were inspected at job/log level before classification.
security-audit— inherited protected-base dependency baselineRun
31989050024, job95269091918, completes checkout/tool setup andnpm ci, then fails only atnpm audit --workspaces --audit-level=highon the protected-base JavaScript set:nanoid <3.3.18(GHSA-2v37-7h3g-55p8);pdfjs-dist >=5.6.83 <6.2.108(GHSA-hq66-cqwq-w95j); andundici 7.0.0–7.28.0advisories.Python/Rust audit stages are skipped because npm exits first and are not counted as success. This branch has no JavaScript dependency/root-lock delta, so the failure remains canonical #783-owned protected-base evidence and is neither suppressed nor copied here.
aggregate
Security Scan— inherited Trivy findingRun
31989049974has successful OSV base-vs-head comparison, Dependency Review, and Scorecard. Its only failed substantive job istrivy-fs95269092881, which reports exactly one HIGH whole-tree finding:CVE-2026-16633forpdfjs-distatpackage-lock.json:6370.The scan itself directs remediation to the shared base so open PRs inherit the fix. This remains #783-owned and is not a Stem Lab source defect.
Current inline review-thread inspection shows all visible threads resolved. Historical automated review/check evidence is not qualifying independent approval.
Security Notes
Attack surface and trust boundary
The WebView renders analysis-derived
RehearsalSongrole names, range labels, section labels, and overlap warnings. Those values are untrusted presentation data and are rendered through React text. Stem Lab does not acquire storage, process, network, filesystem, model, or IPC authority.Mitigations and test points
No generic file/playback API is introduced; copy says isolation targets, not available audio stems. Scientific-pitch syntax and cross-section range-integrity checks gate display evidence; a missing/invalid/contradictory trustworthy range fails closed to an explicit ear-check action. Tests cover empty-state next action, role/range display, pitch-aware cross-section widening, recovery from partial evidence, contradictory-section isolation, malformed evidence, UI fallback, section-label normalization, overlap-warning normalization, fallback role naming, locale pairing, and accessible lane structure.
Dependency / merge boundary
#783 owns the protected JavaScript dependency-security baseline. #861 owns Python statement/branch baseline integration where applicable. The current read-only central required-workflow repair is
ContextualWisdomLab/.github#1020; historical.github#939/ closed predecessors do not transfer evidence. Do not redispatch unchanged central reviewer/coverage paths merely to reproduce a known unintegrated prerequisite.Keep Draft and unmerged until the unchanged then-current head has terminal-success repository and central CI, desktop statement/branch/function/line coverage, required owned statement/branch coverage, type/lint/build/Storybook evidence where applicable, SAST/security/SBOM/supply-chain/package/release evidence, zero valid unresolved findings, #783/#861/current central prerequisites integrated and regenerated, a qualifying independent non-author last-push approval, and ordinary branch-protection acceptance without bypass.
Queued, skipped-required, failed, predecessor-head, protected-base, model-only, self/author, or bypass evidence is not success.