Build Information
Successful build of CouncilKit, reference main (d083d5), with Swift 6.1 for macOS (SPM) on 30 Sep 2026 10:57:55 UTC.
Swift 6 data race errors: 4
Build Command
env DEVELOPER_DIR=/Applications/Xcode-16.3.0.app xcrun swift build --arch arm64 -Xswiftc -Xfrontend -Xswiftc -stats-output-dir -Xswiftc -Xfrontend -Xswiftc .stats -Xswiftc -strict-concurrency=complete -Xswiftc -enable-upcoming-feature -Xswiftc StrictConcurrency -Xswiftc -enable-upcoming-feature -Xswiftc DisableOutwardActorInference -Xswiftc -enable-upcoming-feature -Xswiftc GlobalActorIsolatedTypesUsability -Xswiftc -enable-upcoming-feature -Xswiftc InferSendableFromCapturesBuild Log
========================================
RunAll
========================================
Builder version: 5.1.1
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/albertofettucini/CouncilKit.git
Reference: main
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/albertofettucini/CouncilKit
* branch main -> FETCH_HEAD
* [new branch] main -> origin/main
HEAD is now at d083d52 Outcome reminders as local notifications (CouncilKit 0.3.0)
Cloned https://github.com/albertofettucini/CouncilKit.git
Revision (git rev-parse @):
d083d523037e7b056a847bb5a1fbff6e7a65c575
SUCCESS checkout https://github.com/albertofettucini/CouncilKit.git at main
========================================
Build
========================================
Selected platform: macosSpm
Swift version: 6.1
Building package at path: $PWD
https://github.com/albertofettucini/CouncilKit.git
https://github.com/albertofettucini/CouncilKit.git
{
"dependencies" : [
],
"manifest_display_name" : "CouncilKit",
"name" : "CouncilKit",
"path" : "/Users/admin/builder/spi-builder-workspace",
"platforms" : [
{
"name" : "macos",
"version" : "14.0"
}
],
"products" : [
{
"name" : "CouncilKit",
"targets" : [
"CouncilKit"
],
"type" : {
"library" : [
"automatic"
]
}
},
{
"name" : "council",
"targets" : [
"council"
],
"type" : {
"executable" : null
}
}
],
"targets" : [
{
"c99name" : "council",
"module_type" : "SwiftTarget",
"name" : "council",
"path" : "Sources/council",
"product_memberships" : [
"council"
],
"sources" : [
"CouncilCLI.swift"
],
"target_dependencies" : [
"CouncilKit"
],
"type" : "executable"
},
{
"c99name" : "CouncilKitTests",
"module_type" : "SwiftTarget",
"name" : "CouncilKitTests",
"path" : "Tests/CouncilKitTests",
"sources" : [
"CouncilKitTests.swift"
],
"target_dependencies" : [
"CouncilKit"
],
"type" : "test"
},
{
"c99name" : "CouncilKit",
"module_type" : "SwiftTarget",
"name" : "CouncilKit",
"path" : "Sources/CouncilKit",
"product_memberships" : [
"CouncilKit",
"council"
],
"sources" : [
"AnthropicClient.swift",
"AppleFoundationClient.swift",
"Archetype.swift",
"Council.swift",
"CouncilConfig.swift",
"CouncilKit.swift",
"CouncilStore.swift",
"KeychainStore.swift",
"LLMClient.swift",
"LLMProvider.swift",
"OpenAICompatibleClient.swift",
"ReminderNotifications.swift",
"Seat.swift",
"Session.swift"
],
"type" : "library"
}
],
"tools_version" : "5.9"
}
Running build ...
env DEVELOPER_DIR=/Applications/Xcode-16.3.0.app xcrun swift build --arch arm64 -Xswiftc -Xfrontend -Xswiftc -stats-output-dir -Xswiftc -Xfrontend -Xswiftc .stats -Xswiftc -strict-concurrency=complete -Xswiftc -enable-upcoming-feature -Xswiftc StrictConcurrency -Xswiftc -enable-upcoming-feature -Xswiftc DisableOutwardActorInference -Xswiftc -enable-upcoming-feature -Xswiftc GlobalActorIsolatedTypesUsability -Xswiftc -enable-upcoming-feature -Xswiftc InferSendableFromCaptures
Building for debugging...
[0/7] Write sources
[1/7] Write council-entitlement.plist
[2/7] Write sources
[3/7] Write swift-version-2F0A5646E1D333AE.txt
[5/21] Compiling CouncilKit Seat.swift
[6/22] Compiling CouncilKit OpenAICompatibleClient.swift
[7/22] Compiling CouncilKit LLMClient.swift
[8/22] Compiling CouncilKit ReminderNotifications.swift
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/ReminderNotifications.swift:60:37: warning: non-sendable result type 'UNNotificationSettings' cannot be sent from nonisolated context in call to instance method 'notificationSettings()'; this is an error in the Swift 6 language mode
58 | guard CouncilRuntime.notificationsPossible else { return false }
59 | let center = UNUserNotificationCenter.current()
60 | let settings = await center.notificationSettings()
| `- warning: non-sendable result type 'UNNotificationSettings' cannot be sent from nonisolated context in call to instance method 'notificationSettings()'; this is an error in the Swift 6 language mode
61 | switch settings.authorizationStatus {
62 | case .authorized, .provisional:
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/UserNotifications.framework/Headers/UNNotificationSettings.h:58:12: note: class 'UNNotificationSettings' does not conform to the 'Sendable' protocol
56 |
57 | API_AVAILABLE(macos(10.14), ios(10.0), watchos(3.0), tvos(10.0))
58 | @interface UNNotificationSettings : NSObject <NSCopying, NSSecureCoding>
| `- note: class 'UNNotificationSettings' does not conform to the 'Sendable' protocol
59 |
60 | @property (NS_NONATOMIC_IOSONLY, readonly) UNAuthorizationStatus authorizationStatus;
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/ReminderNotifications.swift:2:1: warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'UserNotifications'
1 | import Foundation
2 | import UserNotifications
| `- warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'UserNotifications'
3 |
4 | /// Small runtime facts shared across the engine.
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/ReminderNotifications.swift:83:41: warning: non-sendable result type 'UNNotificationSettings' cannot be sent from nonisolated context in call to instance method 'notificationSettings()'; this is an error in the Swift 6 language mode
81 | Task { @MainActor in
82 | let center = UNUserNotificationCenter.current()
83 | let settings = await center.notificationSettings()
| `- warning: non-sendable result type 'UNNotificationSettings' cannot be sent from nonisolated context in call to instance method 'notificationSettings()'; this is an error in the Swift 6 language mode
84 | reminderNotificationsDenied = settings.authorizationStatus == .denied
85 | guard settings.authorizationStatus == .authorized
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/UserNotifications.framework/Headers/UNNotificationSettings.h:58:12: note: class 'UNNotificationSettings' does not conform to the 'Sendable' protocol
56 |
57 | API_AVAILABLE(macos(10.14), ios(10.0), watchos(3.0), tvos(10.0))
58 | @interface UNNotificationSettings : NSObject <NSCopying, NSSecureCoding>
| `- note: class 'UNNotificationSettings' does not conform to the 'Sendable' protocol
59 |
60 | @property (NS_NONATOMIC_IOSONLY, readonly) UNAuthorizationStatus authorizationStatus;
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/ReminderNotifications.swift:88:40: warning: non-sendable result type '[UNNotificationRequest]' cannot be sent from nonisolated context in call to instance method 'pendingNotificationRequests()'; this is an error in the Swift 6 language mode
86 | || settings.authorizationStatus == .provisional else { return }
87 |
88 | let pending = await center.pendingNotificationRequests()
| `- warning: non-sendable result type '[UNNotificationRequest]' cannot be sent from nonisolated context in call to instance method 'pendingNotificationRequests()'; this is an error in the Swift 6 language mode
89 | .filter { $0.identifier.hasPrefix(Self.reminderIDPrefix) }
90 | var keep = Set<String>()
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/UserNotifications.framework/Headers/UNNotificationRequest.h:16:12: note: class 'UNNotificationRequest' does not conform to the 'Sendable' protocol
14 |
15 | API_AVAILABLE(macos(10.14), ios(10.0), watchos(3.0), tvos(10.0))
16 | @interface UNNotificationRequest : NSObject <NSCopying, NSSecureCoding>
| `- note: class 'UNNotificationRequest' does not conform to the 'Sendable' protocol
17 |
18 | // The unique identifier for this notification request. It can be used to replace or remove a pending notification request or a delivered notification.
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/ReminderNotifications.swift:104:42: warning: non-sendable result type '[UNNotification]' cannot be sent from nonisolated context in call to instance method 'deliveredNotifications()'; this is an error in the Swift 6 language mode
102 | // A banner already sitting in Notification Center for a loop that has since been closed
103 | // (outcome logged, session deleted) goes too.
104 | let delivered = await center.deliveredNotifications()
| `- warning: non-sendable result type '[UNNotification]' cannot be sent from nonisolated context in call to instance method 'deliveredNotifications()'; this is an error in the Swift 6 language mode
105 | .map(\.request.identifier)
106 | .filter { id in
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/UserNotifications.framework/Headers/UNNotification.h:15:12: note: class 'UNNotification' does not conform to the 'Sendable' protocol
13 |
14 | API_AVAILABLE(macos(10.14), ios(10.0), watchos(3.0), tvos(10.0))
15 | @interface UNNotification : NSObject <NSCopying, NSSecureCoding>
| `- note: class 'UNNotification' does not conform to the 'Sendable' protocol
16 |
17 | // The date displayed on the notification.
[9/22] Compiling CouncilKit LLMProvider.swift
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/LLMProvider.swift:158:24: warning: static property 'containerPrefs' is not concurrency-safe because non-'Sendable' type 'NSDictionary?' may have shared mutable state; this is an error in the Swift 6 language mode
156 | return containerPrefs?[key] as? String
157 | }
158 | private static let containerPrefs: NSDictionary? = NSDictionary(contentsOf:
| |- warning: static property 'containerPrefs' is not concurrency-safe because non-'Sendable' type 'NSDictionary?' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'containerPrefs' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
159 | FileManager.default.homeDirectoryForCurrentUser.appendingPathComponent(
160 | "Library/Containers/com.joseph.Council/Data/Library/Preferences/com.joseph.Council.plist"))
Swift.Optional:1:21: note: generic enum 'Optional' does not conform to the 'Sendable' protocol
1 | @frozen public enum Optional<Wrapped> : ~Copyable where Wrapped : ~Copyable {
| `- note: generic enum 'Optional' does not conform to the 'Sendable' protocol
2 | case none
3 | case some(Wrapped)
[10/22] Compiling CouncilKit Session.swift
[11/22] Compiling CouncilKit CouncilConfig.swift
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/CouncilConfig.swift:68:23: warning: static property 'presets' is not concurrency-safe because non-'Sendable' type '[CouncilConfig]' may have shared mutable state; this is an error in the Swift 6 language mode
5 | /// shared prompt, and which seats synthesize / play devil's advocate. API keys are NEVER part of
6 | /// this — they live only in the Keychain, per machine. Export → council.json → share → import.
7 | public struct CouncilConfig: Codable, Identifiable {
| `- note: consider making struct 'CouncilConfig' conform to the 'Sendable' protocol
8 | public var id = UUID()
9 | public var name: String
:
66 | /// One curated starting point. Models default to a strong trio; the importer keeps whatever
67 | /// keys it already has, and any seat can be re-picked afterward.
68 | public static let presets: [CouncilConfig] = [
| |- warning: static property 'presets' is not concurrency-safe because non-'Sendable' type '[CouncilConfig]' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'presets' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
69 | CouncilConfig(
70 | name: "Code Review Council",
[12/22] Compiling CouncilKit CouncilKit.swift
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/CouncilConfig.swift:68:23: warning: static property 'presets' is not concurrency-safe because non-'Sendable' type '[CouncilConfig]' may have shared mutable state; this is an error in the Swift 6 language mode
5 | /// shared prompt, and which seats synthesize / play devil's advocate. API keys are NEVER part of
6 | /// this — they live only in the Keychain, per machine. Export → council.json → share → import.
7 | public struct CouncilConfig: Codable, Identifiable {
| `- note: consider making struct 'CouncilConfig' conform to the 'Sendable' protocol
8 | public var id = UUID()
9 | public var name: String
:
66 | /// One curated starting point. Models default to a strong trio; the importer keeps whatever
67 | /// keys it already has, and any seat can be re-picked afterward.
68 | public static let presets: [CouncilConfig] = [
| |- warning: static property 'presets' is not concurrency-safe because non-'Sendable' type '[CouncilConfig]' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'presets' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
69 | CouncilConfig(
70 | name: "Code Review Council",
[13/22] Compiling CouncilKit AnthropicClient.swift
[14/22] Compiling CouncilKit AppleFoundationClient.swift
[15/22] Compiling CouncilKit Archetype.swift
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/Council.swift:342:19: warning: sending value of non-Sendable type '() async -> Void' risks causing data races; this is an error in the Swift 6 language mode
340 | // Phase A — answers, streamed token-by-token (poll the store while ask() runs concurrently).
341 | await withTaskGroup(of: Void.self) { group in
342 | group.addTask { @MainActor [self] in
| |- warning: sending value of non-Sendable type '() async -> Void' risks causing data races; this is an error in the Swift 6 language mode
| `- note: Passing main actor-isolated value of non-Sendable type '() async -> Void' as a 'sending' parameter risks causing races inbetween main actor-isolated uses and uses reachable from the callee
343 | await store.ask(question, document: document)
344 | answersDone = true
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/Council.swift:346:19: warning: sending value of non-Sendable type '() async -> Void' risks causing data races; this is an error in the Swift 6 language mode
344 | answersDone = true
345 | }
346 | group.addTask { @MainActor [self] in
| |- warning: sending value of non-Sendable type '() async -> Void' risks causing data races; this is an error in the Swift 6 language mode
| `- note: Passing main actor-isolated value of non-Sendable type '() async -> Void' as a 'sending' parameter risks causing races inbetween main actor-isolated uses and uses reachable from the callee
347 | while !answersDone && !Task.isCancelled {
348 | emitTokens(store)
[16/22] Compiling CouncilKit Council.swift
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/Council.swift:342:19: warning: sending value of non-Sendable type '() async -> Void' risks causing data races; this is an error in the Swift 6 language mode
340 | // Phase A — answers, streamed token-by-token (poll the store while ask() runs concurrently).
341 | await withTaskGroup(of: Void.self) { group in
342 | group.addTask { @MainActor [self] in
| |- warning: sending value of non-Sendable type '() async -> Void' risks causing data races; this is an error in the Swift 6 language mode
| `- note: Passing main actor-isolated value of non-Sendable type '() async -> Void' as a 'sending' parameter risks causing races inbetween main actor-isolated uses and uses reachable from the callee
343 | await store.ask(question, document: document)
344 | answersDone = true
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/Council.swift:346:19: warning: sending value of non-Sendable type '() async -> Void' risks causing data races; this is an error in the Swift 6 language mode
344 | answersDone = true
345 | }
346 | group.addTask { @MainActor [self] in
| |- warning: sending value of non-Sendable type '() async -> Void' risks causing data races; this is an error in the Swift 6 language mode
| `- note: Passing main actor-isolated value of non-Sendable type '() async -> Void' as a 'sending' parameter risks causing races inbetween main actor-isolated uses and uses reachable from the callee
347 | while !answersDone && !Task.isCancelled {
348 | emitTokens(store)
[17/22] Emitting module CouncilKit
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/CouncilConfig.swift:68:23: warning: static property 'presets' is not concurrency-safe because non-'Sendable' type '[CouncilConfig]' may have shared mutable state; this is an error in the Swift 6 language mode
5 | /// shared prompt, and which seats synthesize / play devil's advocate. API keys are NEVER part of
6 | /// this — they live only in the Keychain, per machine. Export → council.json → share → import.
7 | public struct CouncilConfig: Codable, Identifiable {
| `- note: consider making struct 'CouncilConfig' conform to the 'Sendable' protocol
8 | public var id = UUID()
9 | public var name: String
:
66 | /// One curated starting point. Models default to a strong trio; the importer keeps whatever
67 | /// keys it already has, and any seat can be re-picked afterward.
68 | public static let presets: [CouncilConfig] = [
| |- warning: static property 'presets' is not concurrency-safe because non-'Sendable' type '[CouncilConfig]' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'presets' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
69 | CouncilConfig(
70 | name: "Code Review Council",
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/CouncilStore.swift:38:23: warning: static property 'stallTimeoutSeconds' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
36 | /// The default is generous on purpose — a cold local model can take a while to load before its
37 | /// first token — but it is settable for tighter environments (CI).
38 | public static var stallTimeoutSeconds: Double = 90
| |- warning: static property 'stallTimeoutSeconds' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'stallTimeoutSeconds' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'stallTimeoutSeconds' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
39 |
40 | /// How much of an attached document a round keeps so it can be re-asked identically. Sessions
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/KeychainStore.swift:194:23: warning: static property 'allowEnvOverride' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
192 | /// CI escape hatch (CLI `--allow-env-keys` only): lets COUNCIL_KEY_<PROVIDER> env vars
193 | /// override Keychain reads. NEVER enabled by default; the CLI prints a warning when it is.
194 | public static var allowEnvOverride = false
| |- warning: static property 'allowEnvOverride' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'allowEnvOverride' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'allowEnvOverride' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
195 |
196 | /// Read the secret for the given account, or nil if none is stored.
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/LLMProvider.swift:158:24: warning: static property 'containerPrefs' is not concurrency-safe because non-'Sendable' type 'NSDictionary?' may have shared mutable state; this is an error in the Swift 6 language mode
156 | return containerPrefs?[key] as? String
157 | }
158 | private static let containerPrefs: NSDictionary? = NSDictionary(contentsOf:
| |- warning: static property 'containerPrefs' is not concurrency-safe because non-'Sendable' type 'NSDictionary?' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'containerPrefs' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
159 | FileManager.default.homeDirectoryForCurrentUser.appendingPathComponent(
160 | "Library/Containers/com.joseph.Council/Data/Library/Preferences/com.joseph.Council.plist"))
Swift.Optional:1:21: note: generic enum 'Optional' does not conform to the 'Sendable' protocol
1 | @frozen public enum Optional<Wrapped> : ~Copyable where Wrapped : ~Copyable {
| `- note: generic enum 'Optional' does not conform to the 'Sendable' protocol
2 | case none
3 | case some(Wrapped)
[18/22] Compiling CouncilKit CouncilStore.swift
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/CouncilStore.swift:38:23: warning: static property 'stallTimeoutSeconds' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
36 | /// The default is generous on purpose — a cold local model can take a while to load before its
37 | /// first token — but it is settable for tighter environments (CI).
38 | public static var stallTimeoutSeconds: Double = 90
| |- warning: static property 'stallTimeoutSeconds' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'stallTimeoutSeconds' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'stallTimeoutSeconds' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
39 |
40 | /// How much of an attached document a round keeps so it can be re-asked identically. Sessions
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/KeychainStore.swift:194:23: warning: static property 'allowEnvOverride' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
192 | /// CI escape hatch (CLI `--allow-env-keys` only): lets COUNCIL_KEY_<PROVIDER> env vars
193 | /// override Keychain reads. NEVER enabled by default; the CLI prints a warning when it is.
194 | public static var allowEnvOverride = false
| |- warning: static property 'allowEnvOverride' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'allowEnvOverride' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'allowEnvOverride' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
195 |
196 | /// Read the secret for the given account, or nil if none is stored.
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/KeychainStore.swift:100:9: warning: 'SecKeychainSetUserInteractionAllowed' was deprecated in macOS 10.10: SecKeychain is deprecated
98 | public static func suppressSystemPrompts() {
99 | guard !isRunningTests else { return }
100 | SecKeychainSetUserInteractionAllowed(false)
| `- warning: 'SecKeychainSetUserInteractionAllowed' was deprecated in macOS 10.10: SecKeychain is deprecated
101 | }
102 |
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/KeychainStore.swift:108:9: warning: 'SecKeychainSetUserInteractionAllowed' was deprecated in macOS 10.10: SecKeychain is deprecated
106 | public static func staleAccounts(_ accounts: [String]) -> [String] {
107 | if isRunningTests { return [] }
108 | SecKeychainSetUserInteractionAllowed(false)
| `- warning: 'SecKeychainSetUserInteractionAllowed' was deprecated in macOS 10.10: SecKeychain is deprecated
109 | // Restore only for a process that allows prompts at all (the CLI); the app suppresses them
110 | // permanently via suppressSystemPrompts and must not have them switched back on here.
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/KeychainStore.swift:111:58: warning: 'SecKeychainSetUserInteractionAllowed' was deprecated in macOS 10.10: SecKeychain is deprecated
109 | // Restore only for a process that allows prompts at all (the CLI); the app suppresses them
110 | // permanently via suppressSystemPrompts and must not have them switched back on here.
111 | defer { if Bundle.main.bundleIdentifier == nil { SecKeychainSetUserInteractionAllowed(true) } }
| `- warning: 'SecKeychainSetUserInteractionAllowed' was deprecated in macOS 10.10: SecKeychain is deprecated
112 | var stale: [String] = []
113 | for account in accounts {
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/KeychainStore.swift:143:13: warning: 'SecKeychainSetUserInteractionAllowed' was deprecated in macOS 10.10: SecKeychain is deprecated
141 | guard !stale.isEmpty else { return [] }
142 | if Bundle.main.bundleIdentifier == nil { // CLI: prompts are legitimate here
143 | SecKeychainSetUserInteractionAllowed(true)
| `- warning: 'SecKeychainSetUserInteractionAllowed' was deprecated in macOS 10.10: SecKeychain is deprecated
144 | stale = stale.filter { ((try? keychainRead(account: $0)) ?? nil) == nil }
145 | guard !stale.isEmpty else { return [] }
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/CouncilStore.swift:1002:31: warning: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure; this is an error in the Swift 6 language mode
1000 | let seatImage = (seat.provider?.supportsVision(model: seat.model) ?? false) ? image : nil
1001 | let messages = [ChatMessage.system(sys)] + (history[seat.id] ?? []) + [.user(effectivePrompt, image: seatImage)]
1002 | group.addTask { @MainActor in
| `- warning: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure; this is an error in the Swift 6 language mode
1003 | let r = await self.streamCall(seat: seat, messages: messages) { partial in
| `- note: closure captures 'seat' which is accessible to main actor-isolated code
1004 | self.setAnswer(idx, seat.id, partial)
1005 | }
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/CouncilStore.swift:1059:31: warning: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure; this is an error in the Swift 6 language mode
1057 | let reviewSystem = (seat.id == devilsAdvocateSeatID) ? Self.adversaryReviewPrompt : Self.peerReviewPrompt
1058 | let messages = [ChatMessage.system(reviewSystem), .user(reviewText)]
1059 | group.addTask { @MainActor in
| `- warning: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure; this is an error in the Swift 6 language mode
1060 | let r = await self.streamCall(seat: seat, messages: messages) { partial in
| `- note: closure captures 'seat' which is accessible to main actor-isolated code
1061 | self.livePeerReviews[seat.id] = partial // raw buffer — no rounds churn per tick
1062 | }
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/CouncilStore.swift:1132:31: warning: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure; this is an error in the Swift 6 language mode
1130 | """
1131 | let messages = [ChatMessage.system(systemPrompt(for: seat)), .user(prompt)]
1132 | group.addTask { @MainActor in
| `- warning: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure; this is an error in the Swift 6 language mode
1133 | let r = await self.streamCall(seat: seat, messages: messages) { partial in
| `- note: closure captures 'seat' which is accessible to main actor-isolated code
1134 | self.liveRebuttals[seat.id] = partial // raw buffer — no rounds churn per tick
1135 | }
[19/22] Compiling CouncilKit KeychainStore.swift
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/CouncilStore.swift:38:23: warning: static property 'stallTimeoutSeconds' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
36 | /// The default is generous on purpose — a cold local model can take a while to load before its
37 | /// first token — but it is settable for tighter environments (CI).
38 | public static var stallTimeoutSeconds: Double = 90
| |- warning: static property 'stallTimeoutSeconds' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'stallTimeoutSeconds' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'stallTimeoutSeconds' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
39 |
40 | /// How much of an attached document a round keeps so it can be re-asked identically. Sessions
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/KeychainStore.swift:194:23: warning: static property 'allowEnvOverride' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
192 | /// CI escape hatch (CLI `--allow-env-keys` only): lets COUNCIL_KEY_<PROVIDER> env vars
193 | /// override Keychain reads. NEVER enabled by default; the CLI prints a warning when it is.
194 | public static var allowEnvOverride = false
| |- warning: static property 'allowEnvOverride' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'allowEnvOverride' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'allowEnvOverride' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
195 |
196 | /// Read the secret for the given account, or nil if none is stored.
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/KeychainStore.swift:100:9: warning: 'SecKeychainSetUserInteractionAllowed' was deprecated in macOS 10.10: SecKeychain is deprecated
98 | public static func suppressSystemPrompts() {
99 | guard !isRunningTests else { return }
100 | SecKeychainSetUserInteractionAllowed(false)
| `- warning: 'SecKeychainSetUserInteractionAllowed' was deprecated in macOS 10.10: SecKeychain is deprecated
101 | }
102 |
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/KeychainStore.swift:108:9: warning: 'SecKeychainSetUserInteractionAllowed' was deprecated in macOS 10.10: SecKeychain is deprecated
106 | public static func staleAccounts(_ accounts: [String]) -> [String] {
107 | if isRunningTests { return [] }
108 | SecKeychainSetUserInteractionAllowed(false)
| `- warning: 'SecKeychainSetUserInteractionAllowed' was deprecated in macOS 10.10: SecKeychain is deprecated
109 | // Restore only for a process that allows prompts at all (the CLI); the app suppresses them
110 | // permanently via suppressSystemPrompts and must not have them switched back on here.
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/KeychainStore.swift:111:58: warning: 'SecKeychainSetUserInteractionAllowed' was deprecated in macOS 10.10: SecKeychain is deprecated
109 | // Restore only for a process that allows prompts at all (the CLI); the app suppresses them
110 | // permanently via suppressSystemPrompts and must not have them switched back on here.
111 | defer { if Bundle.main.bundleIdentifier == nil { SecKeychainSetUserInteractionAllowed(true) } }
| `- warning: 'SecKeychainSetUserInteractionAllowed' was deprecated in macOS 10.10: SecKeychain is deprecated
112 | var stale: [String] = []
113 | for account in accounts {
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/KeychainStore.swift:143:13: warning: 'SecKeychainSetUserInteractionAllowed' was deprecated in macOS 10.10: SecKeychain is deprecated
141 | guard !stale.isEmpty else { return [] }
142 | if Bundle.main.bundleIdentifier == nil { // CLI: prompts are legitimate here
143 | SecKeychainSetUserInteractionAllowed(true)
| `- warning: 'SecKeychainSetUserInteractionAllowed' was deprecated in macOS 10.10: SecKeychain is deprecated
144 | stale = stale.filter { ((try? keychainRead(account: $0)) ?? nil) == nil }
145 | guard !stale.isEmpty else { return [] }
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/CouncilStore.swift:1002:31: warning: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure; this is an error in the Swift 6 language mode
1000 | let seatImage = (seat.provider?.supportsVision(model: seat.model) ?? false) ? image : nil
1001 | let messages = [ChatMessage.system(sys)] + (history[seat.id] ?? []) + [.user(effectivePrompt, image: seatImage)]
1002 | group.addTask { @MainActor in
| `- warning: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure; this is an error in the Swift 6 language mode
1003 | let r = await self.streamCall(seat: seat, messages: messages) { partial in
| `- note: closure captures 'seat' which is accessible to main actor-isolated code
1004 | self.setAnswer(idx, seat.id, partial)
1005 | }
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/CouncilStore.swift:1059:31: warning: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure; this is an error in the Swift 6 language mode
1057 | let reviewSystem = (seat.id == devilsAdvocateSeatID) ? Self.adversaryReviewPrompt : Self.peerReviewPrompt
1058 | let messages = [ChatMessage.system(reviewSystem), .user(reviewText)]
1059 | group.addTask { @MainActor in
| `- warning: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure; this is an error in the Swift 6 language mode
1060 | let r = await self.streamCall(seat: seat, messages: messages) { partial in
| `- note: closure captures 'seat' which is accessible to main actor-isolated code
1061 | self.livePeerReviews[seat.id] = partial // raw buffer — no rounds churn per tick
1062 | }
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/CouncilStore.swift:1132:31: warning: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure; this is an error in the Swift 6 language mode
1130 | """
1131 | let messages = [ChatMessage.system(systemPrompt(for: seat)), .user(prompt)]
1132 | group.addTask { @MainActor in
| `- warning: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure; this is an error in the Swift 6 language mode
1133 | let r = await self.streamCall(seat: seat, messages: messages) { partial in
| `- note: closure captures 'seat' which is accessible to main actor-isolated code
1134 | self.liveRebuttals[seat.id] = partial // raw buffer — no rounds churn per tick
1135 | }
[20/24] Compiling council CouncilCLI.swift
/Users/admin/builder/spi-builder-workspace/Sources/council/CouncilCLI.swift:172:23: warning: reference to static property 'allowEnvOverride' is not concurrency-safe because it involves shared mutable state; this is an error in the Swift 6 language mode
170 | func run(_ opts: Options) async {
171 | if opts.allowEnvKeys {
172 | KeychainStore.allowEnvOverride = true
| `- warning: reference to static property 'allowEnvOverride' is not concurrency-safe because it involves shared mutable state; this is an error in the Swift 6 language mode
173 | errPrint("warning: --allow-env-keys is on — COUNCIL_KEY_* env vars may supply API keys (CI mode)")
174 | }
/Users/admin/builder/spi-builder-workspace/Sources/CouncilKit/KeychainStore.swift:194:23: note: static property declared here
192 | /// CI escape hatch (CLI `--allow-env-keys` only): lets COUNCIL_KEY_<PROVIDER> env vars
193 | /// override Keychain reads. NEVER enabled by default; the CLI prints a warning when it is.
194 | public static var allowEnvOverride = false
| `- note: static property declared here
195 |
196 | /// Read the secret for the given account, or nil if none is stored.
/Users/admin/builder/spi-builder-workspace/Sources/council/CouncilCLI.swift:483:13: warning: variable 'argv' was never mutated; consider changing to 'let' constant
481 | struct CouncilCLI {
482 | static func main() async {
483 | var argv = Array(CommandLine.arguments.dropFirst())
| `- warning: variable 'argv' was never mutated; consider changing to 'let' constant
484 | if argv.first == "keys" {
485 | guard argv.count >= 3, argv[1] == "set" else { die("usage: council keys set <provider>", code: 64) }
[21/24] Emitting module council
[21/24] Write Objects.LinkFileList
[22/24] Linking council
[23/24] Applying council
Build complete! (10.08s)
Build complete.
{
"dependencies" : [
],
"manifest_display_name" : "CouncilKit",
"name" : "CouncilKit",
"path" : "/Users/admin/builder/spi-builder-workspace",
"platforms" : [
{
"name" : "macos",
"version" : "14.0"
}
],
"products" : [
{
"name" : "CouncilKit",
"targets" : [
"CouncilKit"
],
"type" : {
"library" : [
"automatic"
]
}
},
{
"name" : "council",
"targets" : [
"council"
],
"type" : {
"executable" : null
}
}
],
"targets" : [
{
"c99name" : "council",
"module_type" : "SwiftTarget",
"name" : "council",
"path" : "Sources/council",
"product_memberships" : [
"council"
],
"sources" : [
"CouncilCLI.swift"
],
"target_dependencies" : [
"CouncilKit"
],
"type" : "executable"
},
{
"c99name" : "CouncilKitTests",
"module_type" : "SwiftTarget",
"name" : "CouncilKitTests",
"path" : "Tests/CouncilKitTests",
"sources" : [
"CouncilKitTests.swift"
],
"target_dependencies" : [
"CouncilKit"
],
"type" : "test"
},
{
"c99name" : "CouncilKit",
"module_type" : "SwiftTarget",
"name" : "CouncilKit",
"path" : "Sources/CouncilKit",
"product_memberships" : [
"CouncilKit",
"council"
],
"sources" : [
"AnthropicClient.swift",
"AppleFoundationClient.swift",
"Archetype.swift",
"Council.swift",
"CouncilConfig.swift",
"CouncilKit.swift",
"CouncilStore.swift",
"KeychainStore.swift",
"LLMClient.swift",
"LLMProvider.swift",
"OpenAICompatibleClient.swift",
"ReminderNotifications.swift",
"Seat.swift",
"Session.swift"
],
"type" : "library"
}
],
"tools_version" : "5.9"
}
Done.