From 2116f19106f17c339d40ffc6831bb44fcb87ce09 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Wed, 10 Dec 2025 00:47:49 +0100 Subject: [PATCH] fix(mac): keep overlay on token mismatch --- apps/macos/Sources/Clawdis/VoiceWakeOverlay.swift | 11 +++++------ .../Tests/ClawdisIPCTests/VoiceWakeOverlayTests.swift | 6 +++--- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/apps/macos/Sources/Clawdis/VoiceWakeOverlay.swift b/apps/macos/Sources/Clawdis/VoiceWakeOverlay.swift index e96d6060b..363dded66 100644 --- a/apps/macos/Sources/Clawdis/VoiceWakeOverlay.swift +++ b/apps/macos/Sources/Clawdis/VoiceWakeOverlay.swift @@ -262,7 +262,7 @@ final class VoiceWakeOverlayController: ObservableObject { switch Self.evaluateToken(active: self.activeToken, incoming: token) { case .accept: return true - case .dismiss: + case .dropMismatch: self.logger.log( level: .info, """ @@ -270,19 +270,18 @@ final class VoiceWakeOverlayController: ObservableObject { active=\(self.activeToken?.uuidString ?? "nil", privacy: .public) \ got=\(token?.uuidString ?? "nil", privacy: .public) """) - self.dismiss(reason: .explicit, outcome: .empty) return false - case .drop: + case .dropNoActive: self.logger.log(level: .info, "overlay drop \(context, privacy: .public) no_active") return false } } - enum GuardOutcome { case accept, dismiss, drop } + enum GuardOutcome { case accept, dropMismatch, dropNoActive } nonisolated static func evaluateToken(active: UUID?, incoming: UUID?) -> GuardOutcome { - guard let active else { return .drop } - if let incoming, incoming != active { return .dismiss } + guard let active else { return .dropNoActive } + if let incoming, incoming != active { return .dropMismatch } return .accept } diff --git a/apps/macos/Tests/ClawdisIPCTests/VoiceWakeOverlayTests.swift b/apps/macos/Tests/ClawdisIPCTests/VoiceWakeOverlayTests.swift index bbdea1d20..ffcac006d 100644 --- a/apps/macos/Tests/ClawdisIPCTests/VoiceWakeOverlayTests.swift +++ b/apps/macos/Tests/ClawdisIPCTests/VoiceWakeOverlayTests.swift @@ -5,7 +5,7 @@ import Testing @Suite struct VoiceWakeOverlayTests { @Test func guardTokenDropsWhenNoActive() { let outcome = VoiceWakeOverlayController.evaluateToken(active: nil, incoming: UUID()) - #expect(outcome == .drop) + #expect(outcome == .dropNoActive) } @Test func guardTokenAcceptsMatching() { @@ -14,8 +14,8 @@ import Testing #expect(outcome == .accept) } - @Test func guardTokenDismissesMismatch() { + @Test func guardTokenDropsMismatchWithoutDismissing() { let outcome = VoiceWakeOverlayController.evaluateToken(active: UUID(), incoming: UUID()) - #expect(outcome == .dismiss) + #expect(outcome == .dropMismatch) } }