feat(workspace): consolidate first-range rehearsal navigation - #1143
feat(workspace): consolidate first-range rehearsal navigation#1143seonghobae wants to merge 29 commits into
Conversation
The ready map already names the first playable span. Players still had
to hunt the structure timeline for when that section happens. Offer
Find {section} at {clock} on the timeline, fail closed on duplicate
labels or unusable clocks, and highlight the matching cell.
📝 WalkthroughWalkthrough첫 연주 가능 범위를 고유 식별자로 검증하고, 타임라인과 로드맵에서 해당 섹션 또는 역할을 찾는 버튼을 추가했습니다. 포커스 요청은 반복 실행, 곡과 프로젝트 변경, 잘못된 시간 및 중복 식별자를 처리합니다. Changes첫 연주 가능 범위 탐색
Estimated code review effort: 4 (Complex) | ~45 minutes Merge Risk: 🔵 Low · up to Replacing or updating a song can leave an earlier Find request highlighting the wrong timeline or roadmap item when identifiers overlap. This is a bounded presentation issue with no playback or data impact, so the change is mergeable with explicit owner awareness and follow-up to clear or revalidate focus on song changes. Sequence Diagram(s)sequenceDiagram
participant Player
participant Workspace
participant firstRangeRoadmap
participant SectionRoadmap
Player->>Workspace: 로드맵 찾기 버튼 클릭
Workspace->>firstRangeRoadmap: 섹션 및 역할 확인
firstRangeRoadmap-->>Workspace: 검증된 sectionId와 roleId 반환
Workspace->>SectionRoadmap: 포커스 요청 전달
SectionRoadmap->>SectionRoadmap: 대상 역할 카드를 scrollIntoView
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
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. Comment |
|
Canonical single-writer repair for the overlapping first-range UI boundary. Fresh semantic comparison on the current protected base ( Treat this PR as the consolidation owner. Do not merge it until those unique #1142/#1147 behaviors, tests, locale contracts, and still-valid documentation evidence are reconstructed here (or a verified successor) and fresh exact-head checks/reviews pass. The sibling PRs remain preservation children until complete semantic succession; no predecessor approval/check evidence transfers. Direct base retargeting currently exposes real overlapping-file conflicts, so conflict resolution must preserve both behaviors rather than dropping a side. |
Product outcome
BandScope’s first playable-range cue links a buyer-visible rehearsal decision back to two existing surfaces without starting playback: the structure timeline answers when the range occurs and Section Roadmap identifies the exact part. #961 remains the Active Player owner.
Exact current identity
develop@749511c3ad4000090048718f685c6bee6b3d2c25feat/workspace-find-first-range-sectiond657b8d17222e23e7acf95c43766016bb3f013faThis PR is the canonical consolidation owner for the first-range Workspace navigation fan-out. #1147 has already been closed unmerged after its valid roadmap-navigation delta was preserved here; no predecessor check/review/approval evidence transfers.
Current behavior
firstRangeSqueezeowns playable-range presentation truth only: it preserves a complete ordered scientific-pitch span, role/section copy, overlap warning, and the source record’s exact string IDs even when those IDs are unsafe for DOM navigation. A noncanonical ID therefore cannot erase valid Bass Guitar C#2–E3-style rehearsal guidance.firstRangeTimelineindependently admits navigation only when the source section ID is exact/canonical and unique, and start/end clocks are finite, non-negative, and strictly increasing. Repeated form labels remain valid when IDs are unique.firstRangeRoadmapindependently admits navigation only when the exact section ID is unique across the map and the exact role ID is unique within that section. Repeated display labels/names remain valid.aria-currentand suppress stale focus scrolling..bscoperesult therefore clears UI-local navigation state even when both payloads reusesong.id = "analyzed-song"; ordinary immutable edits to the current project retain the same Workspace instance and valid focus.prefers-reduced-motion: reduce, and roadmap Find scrolls the exact requested role card rather than only the section wrapper.TDD / repair history
Earlier RED/GREEN history on this branch covered repeated activation, replacement-song focus scoping, duplicate identities, exact-role scrolling, roadmap interaction coverage, and reduced-motion behavior. The repaired production path includes exact navigation admission, uniqueness helpers, strict positive-duration validation, current-song focus revalidation, saved-project Workspace instance revision, and decoupling of valid range presentation truth from unsafe navigation identity.
The six commits after previously documented head
740ad3b5d1311b309b70dffab0a043932665de32are descendants without rebase; the latest current-head commitd657b8d17222e23e7acf95c43766016bb3f013fakeepsdocs/architecture/overview.mdcode-current with the mounted timeline/roadmap navigation behavior.Current verification boundary
Fresh exact-head inventory contains 31 check-runs for
d657b8d17222e23e7acf95c43766016bb3f013fa. Windows/macOS build and OSV lanes remain queued, whilepublish-manual-pr-evidence-statusis skipped; those are non-passing evidence. Hosted exact-head CI is authoritative and predecessor/protected-base evidence is not substituted.Security / ownership boundary
No new filesystem, URL, subprocess, network, credential, database, MIR, or playback authority is introduced. IDs and clocks are treated as untrusted navigation evidence and fail closed before selecting a UI target, while independent buyer-visible range evidence remains intact. Project loading stays with the existing Project Persistence boundary; this PR only prevents UI-local focus state from crossing a successful project replacement.
Do not self-approve. Merge only on the unchanged exact head after every applicable required check is terminal-success, all valid review findings are resolved, and a qualifying independent non-author approval applies to the last push.