Skip to content

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

Open
seonghobae wants to merge 6 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 6 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

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

@seonghobae, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 48 minutes

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.

How can I continue?

Wait for the limit to reset, then comment @coderabbitai review or push new commits to the PR.

An organization admin can change what happens after included review limits in Billing.

How do review limits work?

CodeRabbit enforces per-developer PR review limits within each organization.

For paid Pro and Pro+ reviews, CodeRabbit uses a developer's included PR review attempts over the past 7 days to set the current hourly allowance. At typical activity levels, the full plan allowance applies. Higher sustained activity can lower the allowance until earlier attempts leave the 7-day window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 445e3ab0-8369-47a4-b56c-de795edaa743

📥 Commits

Reviewing files that changed from the base of the PR and between acdbea6 and 56e5b81.

📒 Files selected for processing (19)
  • 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.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.

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.

1 participant