Skip to content

feat(workspace): name tonight's first articulation plan on the map - #1012

Open
seonghobae wants to merge 14 commits into
developfrom
feat/workspace-first-articulation-plan
Open

feat(workspace): name tonight's first articulation plan on the map#1012
seonghobae wants to merge 14 commits into
developfrom
feat/workspace-first-articulation-plan

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 23, 2026

Copy link
Copy Markdown
Collaborator

Product outcome

After analysis, the room can see tonight's first owned articulation plan and take one next action: open that part on the map.

Cites docs/design-system/component-contract.md (First Articulation Plan Callout).

This is a setup-cue next action after first-setup-note, first-transposition-plan, first-tuning-plan, and first-dynamics-plan. It is not a parallel MIR product and does not invent articulation from groove, cue, simplification, overlap, range, chords, function labels, setup notes, transposition plans, tuning plans, dynamics plans, confirmed overrides, harmonic explanations, or confidence notes.

Exact current identity

  • Protected base: develop@acdbea6344fe1231c39535b575f4de35e4c607c9.
  • Branch: feat/workspace-first-articulation-plan.
  • Head: a7057c0ac2fb5dac5929a039d3f00196721df06c.

Buyer-facing copy

  • Named: {role} still has an articulation plan in the {section} at {at} plus the owned articulationPlan text.
  • Open: Open {role} articulation at {at} scrolls the renderer-owned [data-testid=song-structure-grid] [data-section-index=N].
  • Armed: Lock that articulation on {role} at {at} before the room starts.
  • Unavailable: stay on tonight's map until a part owns rehearsal-facing articulation copy. That unavailable sentence is the next action.

Korean copy stays particle-safe with 파트.

Safety

Out of scope


Open in Devin Review

Summary by CodeRabbit

  • 새 기능

    • 워크스페이스에서 오늘의 첫 아티큘레이션 계획과 역할, 섹션, 시작 시간을 확인할 수 있습니다.
    • 버튼을 누르면 해당 섹션으로 이동하며, 접근성 설정에 따라 스크롤 방식이 조정됩니다.
    • 영어와 한국어 안내 문구 및 섹션 라벨을 지원합니다.
    • 계획 정보가 없거나 사용할 수 없는 경우 안내 메시지를 표시합니다.
  • 문서

    • 아티큘레이션 계획 안내 및 reduced-motion 동작을 문서화했습니다.
  • 테스트

    • 계획 탐색, 다국어 표시, 접근성, 오류 입력 및 다양한 화면 상태를 검증하는 테스트를 추가했습니다.

After analysis, the room can open the first owned articulation plan on
the rehearsal map instead of inferring attack or sustain from groove,
setup notes, or dynamics copy.
@coderabbitai

coderabbitai Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

Next included review available in 55 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: dc7ab5b3-d71f-47b5-859e-e041c55dcd22

📥 Commits

Reviewing files that changed from the base of the PR and between e632b16 and 25d777f.

📒 Files selected for processing (1)
  • .jules/palette.md
📝 Walkthrough

Walkthrough

리허설 역할에 articulationPlan 데이터를 추가했습니다. 앱은 첫 계획을 검증하고 해석합니다. 워크스페이스는 계획 정보를 지역화해 표시하고, 소유 renderer의 해당 섹션으로 이동합니다.

Changes

첫 articulation plan 기능

Layer / File(s) Summary
articulationPlan 데이터 계약
packages/shared-types/src/index.ts, packages/shared-types/test/index.test.ts
RehearsalRole에 선택적 articulationPlan 필드를 추가했습니다. 런타임 검증과 데모 데이터 및 테스트를 갱신했습니다.
첫 계획 해석
apps/desktop/src/features/workspace/firstArticulationPlan.ts, apps/desktop/src/features/workspace/firstArticulationPlan.test.ts, apps/desktop/src/features/workspace/firstArticulationPlan.inherited-metadata.test.ts, apps/desktop/src/features/workspace/firstArticulationPlan.section-label.test.ts
canonical 섹션 라벨과 입력 구조를 검증합니다. 시간, 우선순위, ID 기준으로 첫 계획을 선택합니다. 잘못된 런타임 값은 null로 처리합니다.
지역화된 callout과 탐색 동작
apps/desktop/src/features/workspace/FirstArticulationPlanCallout.tsx, apps/desktop/src/features/workspace/FirstArticulationPlanCallout*.test.tsx, apps/desktop/src/i18n/index.ts, apps/desktop/src/i18n/index.test.ts, apps/desktop/src/locales/*/common.json
계획의 역할, 섹션, 시간을 표시합니다. 버튼은 소유 renderer의 섹션으로 이동합니다. reduced-motion 설정, 한국어 조사 처리, 계획 부재 문구와 placeholder 보존을 지원합니다.
워크스페이스 연결과 검증
apps/desktop/src/features/workspace/Workspace.tsx, apps/desktop/src/features/workspace/Workspace.test.tsx, apps/desktop/vite.config.ts, apps/desktop/src/features/workspace/articulationCoverageContract.test.ts
Workspace에 callout을 추가하고 각 섹션에 data-section-index를 부여했습니다. 통합 동작과 프로덕션 커버리지 대상을 검증합니다.
계약과 운영 문서
docs/design-system/component-contract.md, docs/doctoring/reduced-motion-first-articulation-plan-navigation.md, AGENTS.md, ARCHITECTURE.md, CHANGELOG.md, CLAUDE.md, .jules/palette.md
컴포넌트 계약, reduced-motion 탐색 규칙, 리허설 요구사항, 접근성 및 국제화 지침을 갱신했습니다.

Estimated code review effort: 4 (Complex) | ~45 minutes

Merge Risk: 🔵 Low · up to e632b

The PR adds an articulation-plan callout and map navigation, but a fallback message can direct users to a selected part when none is selected. This is a localized user-facing issue, so the change is mergeable with explicit owner awareness and follow-up.

Sequence Diagram(s)

sequenceDiagram
  participant Workspace
  participant FirstArticulationPlanCallout
  participant resolveFirstArticulationPlan
  participant SongStructure
  Workspace->>FirstArticulationPlanCallout: song 전달
  FirstArticulationPlanCallout->>resolveFirstArticulationPlan: 첫 계획 해석 요청
  resolveFirstArticulationPlan-->>FirstArticulationPlanCallout: 계획, 역할, 섹션, 시간 반환
  FirstArticulationPlanCallout->>SongStructure: 섹션 인덱스 대상 조회
  SongStructure-->>FirstArticulationPlanCallout: scrollIntoView 실행
  FirstArticulationPlanCallout-->>Workspace: armed 안내 표시
Loading
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목은 워크스페이스 지도에 오늘 밤의 첫 articulation plan을 표시하는 주요 변경 사항을 정확하고 간결하게 설명합니다.
Docstring Coverage ✅ Passed Docstring coverage is 88.89% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 27 functions across 12 files. (7 skipped: 7…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 88.89% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 27 functions across 12 files. (7 skipped: 7 unsupported.)

✨ 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-articulation-plan

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.

coderabbitai[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 581e6c99ab1ff4f0ff60b70b4e8839503ca5c36e: 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 581e6c99ab1ff4f0ff60b70b4e8839503ca5c36e 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 (FirstArticulationPlanCallout + 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: 4a49f36.

devin-ai-integration[bot]

This comment was marked as resolved.

Devin flagged two branches with no test coverage that sit under the
90% gate: matchMedia-present-but-not-reduced (smooth scroll) and the
values[key] ?? placeholder fallback in formatArticulationPlanCopy.

- export formatArticulationPlanCopy (mirrors fillRangeCopy precedent)
- add smooth-scroll case to the reduced-motion suite
- add copy-format unit tests incl. missing-value placeholder passthrough

Evidence: Callout suite 14/14, motion 2/2, copy-format 3/3,
resolver 18/18 (34 total across the touched files).
devin-ai-integration[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

Aligns the tooltip-wrapper guidance with the later rule forbidding
interactive roles on wrappers that contain native buttons.
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