Skip to content

feat(workspace): name Choose another song after local intake fails - #981

Open
seonghobae wants to merge 28 commits into
developfrom
feat/local-selection-failure-next-action
Open

feat(workspace): name Choose another song after local intake fails#981
seonghobae wants to merge 28 commits into
developfrom
feat/local-selection-failure-next-action

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 22, 2026

Copy link
Copy Markdown
Collaborator

Product outcome

A musician whose local file cannot start tonight still has a next rehearsal action. The workspace names Choose another song instead of leaving an unsupported-format chip with no recovery. Dismissing the picker stays silent and does not look like a failed song.

This is a first-run recovery slice of #964. It does not invent a bundled demo, compete with #980 (Use my own song), #974 (Analyze this song), or #976 (analysis-failure recovery), or open a parallel MIR product.

Exact identity

  • Protected target: develop@acdbea6344fe1231c39535b575f4de35e4c607c9.
  • Branch: feat/local-selection-failure-next-action.
  • Exact head: 12432cbb18b0148dcc543e637db8247e70e9e7f4.

What the buyer sees

  • Title: That file can't start tonight / 그 파일로는 오늘 합주를 시작할 수 없습니다.
  • Guidance: Choose a WAV, MP3, FLAC, or M4A file on this device. BandScope keeps the file local.
  • Primary action: Choose another song / 다른 곡 선택하기 — same production local-file intake as the header control.
  • Cancel: closing the native picker keeps the empty workspace or the already-admitted song. It does not show an unsupported-format error.
  • Header chip stays YouTube-only so local recovery lives on the workspace card.

Out of scope

Security Notes

  • Untrusted input: native picker rejection text, including path- and secret-shaped diagnostics and User cancelled.
  • Trust boundary: Tauri select_local_audio_sourceselectLocalAudioSource → workspace ErrorState. No new filesystem, URL, subprocess, or IPC API.
  • Safe failure: cancellation is a silent { ok: false; cancelled: true } result; unknown native text is replaced with supported-format guidance; concurrent pickers are ignored.
  • Privacy: absolute paths and secret-shaped messages must not cross into buyer-visible copy. Header alerts stay YouTube-only.

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.


Open in Devin Review

Distinguish User cancelled from unsupported-format failures so the workspace can keep the prior admitted song and recovery card.

Security Notes:
- Untrusted input: native picker rejection text, including path- and secret-shaped diagnostics.
- Trust boundary: Tauri select_local_audio_source → this bridge → buyer-visible copy.
- Safe failure: cancellation is silent; unknown native text is replaced with supported-format guidance.
- Privacy: absolute paths and secret-shaped messages must not cross into LocalAudioSelectionResult.error.
Keep picker cancellation silent, recover with Choose another song, and disable the header action while the native picker is open.

Security Notes:
- Untrusted input: native picker rejection text.
- Trust boundary: selectLocalAudioSource result -> workspace ErrorState.
- Safe failure: cancellation keeps prior admitted song and recovery card.
- Privacy: path-shaped native text is already redacted by the analysis bridge.
…ancel

Security Notes:
- Untrusted input: native picker rejection text including User cancelled.
- Trust boundary: selectLocalAudioSource -> App workspace recovery card.
- Safe failure: cancel keeps prior admitted song and recovery; concurrent pickers are ignored.
- Privacy: path-shaped diagnostics stay out of buyer-visible copy.
@seonghobae seonghobae added area: ui-ux Frontend, interaction, design, or user experience priority: medium Normal-priority or P2 work status: needs-review Open pull request requiring current-head review or checks type: feature New or expanded product capability labels Aug 22, 2026 — with Grok (by xAI)
devin-ai-integration[bot]

This comment was marked as resolved.

@coderabbitai

coderabbitai Bot commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

Next included review available in 9 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: 6b4c8dfd-810e-4de2-98cf-4756c1eecd4e

📥 Commits

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

📒 Files selected for processing (15)
  • AGENTS.md
  • ARCHITECTURE.md
  • CHANGELOG.md
  • CLAUDE.md
  • apps/desktop/src-tauri/src/main.rs
  • apps/desktop/src/App.localSelectionFailureVisibility.test.tsx
  • apps/desktop/src/App.test.tsx
  • apps/desktop/src/App.tsx
  • apps/desktop/src/features/workspace/WorkspaceStates.test.tsx
  • apps/desktop/src/features/workspace/WorkspaceStates.tsx
  • apps/desktop/src/lib/analysis.nativeContract.test.ts
  • apps/desktop/src/lib/analysis.selection.test.ts
  • apps/desktop/src/lib/analysis.ts
  • apps/desktop/src/locales/en/common.json
  • apps/desktop/src/locales/ko/common.json
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/local-selection-failure-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[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.

# Conflicts:
#	AGENTS.md
#	CHANGELOG.md
@seonghobae

Copy link
Copy Markdown
Collaborator Author

Merged current develop into this branch: resolved shared-file conflicts by including both this feature's local-selection failure next action and the newly landed #957 playable-range work (AGENTS/CHANGELOG unioned). No behavior dropped.

@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/locales/en/common.json
… copy

A failed local pick while the Score view was active never rendered
the recovery ErrorState (renderWorkspaceState is skipped for score)
and the header chip was gone, so the failure was fully silent.
handleChooseLocalAudio now returns to the workspace before setting
the local selection error.

WorkspaceStates test now drives copy from the en locale instead of
divergent hardcoded literals, so shipped guidance strings are what
get verified.

Evidence: App.test 74/74 incl. new Score-view failure path,
WorkspaceStates 5/5.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: ui-ux Frontend, interaction, design, or user experience priority: medium Normal-priority or P2 work status: needs-review Open pull request requiring current-head review or checks type: feature New or expanded product capability

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant