From 2dd62f59c06217b190f854f5eeb59554d78eeef1 Mon Sep 17 00:00:00 2001 From: Enrico Piovesan Date: Sat, 22 Aug 2026 20:17:32 -0600 Subject: [PATCH] fix(doc-approval): make Swift presentation mappers Swift 6 Sendable-safe Use @unchecked Sendable for Any-backed mapper payloads and stop assigning private(set) view-model fields from tests so PresentationMapperTests compile. Co-authored-by: Cursor --- .../Sources/DocApprovalCore/PresentationMapper.swift | 6 +++--- .../DocApprovalCoreTests/DocApprovalCoreTests.swift | 9 +++++++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/apps/doc-approval/DocApprovalCore/Sources/DocApprovalCore/PresentationMapper.swift b/apps/doc-approval/DocApprovalCore/Sources/DocApprovalCore/PresentationMapper.swift index 64d33c5..a8a1991 100644 --- a/apps/doc-approval/DocApprovalCore/Sources/DocApprovalCore/PresentationMapper.swift +++ b/apps/doc-approval/DocApprovalCore/Sources/DocApprovalCore/PresentationMapper.swift @@ -10,7 +10,7 @@ public enum PresentationState: String, Equatable, Sendable { case error } -public struct PresentationSnapshot: Equatable, Sendable { +public struct PresentationSnapshot: Equatable, @unchecked Sendable { public let state: PresentationState public let errorMessage: String? public let output: Any? @@ -31,7 +31,7 @@ public enum CapabilityPhase: String, Equatable, Sendable { case result } -public struct CapabilityProgressStep: Equatable, Sendable { +public struct CapabilityProgressStep: Equatable, @unchecked Sendable { public let capabilityId: String public let phase: CapabilityPhase public let sequence: UInt64 @@ -61,7 +61,7 @@ public struct CapabilityProgressStep: Equatable, Sendable { } /// Minimal embedder event fields required by the mapper. -public struct EmbedderEventLike: Equatable, Sendable { +public struct EmbedderEventLike: Equatable, @unchecked Sendable { public let eventType: String public let sequence: UInt64 public let data: [String: Any] diff --git a/apps/doc-approval/DocApprovalCore/Tests/DocApprovalCoreTests/DocApprovalCoreTests.swift b/apps/doc-approval/DocApprovalCore/Tests/DocApprovalCoreTests/DocApprovalCoreTests.swift index 893e985..3ae85e6 100644 --- a/apps/doc-approval/DocApprovalCore/Tests/DocApprovalCoreTests/DocApprovalCoreTests.swift +++ b/apps/doc-approval/DocApprovalCore/Tests/DocApprovalCoreTests/DocApprovalCoreTests.swift @@ -80,13 +80,18 @@ final class AppStateViewModelTests: XCTestCase { XCTAssertNotNil(vm.sessionId) } - func testResetReturnsToIdle() throws { + func testResetReturnsToIdle() async throws { let host = try EmbeddedHost.createTestHost(output: sampleOutput) let vm = AppStateViewModel(host: host, workspaceId: "local-default") - vm.errorMessage = "boom" + vm.document = "document text" + vm.submit() + try await Task.sleep(nanoseconds: 200_000_000) + XCTAssertEqual(vm.currentState, "completed") vm.reset() XCTAssertEqual(vm.currentState, "idle") XCTAssertNil(vm.errorMessage) + XCTAssertNil(vm.output) + XCTAssertEqual(vm.presentationState, .idle) } }