From a7eee2a7a7754656a79b07180fdc620d14956683 Mon Sep 17 00:00:00 2001 From: Teknium <127238744+teknium1@users.noreply.github.com> Date: Tue, 25 Aug 2026 23:13:50 -0700 Subject: [PATCH] fix(desktop): pin the complete macOS usage-description set + add reminders entitlement MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Batch follow-ups on top of the salvaged privacy declarations: - tests-js/desktop-mac-usage-descriptions.test.ts: EXPECTED_USAGE_DESCRIPTIONS now pins the FINAL key set (camera + calendar x2 + reminders x2 + screen capture + local network) so the drift-protection assertion locks the whole batch as permanent regression coverage. - entitlements.mac.plist: add com.apple.security.personal-information.reminders alongside the calendars entitlement #65220 added — the reminders usage descriptions need the matching entitlement under hardened runtime (sibling site the original PR missed). --- apps/desktop/electron/entitlements.mac.plist | 2 + .../desktop-mac-usage-descriptions.test.ts | 37 +++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/apps/desktop/electron/entitlements.mac.plist b/apps/desktop/electron/entitlements.mac.plist index 17587c6d1d..1ca1e6631d 100644 --- a/apps/desktop/electron/entitlements.mac.plist +++ b/apps/desktop/electron/entitlements.mac.plist @@ -14,5 +14,7 @@ com.apple.security.personal-information.calendars + com.apple.security.personal-information.reminders + diff --git a/tests-js/desktop-mac-usage-descriptions.test.ts b/tests-js/desktop-mac-usage-descriptions.test.ts index 88af6e2bad..d34d6a34fa 100644 --- a/tests-js/desktop-mac-usage-descriptions.test.ts +++ b/tests-js/desktop-mac-usage-descriptions.test.ts @@ -107,6 +107,11 @@ const EXPECTED_USAGE_DESCRIPTIONS: UsageDescriptionRow[] = [ requiredSubstring: 'audio', reason: 'Audio capture backs the voice conversation pipeline.' }, + { + key: 'NSCameraUsageDescription', + requiredSubstring: 'camera', + reason: 'Camera access is requested by plugins/features the user enables.' + }, { key: 'NSAppleMusicUsageDescription', requiredSubstring: 'Music', @@ -115,6 +120,38 @@ const EXPECTED_USAGE_DESCRIPTIONS: UsageDescriptionRow[] = [ 'surface a misleading Apple Music permission prompt ' + '(kTCCServiceMediaLibrary) when the renderer initializes audio for ' + 'completion chimes, TTS, or voice.' + }, + { + key: 'NSCalendarsUsageDescription', + requiredSubstring: 'Calendar', + reason: 'Calendar access backs meeting and scheduling support (#64571).' + }, + { + key: 'NSCalendarsFullAccessUsageDescription', + requiredSubstring: 'Calendar', + reason: 'macOS 14+ full-access variant of the calendar declaration.' + }, + { + key: 'NSRemindersUsageDescription', + requiredSubstring: 'Reminders', + reason: 'Reminders access backs personal-assistant scheduling (#64571).' + }, + { + key: 'NSRemindersFullAccessUsageDescription', + requiredSubstring: 'Reminders', + reason: 'macOS 14+ full-access variant of the reminders declaration.' + }, + { + key: 'NSScreenCaptureUsageDescription', + requiredSubstring: 'screen', + reason: 'macOS 15+ periodic screen-recording re-prompts show this copy.' + }, + { + key: 'NSLocalNetworkUsageDescription', + requiredSubstring: 'local network', + reason: + 'macOS 15+ Local Network Privacy silently denies undeclared apps ' + + '(#81563); declaration is required for the prompt to appear at all.' } ]