Skip to content

feat(score): name Add a score when the list or viewer is empty - #1019

Open
seonghobae wants to merge 7 commits into
developfrom
feat/score-empty-add-next-action
Open

feat(score): name Add a score when the list or viewer is empty#1019
seonghobae wants to merge 7 commits into
developfrom
feat/score-empty-add-next-action

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 24, 2026

Copy link
Copy Markdown
Collaborator

Summary

When the score list or viewer is empty, BandScope now names Add a score as the next rehearsal action instead of describing a missing PDF. Korean and English stay aligned. The Add score control remains the existing validated attach path.

This slice owns only score empty copy, a11y status, tests, and the matching agent/architecture/design-contract notes. It does not replace #898 (workspace empty/error cards) or compete with first-run / export / analysis-failure next-action PRs.

Exact identity

  • Protected target: develop@acdbea6344fe1231c39535b575f4de35e4c607c9.
  • Branch: feat/score-empty-add-next-action.
  • Exact head: d315fbc31b47e688c9b476e65a1308c52aa18183.

What the buyer sees

  • Empty attached-score list: Add a score to read it during rehearsal.
  • Empty viewer title: No score is open.
  • Empty viewer body: Add a score above, then open it to read during rehearsal.
  • When no analysis project is active, the existing Analyze local audio or a YouTube import first warning remains.
  • Korean copy names the same next action (악보를 추가).

Figma/component contract: docs/design-system/component-contract.md Workspace States — score list/viewer empty copy must name Add a score.

Verification

  • Focused desktop tests: ScoreView.test.tsx, ScoreViewer.test.tsx, i18n/index.test.ts (41 passed)
  • python3 scripts/checks/verify_docs.py
  • ./scripts/harness/quickcheck.sh (full harness left to required CI on this exact head)

Security Notes

Attack surface

  • Customer-facing empty copy and locale keys only. No new IPC, filesystem, URL, subprocess, or PDF-parse path.

Trust boundary

  • Score attach/open/remove stay on the existing project-scoped desktop bridge. The Add score button remains disabled without an active analysis project.

Mitigations

Test points

  • Empty list announces Add a score with role="status".
  • Empty viewer heading + body name the next action.
  • English and Korean dictionaries stay key-aligned for the new title key.

Dependency and Supply Chain

  • No new direct dependency was added
  • If a new dependency was added, this PR explains why it is needed
  • runtime / dev / build / test classification is recorded
  • alternatives were considered
  • maintainer trust and update health were checked
  • license fit was checked
  • known security issues were checked
  • transitive footprint impact was considered
  • SBOM or supplemental inventory impact was recorded

No dependency, lockfile, or SBOM change.

i18n impact

  • No user-visible string changed
  • Korean and English locale impact was updated

Out of scope

Merge gate

Keep unmerged until this unchanged exact head has repository and central CI/security/SAST/SBOM/coverage/review gates terminal-success, zero valid unresolved findings, a qualifying independent non-author last-push approval, and ordinary branch-protection acceptance. Never self-approve or bypass protection. Queued, pending, skipped, cancelled, predecessor-head, author, or model-only evidence is non-passing. Inherited #783 npm HIGH findings must not be suppressed here.

Reviewer checklist

  • Gitflow target branch is develop
  • protected-branch rules were not weakened
  • required checks are expected to stay green

Open in Devin Review

Summary by CodeRabbit

  • 개선 사항

    • 점수 목록과 뷰어의 빈 상태 메시지가 단순한 PDF 누락 안내 대신 Add a score를 다음 단계로 명확히 안내합니다.
    • 점수가 열려 있지 않은 경우 제목과 추가·열기 안내가 함께 표시됩니다.
    • 빈 상태 메시지의 접근성이 향상되어 보조 기술로 안내 내용을 확인할 수 있습니다.
    • 영어와 한국어 안내 문구가 업데이트되었습니다.
  • 문서

    • 빈 상태 메시지 작성 규칙과 제품 문서가 최신 안내에 맞게 갱신되었습니다.

Empty score list and viewer copy now name Add a score as the next rehearsal
action instead of describing a missing PDF. Korean and English stay aligned.
@coderabbitai

coderabbitai Bot commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

Next included review available in 38 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: f67957fb-01a6-4514-aa45-d3ed60509b6b

📥 Commits

Reviewing files that changed from the base of the PR and between d315fbc and 3a86b15.

📒 Files selected for processing (9)
  • AGENTS.md
  • ARCHITECTURE.md
  • CHANGELOG.md
  • CLAUDE.md
  • apps/desktop/src/features/score/ScoreView.project-context.test.tsx
  • apps/desktop/src/features/score/ScoreView.project-scope.test.tsx
  • apps/desktop/src/features/score/ScoreView.tsx
  • apps/desktop/src/locales/en/common.json
  • apps/desktop/src/locales/ko/common.json
📝 Walkthrough

Walkthrough

악보 목록과 뷰어의 빈 상태 문구가 Add a score 중심의 안내로 변경되었습니다. 뷰어에는 빈 상태 제목이 추가되었습니다. 목록 메시지는 role="status"로 표시됩니다. 영어·한국어 번역과 관련 테스트 및 문서가 갱신되었습니다.

Changes

악보 빈 상태 안내

Layer / File(s) Summary
빈 상태 문구 계약 및 번역
AGENTS.md, ARCHITECTURE.md, CLAUDE.md, CHANGELOG.md, docs/design-system/component-contract.md, apps/desktop/src/locales/*/common.json
빈 상태가 누락된 PDF를 설명하는 대신 Add a score를 다음 리허설 행동으로 안내하도록 규칙, 변경 기록, 영어·한국어 번역을 갱신했습니다.
빈 상태 UI 렌더링
apps/desktop/src/features/score/ScoreView.tsx, apps/desktop/src/features/score/ScoreViewer.tsx
목록 메시지에 role="status"를 추가했습니다. 뷰어 빈 상태에 No score is open 제목을 추가했습니다.
빈 상태 검증
apps/desktop/src/features/score/ScoreView.test.tsx, apps/desktop/src/features/score/ScoreViewer.test.tsx, apps/desktop/src/i18n/index.test.ts
목록·뷰어의 새 문구와 상태 역할을 검증했습니다. 영어·한국어 번역 키와 번역 결과의 일치를 검증했습니다.

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk: 🟡 Moderate · up to d315f

When no analysis project is active, the empty score state directs users toward an unavailable Add a score action instead of actionable guidance, creating a dead end for that flow. This should be corrected before merge.

🚥 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 제목은 목록과 뷰어의 빈 상태에서 Add a score를 안내하는 주요 변경 사항을 정확하고 간결하게 설명합니다.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 2 functions across 5 files. (7 skipped: 7 unsupported.)
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.
✨ 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/score-empty-add-next-action

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: No Issues Found

Devin Review analyzed this PR and found no bugs or issues to report.

Open in Devin Review

coderabbitai[bot]

This comment was marked as resolved.

Copy link
Copy Markdown
Collaborator Author

@opencode-agent Repair only PR #1019 branch feat/score-empty-add-next-action from current exact head d315fbc31b47e688c9b476e65a1308c52aa18183. Current-head CodeRabbit MAJOR PRRT_kwDORjvEXs6b0oP5 is valid: when projectId === null, Add score is disabled but both the empty attachment-list copy and empty viewer still tell the user to add a score, creating a dead-end next action. Use test-driven development: first add focused RED regressions covering an empty score list and empty ScoreViewer with no active project; require the buyer-visible body to direct the user to analyze local audio or a YouTube import first, while preserving Add a score when projectId is active. Then make the narrowest production fix: keep existing score-storage authority unchanged, pass explicit project availability to the viewer (or an equivalently typed, single-source state), and choose existing localized scoreRequiresProject guidance when no project is active rather than duplicating a new authority. Preserve current disabled attach/open/remove behavior and no new IPC/filesystem/dependency surface. Run focused ScoreView/ScoreViewer/i18n tests, TypeScript typecheck, owned desktop coverage, and quickcheck. Resolve only the MAJOR thread after the exact successor head is GREEN. Do not touch #783 dependencies/security suppression, branch protection, or unrelated score behavior. The ARCHITECTURE date thread is not part of this repair.

devin-ai-integration[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

@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/score/ScoreView.tsx
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