Skip to content

feat(workspace): name tonight's first open rehearsal comment on the map - #997

Open
seonghobae wants to merge 11 commits into
developfrom
feat/workspace-first-open-comment
Open

feat(workspace): name tonight's first open rehearsal comment on the map#997
seonghobae wants to merge 11 commits into
developfrom
feat/workspace-first-open-comment

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 23, 2026

Copy link
Copy Markdown
Collaborator

Product outcome

Name tonight's first open rehearsal comment so the room can read the MD note and open the matching rendered map section.

Design authority: workspace next-action pattern plus docs/design-system/component-contract.md. Distinct from first-lyric (#913), first-count (#995), first-transition (#994), first-setup (#910), and ready-board (#901). This does not invent a parallel MIR product; #828 remains the owner of #770. This does not replace #740 (handoff import).

Current exact scope

  • Protected target: develop@acdbea6344fe1231c39535b575f4de35e4c607c9.
  • Branch: feat/workspace-first-open-comment.
  • FirstOpenCommentCallout names the author, the holding part when an active graph node corroborates the owned roleId, the labeled section, and the time.
  • Open scrolls the renderer-owned song-structure section. Missing targets stay guidance-only and do not claim navigation completed.
  • Do not invent a note from resolved comments, assignments, approvals, lyric/count/transition cues, groove, setup, simplification, overlap, range copy, or empty/whitespace bodies.
  • Owned comment body is rendered as a text node and is never rescanned as template syntax.
  • Korean copy keeps particle-safe role phrasing (파트가 / 파트에) via {author}님이 and {role} 파트, and localizes the section form label.

Demo song: MD open comment for Keyboard 1 Right Hand at 0:10, body "Keep the keyboard color tone gentle on the first pass so the vocal cue stays forward."

Trust boundary

  • Untrusted runtime song, collaboration, comment, section, time-range, role, and part-graph metadata are accepted only as own data properties.
  • Inherited properties, accessors, sparse arrays, and arrays masquerading as records cannot establish an open note or a holding part.
  • Analysis section.id is never DOM-ID authority. Navigation uses renderer child index under the song-structure region.
  • The comment body is bounded to 180 Unicode code points without splitting a surrogate pair.
  • Reduced-motion map navigation uses behavior: "auto" when the OS requests it.

Dependency ownership

Canonical #783 owns the protected-base JavaScript HIGH findings (pdfjs-dist / nanoid / undici). This branch has no JavaScript dependency, lockfile, or vulnerability-suppression delta. Inherited npm HIGH must not be suppressed here.

Merge gate

Queued, pending, skipped-required, failed, predecessor-head, protected-base, author-only, model-only, status-only, or synthetic evidence is non-passing.


Open in Devin Review

Name the earliest owned open comment so the room can read the MD note
and open the matching rendered map section. Do not invent a note from
resolved comments, assignments, approvals, cues, groove, setup,
simplification, overlap, or range copy.
@coderabbitai

coderabbitai Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

Next included review available in 42 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: 8ec53122-0189-482a-90e5-c3e8e0b499fc

📥 Commits

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

📒 Files selected for processing (23)
  • AGENTS.md
  • ARCHITECTURE.md
  • CHANGELOG.md
  • CLAUDE.md
  • apps/desktop/src/features/workspace/FirstOpenCommentCallout.particle.test.tsx
  • apps/desktop/src/features/workspace/FirstOpenCommentCallout.proxy.test.tsx
  • apps/desktop/src/features/workspace/FirstOpenCommentCallout.reduced-motion.test.tsx
  • apps/desktop/src/features/workspace/FirstOpenCommentCallout.stories.tsx
  • apps/desktop/src/features/workspace/FirstOpenCommentCallout.test.tsx
  • apps/desktop/src/features/workspace/FirstOpenCommentCallout.tsx
  • apps/desktop/src/features/workspace/FirstOpenCommentCallout.workspace-scope.test.tsx
  • apps/desktop/src/features/workspace/Workspace.test.tsx
  • apps/desktop/src/features/workspace/Workspace.tsx
  • apps/desktop/src/features/workspace/firstOpenComment.inherited-metadata.test.ts
  • apps/desktop/src/features/workspace/firstOpenComment.test.ts
  • apps/desktop/src/features/workspace/firstOpenComment.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
  • apps/desktop/vite.config.ts
  • docs/design-system/component-contract.md
  • docs/doctoring/reduced-motion-first-open-comment-navigation.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.

devin-ai-integration[bot]

This comment was marked as resolved.

…edits

RED: after a player updates unrelated rehearsal state, Workspace creates a new song object even though the first open note is unchanged. The buyer-visible acknowledgement must stay armed instead of reverting to the pre-navigation copy.
GREEN: preserve the armed next-action acknowledgement when Workspace clones the same song for unrelated edits. Reset only when the owned plain-data song id or resolved first-open-note signature changes, and inspect id descriptors without executing hostile accessors.
Keep the Figma workspace next-action contract reviewable in Storybook with both actionable and guidance-only states, using the shared runtime component rather than duplicating its markup.
devin-ai-integration[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

@seonghobae

Copy link
Copy Markdown
Collaborator Author

Re-review request for exact head a23e8720a78b5f8eb5ef2d90b9e373037e201288: all required status contexts are green on this head (including coverage-evidence and security scans) and all review threads are resolved. @opencode-agent please review current head a23e8720a78b5f8eb5ef2d90b9e373037e201288 and update the review decision.

# 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

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 (FirstOpenCommentCallout + firstRangeSqueeze; render paths intact), unioned en/ko locale tails (JSON valid, en/ko symmetric). No conflict markers remain. Merge head: c0de9de.

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