Skip to content

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

Open
seonghobae wants to merge 1 commit into
developfrom
feat/workspace-first-chorus-lift
Open

feat(workspace): guide tonight's first chorus on map and player#939
seonghobae wants to merge 1 commit into
developfrom
feat/workspace-first-chorus-lift

Conversation

@seonghobae

Copy link
Copy Markdown
Collaborator

Product outcome

After analysis, the room can see tonight's first labeled chorus and take one next action: open that lift on the map, or hear it from the player when playback is available.

Cites docs/design-system/component-contract.md (First Chorus Callout) and the existing chorus form label in @bandscope/shared-types.

This is the first structure-label next-action after the coordination labels pickup (#916), stop (#934), and labeled handoff (#937). It is not a parallel MIR product and does not invent a chorus from verse, pre-chorus, pickup, stop, or handoff.

Exact current identity

  • Protected base: develop@acdbea6344fe1231c39535b575f4de35e4c607c9.
  • Exact head: 58c2faf836d5c92f57357459ce1db3e64da764aa.
  • Branch: feat/workspace-first-chorus-lift.
  • Open, non-Draft, unmerged.

What changed

  • Resolve only an explicit labeled chorus section whose runtime time window conforms to the shared integer timing contract: non-negative, strictly positive duration, and no endpoint beyond MAX_SECTION_TIME_SECONDS. Do not invent a lift from verse, pre-chorus, pickup, stop, handoff, graph edges, zero-duration ranges, fractional ranges, or overflowed timestamps.
  • Name the holding part only when an active ranked graph node corroborates it; otherwise keep the lift band-wide.
  • Workspace action opens the renderer-owned map section. Player Hear exists only when the owning surface supplies a callable seek callback.
  • Arm follow-up guidance only after the selected action actually executes; a missing renderer target does not produce success-shaped guidance.
  • Fail closed on malformed runtime song/section collections/elements, section ids/windows, role/graph collections/elements, duplicate identities, and non-boolean activity. Analysis section.id is never DOM-ID authority.
  • Keep Player summary rendering safe for non-array, sparse, or malformed runtime section evidence and non-string runtime song titles.
  • Localize the chorus form label at the i18n boundary so Korean copy renders 후렴 rather than the raw chorus enum.

Test-first hardening

  • Resolver coverage proves demo songs stay guidance-only, coordination labels cannot become a chorus, the earliest bounded chorus wins, inactive holders stay band-wide, and sparse/duplicate/overflowed evidence fails closed.
  • Callout coverage proves Open scrolls the renderer-owned section, missing targets do not arm, workspace-scroll stays authoritative over a seek callback, Hear exists only with a callback, and Korean copy never leaks the raw enum.
  • Player coverage contains malformed section collections and object-valued titles before they reach React text authority.

Dependency routing

Merge gate

Merge only after one unchanged exact head has every applicable repository and central required gate terminal-success, zero valid unresolved findings, exact required owned coverage/docstring evidence, a qualifying independent non-author last-push APPROVE, and ordinary protected-branch acceptance. Queue/pending/skipped/cancelled/failed/predecessor/protected-base/dismissed/self/author evidence is not success. Never bypass branch protection.

Security Notes

  • Untrusted input: rehearsal song, section, time-range, role, graph, title and copy-bearing metadata.
  • Trust boundary: renderer-owned song-structure children and Player summary rendering; lexical chorus resolution never opens files or network paths.
  • Mitigations: shared integer timing bound reuse, positive-length time-range checks, dense-array and object guards, non-empty string identities and holder copy, duplicate-identity fail-closed behavior, ranked-priority allowlisting, strict is_active === true, one-pass copy interpolation, locale-owned form labels, renderer-position navigation, runtime title containment, and reduced-motion presentation handling.
  • Action state is written only after the owning callback returns or a real renderer-owned section exposes and accepts scrollIntoView.

Name the earliest labeled chorus so the room can open the lift on the
map or hear it from the player. Fail closed on verse, pre-chorus,
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

Warning

Review limit reached

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

Next review available in: 8 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?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

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: ac7bc5d3-cd3b-48db-9509-8a986ef11a0d

📥 Commits

Reviewing files that changed from the base of the PR and between acdbea6 and 58c2faf.

📒 Files selected for processing (17)
  • 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/FirstChorusCallout.reduced-motion.test.tsx
  • apps/desktop/src/features/workspace/FirstChorusCallout.test.tsx
  • apps/desktop/src/features/workspace/FirstChorusCallout.tsx
  • apps/desktop/src/features/workspace/Workspace.tsx
  • apps/desktop/src/features/workspace/firstChorus.test.ts
  • apps/desktop/src/features/workspace/firstChorus.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

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.

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

OpenCode cannot approve yet because required coverage evidence did not pass.

Review outcome

1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence

  • Problem: The required coverage-evidence job result was failure, so OpenCode cannot establish approval sufficiency for this head.

  • Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.

  • Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present.

  • Result: REQUEST_CHANGES

  • Reason: coverage-evidence result was failure, so required test/docstring evidence was not proven for current head 58c2faf836d5c92f57357459ce1db3e64da764aa.

  • Head SHA: 58c2faf836d5c92f57357459ce1db3e64da764aa

  • Workflow run: 32220398377

  • Workflow attempt: 1

Coverage evidence

Coverage evidence job did not run or did not publish coverage evidence.

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Changed file (16 files)"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file (16 files)"]
  R1 --> V1["required checks"]
  Evidence --> S2["Docs: component-contract.md"]
  S2 --> I2["operator or user guidance"]
  I2 --> R2["Review risk: Docs: component-contract.md"]
  R2 --> V2["docs review"]
Loading

@opencode-agent

opencode-agent Bot commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

OpenCode Review Overview

  • Head SHA: 58c2faf836d5c92f57357459ce1db3e64da764aa
  • Workflow run: 32224223481
  • Workflow attempt: 1
  • Gate result: REQUEST_CHANGES (approval step)

Pull request overview

OpenCode cannot approve yet because required coverage evidence did not pass.

Review outcome

1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence

  • Problem: The required coverage-evidence job result was failure, so OpenCode cannot establish approval sufficiency for this head.

  • Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.

  • Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present.

  • Result: REQUEST_CHANGES

  • Reason: coverage-evidence result was failure, so required test/docstring evidence was not proven for current head 58c2faf836d5c92f57357459ce1db3e64da764aa.

  • Head SHA: 58c2faf836d5c92f57357459ce1db3e64da764aa

  • Workflow run: 32224223481

  • Workflow attempt: 1

Coverage evidence

Coverage evidence job did not run or did not publish coverage evidence.

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Changed file (16 files)"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file (16 files)"]
  R1 --> V1["required checks"]
  Evidence --> S2["Docs: component-contract.md"]
  S2 --> I2["operator or user guidance"]
  I2 --> R2["Review risk: Docs: component-contract.md"]
  R2 --> V2["docs review"]
Loading

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

OpenCode cannot approve yet because required coverage evidence did not pass.

Review outcome

1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence

  • Problem: The required coverage-evidence job result was failure, so OpenCode cannot establish approval sufficiency for this head.

  • Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.

  • Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present.

  • Result: REQUEST_CHANGES

  • Reason: coverage-evidence result was failure, so required test/docstring evidence was not proven for current head 58c2faf836d5c92f57357459ce1db3e64da764aa.

  • Head SHA: 58c2faf836d5c92f57357459ce1db3e64da764aa

  • Workflow run: 32224223481

  • Workflow attempt: 1

Coverage evidence

Coverage evidence job did not run or did not publish coverage evidence.

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Changed file (16 files)"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file (16 files)"]
  R1 --> V1["required checks"]
  Evidence --> S2["Docs: component-contract.md"]
  S2 --> I2["operator or user guidance"]
  I2 --> R2["Review risk: Docs: component-contract.md"]
  R2 --> V2["docs review"]
Loading

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