From 35214ba2a47fdb74ce50eeba64d78af7eb3b6e2a Mon Sep 17 00:00:00 2001 From: Vellum Assistant Date: Wed, 25 Feb 2026 01:24:27 -0500 Subject: [PATCH] fix: stop stale recorder on start guard, fix forceStop status ordering Co-Authored-By: Claude --- .../ComputerUse/RecordingManager.swift | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/clients/macos/vellum-assistant/ComputerUse/RecordingManager.swift b/clients/macos/vellum-assistant/ComputerUse/RecordingManager.swift index 812b46689d2..5db3977e1e1 100644 --- a/clients/macos/vellum-assistant/ComputerUse/RecordingManager.swift +++ b/clients/macos/vellum-assistant/ComputerUse/RecordingManager.swift @@ -84,7 +84,8 @@ final class RecordingManager: ObservableObject { // Guard against stale completion: if stop() or forceStop() was called // while we were awaiting recorder.start(), don't override the state. guard state == .starting, ownerSessionId == sessionId else { - log.info("Recording start completed but state changed during await — not overriding (state=\(String(describing: self.state)))") + log.info("Recording start completed but state changed during await — cancelling stale recorder (state=\(String(describing: self.state)))") + recorder.cancelRecording() return false } @@ -160,13 +161,13 @@ final class RecordingManager: ObservableObject { recorder.cancelRecording() let sessionId = ownerSessionId - state = .idle - ownerSessionId = nil - attachToConversationId = nil - if let sessionId { sendStatus(sessionId: sessionId, status: "failed", error: "Recording cancelled during shutdown") } + + state = .idle + ownerSessionId = nil + attachToConversationId = nil log.info("Force-stopped recording (synchronous cancel)") }