feat(i18n): localize Workspace controls and harden interpolation - #744
feat(i18n): localize Workspace controls and harden interpolation#744seonghobae wants to merge 27 commits into
Conversation
|
👋 Jules, reporting for duty! I'm here to lend a hand with this pull request. When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down. I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job! For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with New to Jules? Learn more at jules.google/docs. For security, I will only act on instructions from the user who triggered this task. |
📝 WalkthroughWalkthroughWorkspace의 내보내기, 스템, 반복, 솔로, 음소거, 전사 컨트롤을 번역 키로 변경했습니다. ChangesWorkspace localization
Estimated code review effort: 3 (Moderate) | ~20 minutes 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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. Comment |
… 적용\n- security audit fail(undici vulnerability) 패키지 업데이트
There was a problem hiding this comment.
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
successwith required evidence or explicit no-source not-applicable evidence. -
Regression test: Keep the approval branch checking
needs.coverage-evidence.result == successbefore 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 head160ef9f107325010736c66af5f76f53415b6f4f2. -
Head SHA:
160ef9f107325010736c66af5f76f53415b6f4f2 -
Workflow run: 30863645738
-
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 (6 files)"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Changed file (6 files)"]
R1 --> V1["required checks"]
OpenCode Review Overview
Pull request overviewOpenCode cannot approve yet because required coverage evidence did not pass. Review outcome1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence
Coverage evidenceCoverage evidence job did not run or did not publish coverage evidence. Changed-File Evidence Mapflowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Changed file (7 files)"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Changed file (7 files)"]
R1 --> V1["required checks"]
|
There was a problem hiding this comment.
Actionable comments posted: 4
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@apps/desktop/src/features/workspace/Workspace.test.tsx`:
- Line 99: Set the test locale to English at the start of the relevant Workspace
test before querying accessible names. Update the transcribeBass and
transcribePart assertions to use their English labels, or consistently derive
the expected labels from the configured locale.
In `@apps/desktop/src/features/workspace/Workspace.tsx`:
- Around line 397-405: Update the non-Bass unavailable transcription Button to
use t("transcribePart") instead of the hardcoded t("transcribeBass"). Add an
aria-label that communicates the current role name and transcription-coming-soon
status, matching the existing title context and fallback role behavior.
In `@apps/desktop/src/i18n/index.test.ts`:
- Around line 80-87: Update the “replaces every occurrence of a named
placeholder” test to use a translation string containing {roleName} multiple
times, then assert that every occurrence is replaced without recursively
replacing placeholder text inside the value. Alternatively, rename the test to
reflect single-occurrence interpolation if repeated-placeholder behavior is not
being tested.
In `@apps/desktop/src/locales/en/common.json`:
- Around line 157-161: Update the soon-status locale entries playStemSoon,
loopSectionSoon, and soloMuteOthersSoon to use complete, natural English
sentences that clearly state the feature is coming soon, such as adding “is”
before “coming soon.” Keep the non-soon labels unchanged.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 1af43685-2a86-421a-9e33-211bc617e294
📒 Files selected for processing (6)
apps/desktop/src/features/workspace/Workspace.test.tsxapps/desktop/src/features/workspace/Workspace.tsxapps/desktop/src/i18n/index.test.tsapps/desktop/src/i18n/index.tsapps/desktop/src/locales/en/common.jsonapps/desktop/src/locales/ko/common.json
fad3107 to
87b3455
Compare
Pull request was converted to draft
Dismissed because this review evaluated an obsolete head and failed solely on the superseded central coverage environment. The current head has successful repository CI/security/build evidence; a fresh independent current-head approval remains required before merge.
Acknowledged and addressed. I have restored |
- PR 코멘트 요청에 따라 package-lock.json 파일을 develop 브랜치의 원본 상태로 복구하여, 중첩 워크스페이스 드리프트(nested workspace drift)와 Undici 버전 업데이트를 제거했습니다. 해당 의존성 업데이트는 별도의 이슈 및 중앙 리뷰에서 다뤄질 예정입니다. - CHANGELOG.md에서 Undici 관련 항목을 삭제하고, 사용자 대상인 i18n 업데이트 항목은 유지했습니다.
There was a problem hiding this comment.
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
successwith required evidence or explicit no-source not-applicable evidence. -
Regression test: Keep the approval branch checking
needs.coverage-evidence.result == successbefore 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 head1c16b5cc851cd64fd33c3a36fab026176ccbdd13. -
Head SHA:
1c16b5cc851cd64fd33c3a36fab026176ccbdd13 -
Workflow run: 31159757545
-
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 (7 files)"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Changed file (7 files)"]
R1 --> V1["required checks"]
- GitHub Actions (Trivy fs, npm audit) 실행 중 발견된 심각도 높음(High) 보안 취약점(CVE-2026-16633)을 해결하기 위해 pdfjs-dist 패키지를 6.2.108 버전으로 업데이트했습니다. - package-lock.json 파일 내에서 버전을 명시적으로 재설정하여 의존성 충돌을 방지했습니다.
There was a problem hiding this comment.
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
successwith required evidence or explicit no-source not-applicable evidence. -
Regression test: Keep the approval branch checking
needs.coverage-evidence.result == successbefore 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 head4c09b5389c186181e6d9bae93ac4ae7485a3e365. -
Head SHA:
4c09b5389c186181e6d9bae93ac4ae7485a3e365 -
Workflow run: 31183546541
-
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 (8 files)"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Changed file (8 files)"]
R1 --> V1["required checks"]
There was a problem hiding this comment.
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
successwith required evidence or explicit no-source not-applicable evidence. -
Regression test: Keep the approval branch checking
needs.coverage-evidence.result == successbefore 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 head7ab1ea1d8e41ad789448d4ad498d94619960ab45. -
Head SHA:
7ab1ea1d8e41ad789448d4ad498d94619960ab45 -
Workflow run: 31547785167
-
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 (9 files)"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Changed file (9 files)"]
R1 --> V1["required checks"]
This reverts the changes as they are superseded by #744.
|
@opencode-agent Please re-review exact current head |
|
@opencode-agent address Operate only if the live head is exactly The final base-to-head paths should be exactly |
Acknowledged. |
Acknowledged. |
|
@opencode-agent Re-evaluate exact current head |
There was a problem hiding this comment.
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
successwith required evidence or explicit no-source not-applicable evidence. -
Regression test: Keep the approval branch checking
needs.coverage-evidence.result == successbefore 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 head779b53520d7d593138660fa526f0fa5e955e17ca. -
Head SHA:
779b53520d7d593138660fa526f0fa5e955e17ca -
Workflow run: 31843904913
-
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 (7 files)"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Changed file (7 files)"]
R1 --> V1["required checks"]
What
Localize the buyer-facing Workspace export, stem-player, loop, solo, mute, and transcription controls in English and Korean.
The change also:
$&, brackets, and regex metacharacters.Product outcome
English and Korean users receive consistent labels, tooltips, and accessible names across the primary rehearsal controls. Dynamic role copy is rendered safely and predictably, and replacement text is treated as data even when it looks like another translation placeholder.
Exact current scope
Current head:
01bcc65baba6200d67bf040b2bb9e742c661680c.Protected base:
develop@acdbea6344fe1231c39535b575f4de35e4c607c9.Exactly seven files differ from protected
develop: CHANGELOG, Workspace implementation/tests, translator implementation/tests, and the English/Korean locale dictionaries. Unrelatedpdfjs-dist, Undici, and root lock drift is not part of this branch; the coordinated JavaScript dependency/security baseline remains owned by #783.Test-first interpolation repair
While rotating this PR against its exact current code, the existing interpolation regression was found to cover only a replacement value containing its own placeholder token. The implementation still iterated variables sequentially, so a value inserted for an earlier variable could be reinterpreted when it looked like a different variable processed later.
93e9719b838824ad5d92058f90cb4a1db502f3d2adds a real cross-variable regression:roleName="{sectionLabel}"must remain literal while the template's original{sectionLabel}is replaced withBridge.66d170ca5afeb29edf5635ae409083834cf8be00changes interpolation to one template pass with a fixed placeholder grammar. Replacement values are returned literally and are never scanned again; the pattern is constant and never constructed from caller-controlled variable names.01bcc65baba6200d67bf040b2bb9e742c661680cscopes CHANGELOG to this i18n slice while preserving the protected-base release history and removing an unrelated Undici remediation claim from this dependency-neutral PR.Exact-head repository verification
For exact head
01bcc65baba6200d67bf040b2bb9e742c661680c, repositoryci,build-baseline,release,sbom,SAST Semgrep,bandit, andsecret-scan-gateare terminal-success.security-auditrun31881429381, job95004468272, fails specifically atnpm audit --workspaces --audit-level=high. The exact job log reports the protected-base high-severity findingsnanoid <3.3.18,pdfjs-dist >=5.6.83 <6.2.108, andundici 7.0.0-7.28.0; Python and Rust audit steps are skipped only because the npm gate fails first. This PR has no dependency or lockfile delta.Aggregate
Security Scanrun31881429388confirms the same ownership boundary: Scorecard, OSV base-vs-head comparison, and dependency-review succeed; onlytrivy-fsfails. Its exact job log reports one high finding,CVE-2026-16633on protected-basepdfjs-distatpackage-lock.json:6370, and instructs remediation at the shared base. These are inherited protected-base failures owned by canonical #783, not branch-introduced i18n findings. They are not suppressed or copied into this PR.Central review gate
The predecessor OpenCode review failed before executing this PR's test suite because central coverage evidence could not materialize base Python locks (
trusted uv archive download failed: HTTPError). The bounded prerequisite remainsContextualWisdomLab/.github#1008, at exact headc34b367d0926af0f14a9186b0e8dd64dbeb06077. Its current visible repository and central workflow contexts are terminal-success and its temporary repair workflow is gone, but the PR has not reached protected centralmain: no qualifying independent non-author formal approval is present and GitHub still reports the PR blocked. Visible prerequisite checks on the unmerged central head therefore do not constitute protected integration.Do not redispatch reviewer agents for unchanged BandScope head
01bcc65b...until #1008 actually reaches protected centralmain; otherwise the same prerequisite boundary would be recreated instead of producing qualifying exact-head evidence. There is no qualifying independent non-author approval on this exact head.Security Notes
Attack surface and trust boundary
Locale templates and dynamic labels are treated as data. Placeholder names and replacement values can contain punctuation, brace-like text, or replacement-language metacharacters and must never become caller-shaped executable regular expressions or recursively interpreted template content.
Mitigations and test points
Interpolation performs one pass over the original locale template using a fixed placeholder grammar. Caller-controlled variable names are not compiled into regular expressions, and inserted values are never scanned again. Regression tests cover repeated placeholders, cross-variable placeholder-looking values,
$&, brackets, and regex metacharacters. Existing React rendering remains the HTML-escaping boundary.Dependency and supply-chain impact
None.
apps/desktop/package.jsonand rootpackage-lock.jsonremain aligned with protecteddevelop; #783 owns the independent dependency-security baseline.Privacy and i18n
No new PII persistence or telemetry is introduced. English and Korean dictionaries are updated together and the no-role fallback is localized rather than leaking an implementation key or unlocalized English string.
Rollback
Revert this bounded i18n/interpolation slice without changing the dependency baseline.
Merge gate
developdevelop.github#1008reaches protected centralmainQueued, skipped-required, failed inherited-base or central-infrastructure evidence, prior-head evidence, author/self approval, or administrative bypass is not success.