Skip to content

feat(workspace): name the parts to lock in first - #874

Draft
cursor[bot] wants to merge 10 commits into
developfrom
cursor/bc-587d0b33-7e84-4562-916c-0929fcedc42e-ae0c
Draft

feat(workspace): name the parts to lock in first#874
cursor[bot] wants to merge 10 commits into
developfrom
cursor/bc-587d0b33-7e84-4562-916c-0929fcedc42e-ae0c

Conversation

@cursor

@cursor cursor Bot commented Aug 16, 2026

Copy link
Copy Markdown

Canonical buyer-visible workspace slice

The Workspace Rehearsal Priorities card now names up to three concrete role-and-section lock-in actions from existing analysis evidence, makes role pairs and fallback focus labels actionable on the roadmap, and shows the first entrance time so players know both what and when to lock in.

Exact current head: 05935e02f29366b2bd240d6fb4d1bae784cb992b.
Protected base: develop@acdbea6344fe1231c39535b575f4de35e4c607c9.

Current behavior:

  • prefer high rehearsal-priority roles, then medium only when no high-priority role exists;
  • fall back to exportSummary.focusSections, then the first section label;
  • skip blank/case-insensitive none and unmatched focus labels so missing evidence never becomes a false instruction;
  • case-insensitively deduplicate focus labels and displayed role/section pairs before the three-item limit;
  • open matching role/roadmap sections and scroll the destination into view;
  • show each actionable pair/focus label's first section entrance time;
  • mark the activated pair as current with aria-current="true";
  • use one-pass aria-label interpolation so role text containing {sectionLabel} cannot rewrite later tokens;
  • honor prefers-reduced-motion: reduce with non-smooth roadmap movement;
  • keep English/Korean action and empty-state copy synchronized; and
  • include the material Workspace Storybook state.

This remains distinct from #776 selected-role setup/simplification/transposition/overlap guidance and from #884 Stem Lab.

Test-first / canonicalization history

The original branch fixed duplicate focusSections. Successor #877 was a direct descendant and repaired display-pair uniqueness, honest empty copy, Storybook state, and actionable fallback focus labels; #874 was previously fast-forwarded non-forced to that work.

A later same-scope successor #888 started from this exact #874 head 43cb9438d6338890a218f2d3b7c4ba74199adb00. Exact compare immediately before consolidation reported status=ahead, ahead_by=2, behind_by=0, and merge-base exactly 43cb9438.... Its two child commits add entrance-time display/current-state accessibility and the one-pass aria-label/reduced-motion corrections. The canonical #874 branch was therefore fast-forwarded non-forced to #888 exact head 05935e02f29366b2bd240d6fb4d1bae784cb992b; both PRs now reference the same code identity, so #888 is superseded without losing unique work.

Predecessor/successor PR checks, reviews, or approvals do not transfer. Fresh #874 evidence must bind to 05935e02....

Verification boundary

Successor-local focused evidence recorded 46 Workspace Vitest tests plus desktop typecheck/lint. That is implementation evidence, not merge evidence for this canonical PR. Revalidate exact-current-head repository and central CI, desktop statement/branch/function/line coverage, typecheck/lint/build/Storybook as applicable, SAST/security/SBOM/supply-chain/package/release, and current-head reviews on #874 itself.

Any failure must be inspected at its exact job/check-run/log boundary before editing or rerunning. Queued, skipped, predecessor-PR/head, protected-base, model-only, self/author, or bypass evidence is not success.

Security / dependency boundary

This is presentation-only use of already-validated RehearsalSong role names, section labels, focus strings, and section start times. Visible values remain React text/control labels. No file, URL, subprocess, IPC, WebView, model, database, dependency, lockfile, persistence, or new authority boundary is introduced.

#783 remains the canonical protected JavaScript dependency-security owner. #861 remains the Python branch-coverage baseline. Central required-workflow repairs are read-only dependencies and must be inherited from protected central main before leaf evidence is regenerated; this branch does not suppress or duplicate those gates.

Merge gate

Keep Draft and unmerged until the unchanged exact head has all applicable repository/central required workflows terminal-success, exact owned statement/branch coverage and other exposed metrics, zero valid unresolved findings, a qualifying independent non-author last-push approval, and ordinary protected-branch acceptance. Never bypass protection or transfer predecessor evidence.

cursoragent and others added 5 commits August 16, 2026 15:25
Replace the stub rehearsal-priorities card with role-and-section pairs
so a player can see what to lock in before the room starts. Prefer high
priority, then medium, then focus sections, and never turn blank or none
sentinels into instructions.

Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.com>
Repeated verse labels no longer consume the third rehearsal-priority slot, and empty copy now points at the section roadmap instead of a no-op role click.

Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.com>

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Stale comment

Review at 5cd1afd6

The lock-in-first card names concrete parts on the Late Night Set path, skips blank/none, and case-dedupes focus-section fallback labels. No XSS or new IPC surface. This head is not the landing vehicle.

Blocking for this head

  1. Repeated verse labels can consume the third slot. Dedup is by role.id:section.id only. A second verse section with the same high-priority Bass Guitar renders Bass Guitar · verse twice and hides Lead Vocal · chorus.
  2. Empty copy is false. Open a role on the roadmap... / 로드맵에서 역할을 열면... does not change this card. collectLockInFirstItems ignores activeRole.
  3. Tests never exercise a multi-section song. The demo seed is one verse, so the display-pair bug above was untested.

Landing vehicle

Prefer #877 (df023052 on cursor/bc-f1adf73f-c43e-452d-858e-24d7596dc0bd-c561). That head adds display-pair uniqueness, honest empty copy, a verse/verse/chorus fixture, Storybook inventory, and docs/plans/2026-08-16-workspace-lock-in-first.md.

Do not merge this Draft. Do not treat queued checks on 5cd1afd6 as success. Next buyer slice after #877: clicking a named pair should select that role and section on the roadmap.

View PR

Open in Web View Automation 

Sent by Cursor Automation: Fix Issues

cursoragent and others added 2 commits August 16, 2026 15:59
Clicking a named role-and-section pair selects that role and focuses the matching section so players can jump from the priority card into the part they need to lock.

Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.com>
Fallback focus labels now jump to the first matching section so players can still act when analysis only names a section, not a role pair.

Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.com>
Omit focus labels that do not match a roadmap card so a missing
bridge cannot clear verse focus. Scroll the named section into
view when a lock-in pair or fallback label is opened.

Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.com>

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Review at c646037d

#874 still names concrete lock-in pairs and keeps honest empty copy. Two Important residuals remain on this head. Do not merge #874.

Landing vehicle is #882 43cb9438 vs develop@acdbea63. Prefer #882 over #874 and over #880 (same residual slice, but #880 targets main).

Residuals still present here

  1. Unmatched focus labels stay action buttons. handleFocusSectionActivate writes findSectionIdForFocusLabel(...), which is null for bridge. That can clear an existing verse focus. The no-match test only starts from null, so it does not prove a no-op.
  2. Lock-in/focus activation sets role and data-focused-section but never scrolls the named card into the horizontal roadmap. On the verse/verse/chorus Late Night Set fixture, Show Lead Vocal in chorus still leaves verse first in view, so the role filter can show the wrong section first.

Strengths that stay

Display-unique pairs, none/blank sentinels, Late Night Set / repeated-verse coverage, and ko+en chrome are sound. No new trust boundary.

Next action

Review and land #882. It omits unmatched focus labels, walks past none first-section sentinels, and scrolls the named roadmap card into view. Do not mix stem-lane work onto this slice. Do not self-approve.

Open in Web View Automation 

Sent by Cursor Automation: Fix Issues

Comment thread apps/desktop/src/features/workspace/Workspace.tsx Outdated
Comment thread apps/desktop/src/features/workspace/SectionRoadmap.tsx

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Correction after #880 was retargeted to develop: landing vehicle is #880 a0c2e612 (tree 1e75a423). Draft #882 is the same tree, opened while #880 still showed main. Prefer #880. Do not merge #874 or #882 in parallel.

View PR

Open in Web View Automation 

Sent by Cursor Automation: Fix Issues

Show when each lock-in part starts, mark the activated pair as current,
keep aria-label tokens from rewriting each other, and skip smooth
roadmap scrolling when the player prefers reduced motion.

Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.com>

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Review at 43cb9438

Previous residuals on this head are fixed: unmatched bridge is omitted, activation never writes null, and the named roadmap card scrolls into view. #880 and #882 are closed. This Draft is no longer the landing vehicle.

Landing vehicle is #888 db2edf00 vs develop@acdbea63. It names the first entrance time on each lock-in pair and focus label, marks the activated pair with aria-current, interpolates aria-labels in one pass, and uses instant scroll when the player prefers reduced motion.

Do not merge #874

Keep this Draft open only as the predecessor record. Merge #888 after exact-head CI and a qualifying independent non-author last-push approval. Do not self-approve. Do not mix Stem Lab (#884) or NIM (#879/#881) onto that slice.

Strengths that stay on this head

Display-unique pairs, none/blank sentinels, Late Night Set / repeated-verse coverage, honest empty copy, and ko+en chrome remain sound. No new trust boundary.

View PR

Open in Web View Automation 

Sent by Cursor Automation: Fix Issues

A lock-in click now marks the same section on the song-structure
timeline so players can see the entrance on both the form strip and
the roadmap.

Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.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