feat(workspace): name tonight's first dynamics plan on the map - #1011
feat(workspace): name tonight's first dynamics plan on the map#1011seonghobae wants to merge 20 commits into
Conversation
The mounted rehearsal workspace names tonight's first dynamics plan so a part can lock the owned dynamics before rehearsal starts. Open moves to the matching rendered song-structure section. Do not invent that copy from groove, cue, simplification, overlap, range, chord labels, function labels, setup notes, transposition plans, confirmed overrides, harmonic explanations, or confidence notes. Distinct from first-setup-note, first-transposition-plan, and first-tuning-plan. Security Notes: - Attack surface: untrusted rehearsal-song runtime metadata (sections, roles, partGraph, identity accessors) plus DOM navigation against the mounted song-structure renderer. - Trust boundary: only own data properties on dense collections are read. Inherited/accessor/sparse/hostile getters fail closed to null and keep the callout guidance-only. - Navigation authority is the renderer-owned section index, not analysis ids. - Logging/privacy: no path, filename, or rejected-metadata echo. - Test points: inherited-metadata suite, particle-safe Korean copy, reduced-motion scroll, workspace-scope renderer selection, Workspace navigation. Shared-types 20/20 at 100%. Desktop targeted 68/68.
|
Warning Review limit reachedNext included review available in 33 minutes. View limit detailsLimit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (31)
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 |
# Conflicts: # AGENTS.md # CHANGELOG.md # CLAUDE.md # apps/desktop/src/features/workspace/Workspace.tsx # apps/desktop/src/locales/en/common.json # apps/desktop/src/locales/ko/common.json
|
Resolved merge conflicts against origin/develop (749511c): union-merged AGENTS.md/CHANGELOG.md bullets, sentence-merged CLAUDE.md, kept both import sets in Workspace.tsx (FirstDynamicsPlanCallout + firstRangeSqueeze), unioned en/ko locale tails (JSON valid, en/ko symmetric). Merged legacy .Jules/palette.md into canonical .jules/palette.md, dropped alias. No conflict markers remain. Merge head: bb06076. |
| /** Return whether a code point is in the cross-language plan whitespace set. */ | ||
| function isPlanWhitespaceCodePoint(codePoint: number): boolean { | ||
| return ( | ||
| (codePoint >= 0x0009 && codePoint <= 0x000d) || | ||
| codePoint === 0x0020 || | ||
| codePoint === 0x0085 || | ||
| codePoint === 0x00a0 || | ||
| codePoint === 0x1680 || | ||
| (codePoint >= 0x2000 && codePoint <= 0x200a) || | ||
| codePoint === 0x2028 || | ||
| codePoint === 0x2029 || | ||
| codePoint === 0x202f || | ||
| codePoint === 0x205f || | ||
| codePoint === 0x3000 || | ||
| codePoint === 0xfeff | ||
| ); | ||
| } | ||
|
|
||
| /** Apply one explicit cross-language Unicode whitespace policy to plan text. */ | ||
| export function isNonEmptySingleLineText(value: unknown): value is string { | ||
| if (typeof value !== "string") { | ||
| return false; | ||
| } | ||
| let hasNonWhitespace = false; | ||
| for (const character of value) { | ||
| const codePoint = character.codePointAt(0)!; | ||
| if ( | ||
| codePoint === 0x000a || | ||
| codePoint === 0x000d || | ||
| codePoint === 0x0085 || | ||
| codePoint === 0x2028 || | ||
| codePoint === 0x2029 | ||
| ) { | ||
| return false; | ||
| } | ||
| if (!isPlanWhitespaceCodePoint(codePoint)) { | ||
| hasNonWhitespace = true; | ||
| } | ||
| } | ||
| return hasNonWhitespace; |
There was a problem hiding this comment.
Buyer next action
The mounted rehearsal workspace names tonight's first dynamics plan so a part can lock the owned dynamics before rehearsal starts.
Demo: Bass Guitar still has Keep the verse under the vocal so the chorus still has somewhere to lift. Open is the next action: it moves to the matching rendered song-structure section.
Protected base:
develop@749511c3ad4000090048718f685c6bee6b3d2c25.Exact current head:
c7fa06aed32757aac5c94503582f39b07f9a36e5onfeat/workspace-first-dynamics-plan.What the player sees
dynamicsPlancopy, the labeled section, and the time.Authority boundary and current-head repair
harmonicExplanation, or confidence notes.RehearsalRole.dynamicsPlanis distinct fromsetupNote,transpositionPlan, andtuningPlan.gettrap cannot substitute a different buyer-visible dynamics plan after the own-data check.07fa70fcdbe2df6aba9c8b198a099a7f1ecfe20flocks that Proxy get-trap case; production repairc7fa06aed32757aac5c94503582f39b07f9a36e5consumes the descriptor value directly.section.idis never DOM-ID authority. Open uses renderer-owneddata-section-index.Security Notes
Exact-head verification state
Fresh repository workflows for
c7fa06aed32757aac5c94503582f39b07f9a36e5are queued/pending at the latest refetch. No non-terminal result and no predecessor-head evidence is counted as success.Dependency / merge gate
pdfjs-dist/nanoid/undiciHIGH findings are not copied or suppressed here. No lockfile change.