Skip to content

feat(workspace): guide tonight's first verse on map and player - #947

Open
seonghobae wants to merge 10 commits into
developfrom
feat/workspace-first-verse-line
Open

feat(workspace): guide tonight's first verse on map and player#947
seonghobae wants to merge 10 commits into
developfrom
feat/workspace-first-verse-line

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 19, 2026

Copy link
Copy Markdown
Collaborator

Product outcome

After analysis, the room can see tonight's first labeled verse and take one honest next action: open that story line on the renderer-owned map, or hear it from Player only when playback authority is supplied. Copy names the holding part when an active role is corroborated, the labeled verse, and the time so the room can learn the first line.

Exact current identity

  • Protected base: develop@acdbea6344fe1231c39535b575f4de35e4c607c9.
  • Exact current head: 56e5b81150fba328028c58b98052751a66c4d7ba.
  • Branch: feat/workspace-first-verse-line.
  • Open, non-Draft, mergeable, unmerged.

Product / trust boundary

  • Resolve only an explicit labeled verse section whose runtime window is an integer, non-negative, positive-duration interval bounded by shared MAX_SECTION_TIME_SECONDS.
  • Do not invent a verse from intro, pre-chorus, chorus, bridge, outro, tag, pickup, stop, handoff, or an unlabeled first section.
  • Name a holding part only when a unique active ranked section-local graph node corroborates it; otherwise keep the story line band-wide.
  • Workspace navigation uses renderer-owned section position, never analysis-controlled DOM ids, and arms follow-up guidance only after the action actually executes.
  • Player Hear exists only when the owning surface injects a callable seek callback.
  • Malformed runtime roots/collections/elements/ids/names/priorities/activity/timing are contained rather than becoming buyer-visible authority.
  • Completion state is bound to the current runtime song object as well as the verse identity, so a replacement song cannot inherit success-shaped guidance through a missing/malformed external song id.

Test-first stale-completion repair

Fresh current-source review found that predecessor code normalized a malformed/missing runtime song.id to "" and keyed completion state by that value plus verse section/role/time. Two different runtime songs with invalid ids and the same verse tuple could therefore share the armed state.

  • RED 6125221ab28147ae45986e14b71ebd20e6ea5f1d adds a replacement-song regression: open a verse on song A, replace it with a distinct song B whose runtime id is also null and whose verse metadata is otherwise equal, and require B to render fresh guidance rather than inherited completion.
  • GREEN a1f2c73834cd1268f598d2dffa0a29e55ed9d8c1 stores the current RehearsalSong object in the completed-action receipt, resets on song identity change, and requires receipt/song identity equality before rendering armed guidance.
  • d77924814b33c2977bd2ad331421b9bbad9b149f restores the production file's terminal newline without changing behavior.
  • 6f71d87091a3028de120051bf5876773fd4d12b4 attempted to record the fix but exact commit verification found unintended release-history deletion; current 56e5b81150fba328028c58b98052751a66c4d7ba restores the predecessor release history and retains only the intended Unreleased fix entry. The bad intermediate tree is not current evidence.

No dependency, lockfile, workflow, Rust, Python, model, network, filesystem, persistence, IPC, or credential authority is changed by this repair.

Distinct from neighboring first-action lanes

Exact-current-head verification state

Every predecessor-head workflow/review result is historical after the TDD chain above. Fresh repository workflows are dispatched for exact head 56e5b81150fba328028c58b98052751a66c4d7ba:

  • ci 32325633490;
  • release 32325633645;
  • sbom 32325633665;
  • build-baseline 32325633474;
  • security-audit 32325633530;
  • aggregate Security Scan 32325633496;
  • SAST Semgrep 32325633478;
  • bandit 32325633482; and
  • secret-scan-gate 32325633551.

At the latest refresh every one of those runs was queued. Queued evidence is non-passing. Inspect any terminal failure at exact job/log/checkout-SHA level before another mutation or rerun.

There are currently no formal reviews and no inline review threads on this exact head. Absence of findings is not approval.

Dependency and supply-chain routing

The JavaScript dependency-security baseline remains owned by canonical #783 and must not be duplicated or suppressed in this rehearsal-copy slice. Repository security failures may be attributed to that owner only after exact-current-head job/log inspection proves the same protected-base causal boundary.

Security notes

Untrusted rehearsal metadata remains data only. Runtime roots and collections are validated before access; section time windows are bounded; section-local identities and ranked activity are corroborated; renderer positions own navigation; Player playback remains explicit callback authority; copy interpolation runs once; matchMedia is read-only; and completion state fails closed when the runtime song object changes.

Merge gate


Open in Devin Review

Name the earliest labeled verse so the room can open the story line on
the map or hear it from the player. Fail closed on intro, pre-chorus,
chorus, bridge, outro, tag, pickup, stop, and handoff labels, and keep
Hear behind a real seek callback.
@coderabbitai

coderabbitai Bot commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

Next included review available in 2 minutes.

View limit details

Limit 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.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: d178b887-5783-46bd-a544-00c7ddbc09ef

📥 Commits

Reviewing files that changed from the base of the PR and between 749511c and 9cf1142.

📒 Files selected for processing (20)
  • AGENTS.md
  • ARCHITECTURE.md
  • CHANGELOG.md
  • CLAUDE.md
  • apps/desktop/src/features/player/index.test.tsx
  • apps/desktop/src/features/player/index.tsx
  • apps/desktop/src/features/workspace/FirstVerseCallout.particle.test.tsx
  • apps/desktop/src/features/workspace/FirstVerseCallout.reduced-motion.test.tsx
  • apps/desktop/src/features/workspace/FirstVerseCallout.test.tsx
  • apps/desktop/src/features/workspace/FirstVerseCallout.tsx
  • apps/desktop/src/features/workspace/Workspace.test.tsx
  • apps/desktop/src/features/workspace/Workspace.tsx
  • apps/desktop/src/features/workspace/firstVerse.test.ts
  • apps/desktop/src/features/workspace/firstVerse.ts
  • apps/desktop/src/i18n/index.test.ts
  • apps/desktop/src/i18n/index.ts
  • apps/desktop/src/locales/en/common.json
  • apps/desktop/src/locales/ko/common.json
  • docs/design-system/component-contract.md
  • docs/doctoring/reduced-motion-first-verse-navigation.md
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/workspace-first-verse-line

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.

@devin-ai-integration devin-ai-integration Bot 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.

Devin Review found 3 potential issues.

Open in Devin Review

Comment thread apps/desktop/src/locales/ko/common.json Outdated
Comment thread apps/desktop/src/features/workspace/FirstVerseCallout.tsx
Comment thread apps/desktop/src/features/workspace/FirstVerseCallout.tsx
@opencode-agent opencode-agent Bot added area: ui-ux Frontend, interaction, design, or user experience priority: medium Normal-priority or P2 work status: needs-review Open pull request requiring current-head review or checks type: feature New or expanded product capability labels Aug 22, 2026
…le names

The ko firstVerseBody template attached the subject particle directly to
the dynamic role name ("{role}이 ..."), which produces ungrammatical copy
for vowel-ending names such as 피아노 (피아노이). Restructure the template
to "{at} {section}에서 {role} 파트가 첫 소절을 잡습니다." so particles
always attach to the fixed noun 파트, matching the particle-safe callout
convention used across the workspace-first series, and update the main
callout test expectation accordingly.
# 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
@seonghobae

Copy link
Copy Markdown
Collaborator Author

Merged current develop into this branch: resolved shared-file conflicts by including both this feature's first-verse-line callout and the newly landed #957 playable-range work (Workspace.tsx keeps both imports; en/ko locales unioned with symmetric keys; AGENTS/CLAUDE/CHANGELOG unioned). No behavior dropped.

@devin-ai-integration devin-ai-integration Bot 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.

Devin Review found 1 new potential issue.

Open in Devin Review

Comment thread apps/desktop/src/features/player/index.tsx
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: ui-ux Frontend, interaction, design, or user experience priority: medium Normal-priority or P2 work status: needs-review Open pull request requiring current-head review or checks type: feature New or expanded product capability

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant