Skip to content

Declare speech recognition usage description#4992

Open
christophsturm wants to merge 4 commits into
manaflow-ai:mainfrom
christophsturm:fix/speech-recognition-usage-description
Open

Declare speech recognition usage description#4992
christophsturm wants to merge 4 commits into
manaflow-ai:mainfrom
christophsturm:fix/speech-recognition-usage-description

Conversation

@christophsturm
Copy link
Copy Markdown

@christophsturm christophsturm commented May 29, 2026

Summary

  • What changed?
    add NSSpeechRecognitionUsageDescription
  • Why?
    command line apps that use speech recognition did not work with cmux

Testing

  • How did you test this change?
    i have a test suite that uses speech recognition in its e2e test that works on ghostty and did not work on cmux and with this change it works
    i also added a test case
  • What did you verify manually?
    verified manually that my test suite now works with cmux

Checklist

  • I tested the change locally
  • I added or updated tests for behavior changes
  • I updated docs/changelog if needed
  • I requested bot reviews after my latest commit (copy/paste block above or equivalent)
  • All code review bot comments are resolved
  • All human review comments are resolved

note there are already 2 prs that would also fix this but none of them has test coverage and it did not look like they were going to be merged soon.


View with Codesmith Autofix with Codesmith
Need help on this PR? Tag @codesmith with what you need. Autofix is disabled.


Summary by cubic

Added NSSpeechRecognitionUsageDescription to the app bundle so programs using speech recognition work under cmux and show the correct macOS permission prompt.

  • Bug Fixes
    • Localized the prompt in InfoPlist.xcstrings.
    • Added PrivacyUsageDescriptionBundleTests; made it locale-independent by reading the unlocalized Info.plist; normalized the test project indentation.

Written for commit bd1223e. Summary will update on new commits.

Review in cubic

Summary by CodeRabbit

  • New Features

    • Added a speech recognition privacy usage description with localized permission text to inform users when speech recognition is requested.
  • Tests

    • Added an automated test to verify the app bundle includes the speech recognition permission text and that it’s accessible at runtime.

@vercel
Copy link
Copy Markdown

vercel Bot commented May 29, 2026

@christophsturm is attempting to deploy a commit to the Manaflow Team on Vercel.

A member of the Team first needs to authorize it.

@christophsturm
Copy link
Copy Markdown
Author

@codex review
@coderabbitai review
@greptile-apps review
@cubic-dev-ai review

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 29, 2026

Review Change Stack

📝 Walkthrough

Walkthrough

The PR declares NSSpeechRecognitionUsageDescription in Info.plist and localized strings, adds a UI test source to the Xcode project, and implements a bundle test that asserts the speech recognition usage string is present in the app bundle.

Changes

Speech Recognition Permission Declaration and Validation

Layer / File(s) Summary
Permission declarations in plist and localization
Resources/Info.plist, Resources/InfoPlist.xcstrings
Adds NSSpeechRecognitionUsageDescription key to Info.plist and registers the corresponding localized string entry (extractionState: "manual") with multiple localizations.
Test project configuration
cmux.xcodeproj/project.pbxproj
Adds PrivacyUsageDescriptionBundleTests.swift to the project: PBXBuildFile, PBXFileReference, inclusion in the test group, and addition to cmuxTests PBXSourcesBuildPhase.
Permission bundle validation test
cmuxTests/PrivacyUsageDescriptionBundleTests.swift
Adds a test file with a conditional @testable import and a @MainActor test that reads NSSpeechRecognitionUsageDescription from the app bundle and asserts it equals the expected message.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

🐰 I nibble keys beneath the tree,
A tiny string for speech to be,
In many tongues the message sings,
A bundle test confirms these things,
Hop — the permission grows with glee!

🚥 Pre-merge checks | ✅ 17 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (17 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and specifically describes the main change: adding the speech recognition usage description to the app bundle.
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.
Cmux Swift Actor Isolation ✅ Passed PR introduces only test code; no production Swift changes. Test file uses @MainActor intentionally, which is allowed per review rules.
Cmux Swift Blocking Runtime ✅ Passed No blocking synchronization primitives detected. New test file uses only synchronous Bundle queries and assertions with no semaphores, locks, sleeps, or other blocking mechanisms.
Cmux No Hacky Sleeps ✅ Passed PR adds only Swift test code and configuration files; no TypeScript, JavaScript, shell, or non-Swift build scripts. Test has no sleep, timer, or delay mechanisms. Out of scope for this rule.
Cmux Algorithmic Complexity ✅ Passed PR adds only test scaffolding, static configuration, and localization strings with no production code changes. Test file is explicitly excluded per algorithmic complexity rules.
Cmux Swift Concurrency ✅ Passed Test uses Swift Testing framework with @MainActor annotation; no legacy Dispatch queues, Combine, completion handlers, or fire-and-forget Tasks present.
Cmux Swift @Concurrent ✅ Passed New test file contains only synchronous code with @MainActor. No async functions, @concurrent annotations, or concurrent isolation violations per swift-concurrent-annotation.md rules.
Cmux Swift File And Package Boundaries ✅ Passed PR adds only a 21-line test file (PrivacyUsageDescriptionBundleTests.swift) with single responsibility; no production Swift files modified. Test code is explicitly allowed per the boundaries rules.
Cmux Swift Logging ✅ Passed PR adds only a test file with no logging statements and modifies plist/xcstrings files; tests are explicitly allowed under swift-logging.md rules.
Cmux User-Facing Error Privacy ✅ Passed Adds macOS permission prompt text for speech recognition with no sensitive information, credentials, or implementation details exposed. Complies with privacy rules.
Cmux Full Internationalization ✅ Passed NSSpeechRecognitionUsageDescription added to Info.plist with full localization coverage (18 locales) in InfoPlist.xcstrings matching existing catalog support; test assertions properly exempted.
Cmux Swiftui State Layout ✅ Passed PR adds speech recognition privacy description and a unit test; contains no SwiftUI code or state patterns, so SwiftUI state layout rules do not apply.
Cmux Architecture Rethink ✅ Passed PR adds permission metadata and a test assertion only; no timing/blocking, state, observers, or architectural issues—conforms to allowed cases for small correctness fixes and test-only code.
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed PR adds only a test fixture for bundle verification and privacy description metadata; no NSWindow, NSPanel, NSWindowController, or SwiftUI Window/WindowGroup code is introduced or modified.
Description check ✅ Passed The PR description covers the core requirements (what changed, why, testing approach, and a checklist) but lacks the optional demo video section and has incomplete reasoning in some areas.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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 and usage tips.

@chatgpt-codex-connector
Copy link
Copy Markdown

To use Codex here, create a Codex account and connect to github.

@cubic-dev-ai
Copy link
Copy Markdown

cubic-dev-ai Bot commented May 29, 2026

@codex review
@coderabbitai review
@greptile-apps review
@cubic-dev-ai review

@christophsturm I have started the AI code review. It will take a few minutes to complete.

@chatgpt-codex-connector
Copy link
Copy Markdown

To use Codex here, create a Codex account and connect to github.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 29, 2026

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Get PR details and files changed
gh pr view 4992 --repo manaflow-ai/cmux --json title,body,files,headRefName,baseRefName

echo "---FILES CHANGED---"
gh pr diff 4992 --repo manaflow-ai/cmux

Length of output: 10171



@christophsturm: I've reviewed the changes. This is a clean, well-targeted fix with proper test coverage. Here are my observations:


✅ Positives

  • Correct placement of the new key in Info.plist (between NSMicrophoneUsageDescription and NSCameraUsageDescription, following the existing pattern).
  • InfoPlist.xcstrings is updated with the English localization, consistent with the extractionState: "manual" pattern used elsewhere.
  • The new test PrivacyUsageDescriptionBundleTests is a solid addition — it validates the key is actually present in the app bundle at runtime, not just in source.
  • The #if canImport import guard pattern is consistent with other test files.

⚠️ Minor Issues

1. Indentation in cmux.xcodeproj/project.pbxproj (Sources build phase)

The new entry has fewer leading tabs than the surrounding lines:

 				F4100000A1B2C3D4E5F60718 /* PortScannerTests.swift in Sources */,
+			C0DEF5000000000000000001 /* PrivacyUsageDescriptionBundleTests.swift in Sources */,
 			C47110010000000000000001 /* ProcessPipeReadCrashRegressionTests.swift in Sources */,

It's missing one level of indentation compared to the surrounding entries. Functionally harmless (Xcode will reformat on next save), but worth fixing for a clean diff.

2. Message phrasing consistency

Other usage descriptions follow the pattern "… would like to use your <device>.":

  • NSMicrophoneUsageDescription"… would like to use your microphone."
  • NSCameraUsageDescription"… would like to use your camera."

The new string is "… would like to use speech recognition." — omitting "your". Since speech recognition is a service rather than hardware, this is perfectly acceptable, but if the project wants strict consistency, it could be phrased as "… would like to use your device's speech recognition." or similar.


📋 Checklist Note

The changelog/docs checkbox is unchecked. Given that this is a bug fix enabling a previously broken OS capability, it may be worth a brief entry in the changelog.


Overall the change is correct and well-structured. The indentation nit in the pbxproj is the only thing worth addressing before merge.

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented May 29, 2026

Greptile Summary

This PR adds NSSpeechRecognitionUsageDescription to the app bundle so programs using speech recognition work within cmux and trigger the correct macOS permission dialog.

  • Declares the key in the base Info.plist and provides fully-localized strings across all 18 supported locales in InfoPlist.xcstrings (en, ja, zh-Hans, zh-Hant, ko, de, es, fr, it, da, pl, ru, bs, ar, nb, pt-BR, th, tr).
  • Adds PrivacyUsageDescriptionBundleTests which reads infoDictionary directly (locale-independent) to assert the key is present in the app bundle at runtime.

Confidence Score: 5/5

Safe to merge — the change is a minimal Info.plist addition with full localization coverage and a targeted regression test.

The change correctly declares NSSpeechRecognitionUsageDescription in both the base Info.plist and the xcstrings catalog, covers all 18 locales already present in the catalog, and the author manually verified the fix end-to-end. The accompanying test is locale-independent and checks the bundle at runtime. No production logic is modified.

No files require special attention.

Important Files Changed

Filename Overview
Resources/Info.plist Adds NSSpeechRecognitionUsageDescription key with English base string alongside the existing microphone/camera entries.
Resources/InfoPlist.xcstrings Adds NSSpeechRecognitionUsageDescription with translations for all 18 locales already present in the catalog (en, ja, zh-Hans, zh-Hant, ko, de, es, fr, it, da, pl, ru, bs, ar, nb, pt-BR, th, tr), addressing the i18n completeness requirement.
cmux.xcodeproj/project.pbxproj Registers PrivacyUsageDescriptionBundleTests.swift in the test target. The new Sources build-phase entry has correct indentation matching its neighbors above; a pre-existing misindentation on the following line (C47110010…) was present before this PR.
cmuxTests/PrivacyUsageDescriptionBundleTests.swift New test that reads infoDictionary directly (locale-independent) to assert the speech recognition usage description key is declared in the app bundle.

Sequence Diagram

sequenceDiagram
    participant App as CLI App (in cmux)
    participant OS as macOS Privacy Framework
    participant Bundle as cmux App Bundle

    App->>OS: Request speech recognition
    OS->>Bundle: Read NSSpeechRecognitionUsageDescription
    Bundle-->>OS: Localized usage string (from InfoPlist.xcstrings)
    OS-->>App: Show permission dialog with usage description
    App-->>App: Speech recognition authorized
Loading

Reviews (8): Last reviewed commit: "Normalize privacy usage test project ind..." | Re-trigger Greptile

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented May 29, 2026

Greptile Summary

This PR declares NSSpeechRecognitionUsageDescription in Info.plist and InfoPlist.xcstrings so that command-line apps running inside cmux can request speech-recognition access without the permission prompt silently failing. A new bundle test verifies the key is present at runtime.

  • Resources/Info.plist and InfoPlist.xcstrings — adds the NSSpeechRecognitionUsageDescription key; the xcstrings entry currently carries only an English translation, while 17 other locales (ja, zh-Hans, zh-Hant, ko, de, es, fr, it, da, pl, ru, bs, ar, nb, pt-BR, th, tr) are already supported by the catalog and must be covered.
  • cmuxTests/PrivacyUsageDescriptionBundleTests.swift — new test that asserts the key and its English value are present in the app bundle's Info dictionary.
  • cmux.xcodeproj/project.pbxproj — registers the new test file with a minor indentation inconsistency in the Sources build phase entry.

Confidence Score: 3/5

The core fix is correct and necessary, but the new xcstrings entry is incomplete — all 17 non-English locales the catalog already supports are absent, so non-English users will see a raw English permission prompt.

The NSSpeechRecognitionUsageDescription key is correctly wired into Info.plist and verified by the new test. The gap is that InfoPlist.xcstrings only carries an English translation while every other usage-description key in the same catalog has up to 17 additional locale entries; shipping without those translations means a degraded permission experience for a large portion of users until the gap is filled.

Resources/InfoPlist.xcstrings needs translated entries for all locales already present in the catalog (ja, zh-Hans, zh-Hant, ko, de, es, fr, it, da, pl, ru, bs, ar, nb, pt-BR, th, tr).

Important Files Changed

Filename Overview
Resources/InfoPlist.xcstrings Adds NSSpeechRecognitionUsageDescription but only with an English locale, missing the 17 other locales (ja, zh-Hans, zh-Hant, ko, de, es, fr, it, da, pl, ru, bs, ar, nb, pt-BR, th, tr) that are present for NSMicrophoneUsageDescription and other catalog entries.
Resources/Info.plist Adds the NSSpeechRecognitionUsageDescription key with an English default string, consistent with how other usage description keys are declared in this file.
cmuxTests/PrivacyUsageDescriptionBundleTests.swift New test that verifies NSSpeechRecognitionUsageDescription is present in the app bundle's Info dictionary; straightforward XCTest with no issues.
cmux.xcodeproj/project.pbxproj Registers the new test file; one Sources entry has a minor indentation inconsistency (four tabs instead of five).

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[App in cmux requests speech recognition] --> B{NSSpeechRecognitionUsageDescription present in bundle?}
    B -- No --> C[macOS silently denies permission]
    B -- Yes --> D[macOS shows permission prompt]
    D --> E{System locale?}
    E -- English --> F[Shows English string ✓]
    E -- ja / zh / de / es / fr / ko / other 17 locales --> G[Falls back to English string ⚠ missing translations]
Loading

Reviews (1): Last reviewed commit: "Declare speech recognition usage descrip..." | Re-trigger Greptile

Comment on lines +152 to +162
"NSSpeechRecognitionUsageDescription": {
"extractionState": "manual",
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "A program running within cmux would like to use speech recognition."
}
}
}
},
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Missing translations for all supported locales

The new NSSpeechRecognitionUsageDescription entry is only provided in English, but the catalog already carries translations for NSMicrophoneUsageDescription (the most structurally similar key) in ja, zh-Hans, zh-Hant, ko, de, es, fr, it, da, pl, ru, bs, ar, nb, pt-BR, th, and tr. Users running cmux on a device set to any of those locales will see the raw key or the English fallback instead of a translated permission prompt — which on macOS Ventura+ typically surfaces as an untranslated string in the system privacy dialog. The same applies to NSBluetoothAlwaysUsageDescription (ja) and NSCameraUsageDescription (ja), so at minimum a Japanese translation is required to match the baseline set by every other key in this file.

Rule Used: Flag production user-facing text that is not fully... (source)

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Comment thread cmux.xcodeproj/project.pbxproj Outdated
B3575000000000000000000A /* PiVaultAgentPersistenceTests.swift in Sources */,
D0B10008A1B2C3D4E5F60001 /* PortalTabDragRoutingTests.swift in Sources */,
F4100000A1B2C3D4E5F60718 /* PortScannerTests.swift in Sources */,
C0DEF5000000000000000001 /* PrivacyUsageDescriptionBundleTests.swift in Sources */,
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 This line has one fewer level of indentation than its neighbours in the Sources build phase list, which will cause Xcode to regenerate the project file and produce noisy diffs on the next project save.

Suggested change
C0DEF5000000000000000001 /* PrivacyUsageDescriptionBundleTests.swift in Sources */,
C0DEF5000000000000000001 /* PrivacyUsageDescriptionBundleTests.swift in Sources */,

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented May 29, 2026

Greptile Summary

This PR adds NSSpeechRecognitionUsageDescription to the app's Info.plist and string catalog so that command-line programs running inside cmux can request speech recognition access without being silently blocked by macOS. A new unit test verifies the key is present in the built bundle.

  • Resources/Info.plist and Resources/InfoPlist.xcstrings gain the new privacy usage description; the xcstrings entry is missing translations for the 17 non-English locales already supported by the catalog (e.g., ja, zh-Hans, ko, de, fr, and 12 others).
  • cmuxTests/PrivacyUsageDescriptionBundleTests.swift adds a focused test asserting the key exists in the app bundle at runtime, wired into the test target via cmux.xcodeproj/project.pbxproj.

Confidence Score: 4/5

The core fix — declaring the plist key — is correct and unblocks speech recognition for CLI programs running inside cmux. The string catalog entry needs translations for the 17 non-English locales the app already ships.

The plist and test changes are straightforward and correct. The only gap is that InfoPlist.xcstrings only includes an English translation, while comparable entries like NSMicrophoneUsageDescription carry 18 locales. Every non-English user who encounters a speech-recognition permission prompt will see the English string instead of a localized one.

Resources/InfoPlist.xcstrings — needs translations added for ja, zh-Hans, zh-Hant, ko, de, es, fr, it, da, pl, ru, bs, ar, nb, pt-BR, th, and tr.

Important Files Changed

Filename Overview
Resources/Info.plist Adds NSSpeechRecognitionUsageDescription key with the standard cmux privacy description string — correct placement alongside the microphone key.
Resources/InfoPlist.xcstrings Adds NSSpeechRecognitionUsageDescription string but only for the en locale; the catalog already carries 17 additional locales for comparable entries such as NSMicrophoneUsageDescription, leaving non-English users with a missing or English-fallback permission prompt.
cmux.xcodeproj/project.pbxproj Registers the new PrivacyUsageDescriptionBundleTests.swift source file in the test target; correctly wired in both the file references and Sources build phase.
cmuxTests/PrivacyUsageDescriptionBundleTests.swift New unit test that asserts NSSpeechRecognitionUsageDescription is present in the app bundle Info dictionary; straightforward and correctly uses Bundle(for:) to locate the built app bundle.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[CLI program inside cmux\nrequests speech recognition] --> B{NSSpeechRecognitionUsageDescription\npresent in Info.plist?}
    B -- No --> C[macOS silently denies access\nor crashes]
    B -- Yes --> D[macOS shows permission dialog\nwith usage description string]
    D --> E{User locale}
    E -- en --> F[Translated string shown ✓]
    E -- ja / zh / ko / de / fr\n/ es / it / da / pl / ru\n/ bs / ar / nb / pt-BR\n/ th / tr --> G[Fallback to English string\nor missing — needs translation]
Loading

Comments Outside Diff (1)

  1. Resources/InfoPlist.xcstrings, line 152-162 (link)

    Missing translations for all supported locales

    The new NSSpeechRecognitionUsageDescription entry only includes en, but the catalog already carries 18 locales for comparable entries. NSMicrophoneUsageDescription has translations in ja, zh-Hans, zh-Hant, ko, de, es, fr, it, da, pl, ru, bs, ar, nb, pt-BR, th, and tr. On any of those locales macOS will fall back to the raw key or show the English string rather than a localized permission prompt, which is a broken user experience for every non-English user who is asked for speech recognition access.

    Rule Used: Flag production user-facing text that is not fully... (source)

    Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Reviews (1): Last reviewed commit: "Declare speech recognition usage descrip..." | Re-trigger Greptile

Comment on lines +152 to +162
"NSSpeechRecognitionUsageDescription": {
"extractionState": "manual",
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "A program running within cmux would like to use speech recognition."
}
}
}
},
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Missing translations for all supported locales

The new NSSpeechRecognitionUsageDescription entry is only translated into English, but the catalog already carries 17 other locales for comparable keys like NSMicrophoneUsageDescription: ja, zh-Hans, zh-Hant, ko, de, es, fr, it, da, pl, ru, bs, ar, nb, pt-BR, th, tr. Users running cmux under any of those system languages will be shown the English fallback instead of a localized permission prompt. Per the full-internationalization rule, every locale already present in the touched catalog must be covered by a new entry.

Rule Used: Flag production user-facing text that is not fully... (source)

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Comment thread cmux.xcodeproj/project.pbxproj Outdated
B3575000000000000000000A /* PiVaultAgentPersistenceTests.swift in Sources */,
D0B10008A1B2C3D4E5F60001 /* PortalTabDragRoutingTests.swift in Sources */,
F4100000A1B2C3D4E5F60718 /* PortScannerTests.swift in Sources */,
C0DEF5000000000000000001 /* PrivacyUsageDescriptionBundleTests.swift in Sources */,
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 The new Sources entry is indented with one fewer tab than every surrounding line, breaking the consistent five-tab indent level used throughout this section of the project file.

Suggested change
C0DEF5000000000000000001 /* PrivacyUsageDescriptionBundleTests.swift in Sources */,
C0DEF5000000000000000001 /* PrivacyUsageDescriptionBundleTests.swift in Sources */,

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 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 `@Resources/InfoPlist.xcstrings`:
- Around line 152-162: The new InfoPlist localization key
NSSpeechRecognitionUsageDescription currently only has an English entry; add
fully translated entries for every locale already present in this localization
catalog (i.e., mirror the set of locale keys used elsewhere in this
Resources/*.xcstrings catalog), not placeholders or en fallbacks. For each
locale add the same structure as the "en" block (include "stringUnit" with
"state": "translated" and a proper translated "value") so the key is present and
marked translated for all supported locales; ensure the key name
NSSpeechRecognitionUsageDescription matches exactly across entries.
🪄 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: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 2d47f4e6-1cd5-479d-875d-756789b2e73e

📥 Commits

Reviewing files that changed from the base of the PR and between 2311bec and c24195c.

📒 Files selected for processing (4)
  • Resources/Info.plist
  • Resources/InfoPlist.xcstrings
  • cmux.xcodeproj/project.pbxproj
  • cmuxTests/PrivacyUsageDescriptionBundleTests.swift

Comment on lines +152 to +162
"NSSpeechRecognitionUsageDescription": {
"extractionState": "manual",
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "A program running within cmux would like to use speech recognition."
}
}
}
},
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | 🏗️ Heavy lift

Add full locale coverage for the new usage-description key.

NSSpeechRecognitionUsageDescription is added with only en, but this catalog/project already supports multiple locales. Please add translated entries for each existing locale in this catalog (not placeholders or copied English fallbacks).

As per coding guidelines, “Every new Swift localization key must be backed by a matching Resources/*.xcstrings entry with translated values for every locale already supported by that catalog.”

🤖 Prompt for 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.

In `@Resources/InfoPlist.xcstrings` around lines 152 - 162, The new InfoPlist
localization key NSSpeechRecognitionUsageDescription currently only has an
English entry; add fully translated entries for every locale already present in
this localization catalog (i.e., mirror the set of locale keys used elsewhere in
this Resources/*.xcstrings catalog), not placeholders or en fallbacks. For each
locale add the same structure as the "en" block (include "stringUnit" with
"state": "translated" and a proper translated "value") so the key is present and
marked translated for all supported locales; ensure the key name
NSSpeechRecognitionUsageDescription matches exactly across entries.

@christophsturm christophsturm force-pushed the fix/speech-recognition-usage-description branch from c24195c to aa4dbba Compare May 31, 2026 13:32
@christophsturm
Copy link
Copy Markdown
Author

https://github.com/coderabbitai review
@greptile-apps review
@cubic-dev-ai review

@cubic-dev-ai
Copy link
Copy Markdown

cubic-dev-ai Bot commented May 31, 2026

https://github.com/coderabbitai review
@greptile-apps review
@cubic-dev-ai review

@christophsturm I have started the AI code review. It will take a few minutes to complete.

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