The Swift Package Index logo.Swift Package Index

Build Information

Successful build of IndieFeedback, reference 1.2.0 (5d2363), with Swift 6.1 for macOS (SPM) on 18 Jul 2026 01:41:03 UTC.

Swift 6 data race errors: 2

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 InferSendableFromCaptures

Build Log

========================================
RunAll
========================================
Builder version: undefined version: run 'make version' to update
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/rshankras/IndieFeedback.git
Reference: 1.2.0
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/rshankras/IndieFeedback
 * tag               1.2.0      -> FETCH_HEAD
HEAD is now at 5d2363e Make giving feedback feel like a conversation, not a form
Cloned https://github.com/rshankras/IndieFeedback.git
Revision (git rev-parse @):
5d2363e79c6a29095d466115de08d046ab5b2344
SUCCESS checkout https://github.com/rshankras/IndieFeedback.git at 1.2.0
========================================
Build
========================================
Selected platform:         macosSpm
Swift version:             6.1
Building package at path:  $PWD
https://github.com/rshankras/IndieFeedback.git
https://github.com/rshankras/IndieFeedback.git
{
  "dependencies" : [
  ],
  "manifest_display_name" : "IndieFeedback",
  "name" : "IndieFeedback",
  "path" : "/Users/admin/builder/spi-builder-workspace",
  "platforms" : [
    {
      "name" : "ios",
      "version" : "17.0"
    },
    {
      "name" : "macos",
      "version" : "14.0"
    }
  ],
  "products" : [
    {
      "name" : "IndieFeedback",
      "targets" : [
        "IndieFeedback"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    }
  ],
  "targets" : [
    {
      "c99name" : "IndieFeedback",
      "module_type" : "SwiftTarget",
      "name" : "IndieFeedback",
      "path" : "Sources/IndieFeedback",
      "product_memberships" : [
        "IndieFeedback"
      ],
      "sources" : [
        "AddFeedbackView.swift",
        "FeedbackButton.swift",
        "FeedbackConfiguration.swift",
        "FeedbackDetailView.swift",
        "FeedbackEntryPoints.swift",
        "FeedbackListView.swift",
        "FeedbackModels.swift",
        "FeedbackPrompt.swift",
        "FeedbackShipped.swift",
        "FeedbackTheme.swift",
        "FeedbackViewModel.swift",
        "IndieFeedbackView.swift",
        "KeychainHelper.swift",
        "ShakeToFeedback.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/2] Write sources
[1/2] Write swift-version-2F0A5646E1D333AE.txt
[3/16] Compiling IndieFeedback KeychainHelper.swift
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/KeychainHelper.swift:13:16: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'KeychainHelper' may have shared mutable state; this is an error in the Swift 6 language mode
10 | import Security
11 |
12 | class KeychainHelper {
   |       `- note: class 'KeychainHelper' does not conform to the 'Sendable' protocol
13 |     static let shared = KeychainHelper()
   |                |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'KeychainHelper' may have shared mutable state; this is an error in the Swift 6 language mode
   |                |- note: add '@MainActor' to make static property 'shared' part of global actor 'MainActor'
   |                `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
14 |
15 |     private init() {}
[4/16] Compiling IndieFeedback IndieFeedbackView.swift
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/IndieFeedbackView.swift:154:61: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
152 |                 }
153 |                 ToolbarItem(placement: .automatic) {
154 |                     Button(action: { Task { await viewModel.refreshFeedback() } }) {
    |                                                             |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                                             `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'refreshFeedback()' risks causing data races between nonisolated and main actor-isolated uses
155 |                         Image(systemName: "arrow.clockwise")
156 |                     }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/IndieFeedbackView.swift:211:37: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
209 |                 .listStyle(.plain)
210 |                 .refreshable {
211 |                     await viewModel.refreshFeedback()
    |                                     |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'refreshFeedback()' risks causing data races between nonisolated and main actor-isolated uses
212 |                 }
213 |             }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/IndieFeedbackView.swift:233:36: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
231 |     private func loadFeedback() {
232 |         if viewModel.feedbackItems.isEmpty {
233 |             Task { await viewModel.fetchFeedback() }
    |                                    |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                    `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'fetchFeedback(status:page:perPage:silentError:bustCache:)' risks causing data races between nonisolated and main actor-isolated uses
234 |         }
235 |     }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/IndieFeedbackView.swift:249:40: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
247 |             // Vote button
248 |             Button(action: {
249 |                 Task { await viewModel.toggleVote(for: item) }
    |                                        |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                        `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'toggleVote(for:)' risks causing data races between nonisolated and main actor-isolated uses
250 |             }) {
251 |                 VStack(spacing: 2) {
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/IndieFeedbackView.swift:368:49: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
366 |                         Button(action: {
367 |                             Task {
368 |                                 await viewModel.toggleVote(for: currentItem)
    |                                                 |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                                 `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'toggleVote(for:)' risks causing data races between nonisolated and main actor-isolated uses
369 |                                 detailedItem = await viewModel.fetchFeedbackDetail(issueNumber: item.id)
370 |                             }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/IndieFeedbackView.swift:369:64: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
367 |                             Task {
368 |                                 await viewModel.toggleVote(for: currentItem)
369 |                                 detailedItem = await viewModel.fetchFeedbackDetail(issueNumber: item.id)
    |                                                                |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                                                `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'fetchFeedbackDetail(issueNumber:)' risks causing data races between nonisolated and main actor-isolated uses
370 |                             }
371 |                         }) {
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/IndieFeedbackView.swift:432:53: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
430 |                         Button("Post Comment") {
431 |                             Task {
432 |                                 _ = await viewModel.addComment(to: currentItem, comment: commentText)
    |                                                     |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                                     `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'addComment(to:comment:)' risks causing data races between nonisolated and main actor-isolated uses
433 |                                 commentText = ""
434 |                                 detailedItem = await viewModel.fetchFeedbackDetail(issueNumber: item.id)
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/IndieFeedbackView.swift:434:64: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
432 |                                 _ = await viewModel.addComment(to: currentItem, comment: commentText)
433 |                                 commentText = ""
434 |                                 detailedItem = await viewModel.fetchFeedbackDetail(issueNumber: item.id)
    |                                                                |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                                                `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'fetchFeedbackDetail(issueNumber:)' risks causing data races between nonisolated and main actor-isolated uses
435 |                             }
436 |                         }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/IndieFeedbackView.swift:444:51: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
442 |         }
443 |         .onAppear {
444 |             Task { detailedItem = await viewModel.fetchFeedbackDetail(issueNumber: item.id) }
    |                                                   |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                                   `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'fetchFeedbackDetail(issueNumber:)' risks causing data races between nonisolated and main actor-isolated uses
445 |         }
446 |         .onChange(of: item) { _, newItem in
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/IndieFeedbackView.swift:447:51: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
445 |         }
446 |         .onChange(of: item) { _, newItem in
447 |             Task { detailedItem = await viewModel.fetchFeedbackDetail(issueNumber: newItem.id) }
    |                                                   |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                                   `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'fetchFeedbackDetail(issueNumber:)' risks causing data races between nonisolated and main actor-isolated uses
448 |         }
449 |     }
[5/16] Compiling IndieFeedback FeedbackViewModel.swift
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackViewModel.swift:110:31: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
108 |
109 |         print("📥 [FeedbackVM] Fetching feedback (status: \(status?.rawValue ?? "all"), page: \(page), bustCache: \(bustCache))...")
110 |         await MainActor.run { isLoading = true }
    |                               |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
    |                               `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
111 |
112 |         // Create a new task for this fetch
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackViewModel.swift:113:26: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
111 |
112 |         // Create a new task for this fetch
113 |         fetchTask = Task {
    |                          `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
114 |             do {
115 |                 var urlString = "\(workerURL)/feedback/list?deviceID=\(deviceID)"
    |                                    `- note: closure captures 'self' which is accessible to code in the current task
116 |                 if let status = status {
117 |                     urlString += "&status=\(status.rawValue)"
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackViewModel.swift:166:21: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
164 |
165 |                 await MainActor.run {
166 |                     self.feedbackItems = feedbackResponse.items
    |                     |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
    |                     `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
167 |                     self.isLoading = false
168 |                     self.errorMessage = nil
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackViewModel.swift:174:21: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
172 |                 print("⚠️ [FeedbackVM] Fetch task was cancelled")
173 |                 await MainActor.run {
174 |                     self.isLoading = false
    |                     |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
    |                     `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
175 |                 }
176 |             } catch {
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackViewModel.swift:178:21: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
176 |             } catch {
177 |                 await MainActor.run {
178 |                     self.isLoading = false
    |                     |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
    |                     `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
179 |
180 |                     // Don't show error message for cancelled requests or if silentError is true
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackViewModel.swift:315:21: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
313 |                 let errorResponse = try JSONDecoder.feedbackDecoder.decode(ErrorResponse.self, from: data)
314 |                 await MainActor.run {
315 |                     self.errorMessage = "Rate limit exceeded. Try again in \(errorResponse.retryAfter ?? 60) seconds."
    |                     |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
    |                     `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
316 |                 }
317 |                 return nil
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackViewModel.swift:328:32: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
326 |             // Update local state optimistically
327 |             await MainActor.run {
328 |                 if let index = feedbackItems.firstIndex(where: { $0.id == feedbackItem.id }) {
    |                                |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
    |                                `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
329 |                     feedbackItems[index].votes = voteResponse.voteCount
330 |                     feedbackItems[index].hasVoted = voteResponse.voted
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackViewModel.swift:376:31: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
374 |
375 |     func fetchRoadmap() async {
376 |         await MainActor.run { isLoading = true }
    |                               |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
    |                               `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
377 |
378 |         do {
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackViewModel.swift:392:17: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
390 |
391 |             await MainActor.run {
392 |                 self.roadmapMilestones = roadmapResponse.milestones
    |                 |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
    |                 `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
393 |                 self.isLoading = false
394 |             }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackViewModel.swift:397:17: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
395 |         } catch {
396 |             await MainActor.run {
397 |                 self.isLoading = false
    |                 |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
    |                 `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
398 |                 self.errorMessage = error.localizedDescription
399 |             }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackViewModel.swift:421:17: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
419 |
420 |             await MainActor.run {
421 |                 self.changelogReleases = changelogResponse.releases
    |                 |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
    |                 `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
422 |             }
423 |         } catch {
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackViewModel.swift:425:17: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
423 |         } catch {
424 |             await MainActor.run {
425 |                 self.errorMessage = error.localizedDescription
    |                 |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
    |                 `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
426 |             }
427 |             print("Error fetching changelog: \(error)")
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackViewModel.swift:446:14: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
444 |     func filterByStatus(_ status: FeedbackStatus?) {
445 |         selectedStatus = status
446 |         Task {
    |              `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
447 |             await fetchFeedback(status: status)
    |                   `- note: closure captures 'self' which is accessible to code in the current task
448 |         }
449 |     }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackViewModel.swift:479:17: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
477 |             print("Error fetching feedback detail: \(error)")
478 |             await MainActor.run {
479 |                 self.errorMessage = error.localizedDescription
    |                 |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
    |                 `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
480 |             }
481 |             return nil
[6/17] Compiling IndieFeedback FeedbackShipped.swift
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackShipped.swift:74:21: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
 72 |             await MainActor.run {
 73 |                 withAnimation {
 74 |                     self.shippedItems = newlyShipped
    |                     |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
    |                     `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
 75 |                 }
 76 |             }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackShipped.swift:196:27: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
194 |         }
195 |         .task {
196 |             await tracker.checkIfDue(using: viewModel)
    |                           |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                           `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'checkIfDue(using:)' risks causing data races between nonisolated and main actor-isolated uses
197 |         }
198 |         .sheet(isPresented: $showingBoard) {
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackShipped.swift:196:27: warning: sending 'self.tracker' risks causing data races; this is an error in the Swift 6 language mode
194 |         }
195 |         .task {
196 |             await tracker.checkIfDue(using: viewModel)
    |                           |- warning: sending 'self.tracker' risks causing data races; this is an error in the Swift 6 language mode
    |                           `- note: sending main actor-isolated 'self.tracker' to nonisolated instance method 'checkIfDue(using:)' risks causing data races between nonisolated and main actor-isolated uses
197 |         }
198 |         .sheet(isPresented: $showingBoard) {
[7/17] Compiling IndieFeedback FeedbackTheme.swift
[8/17] Compiling IndieFeedback FeedbackModels.swift
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackPrompt.swift:122:17: warning: capture of 'self' with non-sendable type 'FeedbackPromptManager?' in a '@Sendable' closure
 86 |
 87 | /// Manages the state and logic for showing feedback prompts.
 88 | class FeedbackPromptManager: ObservableObject {
    |       `- note: class 'FeedbackPromptManager' does not conform to the 'Sendable' protocol
 89 |     @Published var shouldShowPrompt = false
 90 |
    :
120 |                 queue: .main
121 |             ) { [weak self] _ in
122 |                 self?.evaluateTrigger()
    |                 `- warning: capture of 'self' with non-sendable type 'FeedbackPromptManager?' in a '@Sendable' closure
123 |             }
124 |         }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackPrompt.swift:185:17: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
183 |             // Small delay for better UX
184 |             DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) {
185 |                 self.shouldShowPrompt = true
    |                 |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
    |                 `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
186 |             }
187 |         }
[9/17] Compiling IndieFeedback FeedbackPrompt.swift
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackPrompt.swift:122:17: warning: capture of 'self' with non-sendable type 'FeedbackPromptManager?' in a '@Sendable' closure
 86 |
 87 | /// Manages the state and logic for showing feedback prompts.
 88 | class FeedbackPromptManager: ObservableObject {
    |       `- note: class 'FeedbackPromptManager' does not conform to the 'Sendable' protocol
 89 |     @Published var shouldShowPrompt = false
 90 |
    :
120 |                 queue: .main
121 |             ) { [weak self] _ in
122 |                 self?.evaluateTrigger()
    |                 `- warning: capture of 'self' with non-sendable type 'FeedbackPromptManager?' in a '@Sendable' closure
123 |             }
124 |         }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackPrompt.swift:185:17: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
183 |             // Small delay for better UX
184 |             DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) {
185 |                 self.shouldShowPrompt = true
    |                 |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
    |                 `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
186 |             }
187 |         }
[10/17] Compiling IndieFeedback FeedbackEntryPoints.swift
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackListView.swift:91:45: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
 89 |                     ErrorView(message: errorMessage) {
 90 |                         Task {
 91 |                             await viewModel.fetchFeedback(status: selectedStatus)
    |                                             |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                             `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'fetchFeedback(status:page:perPage:silentError:bustCache:)' risks causing data races between nonisolated and main actor-isolated uses
 92 |                         }
 93 |                     }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackListView.swift:127:37: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
125 |             if viewModel.feedbackItems.isEmpty {
126 |                 Task {
127 |                     await viewModel.fetchFeedback()
    |                                     |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'fetchFeedback(status:page:perPage:silentError:bustCache:)' risks causing data races between nonisolated and main actor-isolated uses
128 |                 }
129 |             }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackListView.swift:228:33: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
226 |             }
227 |             .refreshable {
228 |                 await viewModel.refreshFeedback()
    |                                 |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                 `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'refreshFeedback()' risks causing data races between nonisolated and main actor-isolated uses
229 |             }
230 |         }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackListView.swift:245:37: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
243 |             Button(action: {
244 |                 Task {
245 |                     await viewModel.toggleVote(for: item)
    |                                     |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'toggleVote(for:)' risks causing data races between nonisolated and main actor-isolated uses
246 |                 }
247 |             }) {
[11/17] Compiling IndieFeedback FeedbackListView.swift
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackListView.swift:91:45: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
 89 |                     ErrorView(message: errorMessage) {
 90 |                         Task {
 91 |                             await viewModel.fetchFeedback(status: selectedStatus)
    |                                             |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                             `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'fetchFeedback(status:page:perPage:silentError:bustCache:)' risks causing data races between nonisolated and main actor-isolated uses
 92 |                         }
 93 |                     }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackListView.swift:127:37: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
125 |             if viewModel.feedbackItems.isEmpty {
126 |                 Task {
127 |                     await viewModel.fetchFeedback()
    |                                     |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'fetchFeedback(status:page:perPage:silentError:bustCache:)' risks causing data races between nonisolated and main actor-isolated uses
128 |                 }
129 |             }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackListView.swift:228:33: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
226 |             }
227 |             .refreshable {
228 |                 await viewModel.refreshFeedback()
    |                                 |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                 `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'refreshFeedback()' risks causing data races between nonisolated and main actor-isolated uses
229 |             }
230 |         }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackListView.swift:245:37: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
243 |             Button(action: {
244 |                 Task {
245 |                     await viewModel.toggleVote(for: item)
    |                                     |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'toggleVote(for:)' risks causing data races between nonisolated and main actor-isolated uses
246 |                 }
247 |             }) {
[12/17] Compiling IndieFeedback AddFeedbackView.swift
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/AddFeedbackView.swift:163:39: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
161 |         }
162 |
163 |         let results = await viewModel.searchFeedback(query: query)
    |                                       |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                       `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'searchFeedback(query:)' risks causing data races between nonisolated and main actor-isolated uses
164 |         if !Task.isCancelled {
165 |             similarItems = Array(results.prefix(3))
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/AddFeedbackView.swift:176:42: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
174 |
175 |         Task {
176 |             let result = await viewModel.submitFeedback(
    |                                          |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                          `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'submitFeedback(type:title:description:)' risks causing data races between nonisolated and main actor-isolated uses
177 |                 type: inferredType,
178 |                 title: title,
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/AddFeedbackView.swift:200:33: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
198 |             if case .success = result {
199 |                 try? await Task.sleep(nanoseconds: 1_000_000_000)
200 |                 await viewModel.refreshFeedback()
    |                                 |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                 `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'refreshFeedback()' risks causing data races between nonisolated and main actor-isolated uses
201 |             }
202 |         }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/AddFeedbackView.swift:293:53: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
291 |             Button {
292 |                 Task {
293 |                     if let result = await viewModel.toggleVote(for: item) {
    |                                                     |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                                     `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'toggleVote(for:)' risks causing data races between nonisolated and main actor-isolated uses
294 |                         hasVoted = result.voted
295 |                         votes = result.voteCount
[13/17] Compiling IndieFeedback FeedbackButton.swift
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/AddFeedbackView.swift:163:39: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
161 |         }
162 |
163 |         let results = await viewModel.searchFeedback(query: query)
    |                                       |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                       `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'searchFeedback(query:)' risks causing data races between nonisolated and main actor-isolated uses
164 |         if !Task.isCancelled {
165 |             similarItems = Array(results.prefix(3))
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/AddFeedbackView.swift:176:42: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
174 |
175 |         Task {
176 |             let result = await viewModel.submitFeedback(
    |                                          |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                          `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'submitFeedback(type:title:description:)' risks causing data races between nonisolated and main actor-isolated uses
177 |                 type: inferredType,
178 |                 title: title,
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/AddFeedbackView.swift:200:33: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
198 |             if case .success = result {
199 |                 try? await Task.sleep(nanoseconds: 1_000_000_000)
200 |                 await viewModel.refreshFeedback()
    |                                 |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                 `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'refreshFeedback()' risks causing data races between nonisolated and main actor-isolated uses
201 |             }
202 |         }
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/AddFeedbackView.swift:293:53: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
291 |             Button {
292 |                 Task {
293 |                     if let result = await viewModel.toggleVote(for: item) {
    |                                                     |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                                     `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'toggleVote(for:)' risks causing data races between nonisolated and main actor-isolated uses
294 |                         hasVoted = result.voted
295 |                         votes = result.voteCount
[14/17] Emitting module IndieFeedback
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackConfiguration.swift:23:23: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'FeedbackConfiguration' may have shared mutable state; this is an error in the Swift 6 language mode
20 | /// )
21 | /// ```
22 | public class FeedbackConfiguration {
   |              `- note: class 'FeedbackConfiguration' does not conform to the 'Sendable' protocol
23 |     public static let shared = FeedbackConfiguration()
   |                       |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'FeedbackConfiguration' may have shared mutable state; this is an error in the Swift 6 language mode
   |                       |- note: add '@MainActor' to make static property 'shared' part of global actor 'MainActor'
   |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
24 |
25 |     // MARK: - Configuration Properties
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/KeychainHelper.swift:13:16: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'KeychainHelper' may have shared mutable state; this is an error in the Swift 6 language mode
10 | import Security
11 |
12 | class KeychainHelper {
   |       `- note: class 'KeychainHelper' does not conform to the 'Sendable' protocol
13 |     static let shared = KeychainHelper()
   |                |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'KeychainHelper' may have shared mutable state; this is an error in the Swift 6 language mode
   |                |- note: add '@MainActor' to make static property 'shared' part of global actor 'MainActor'
   |                `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
14 |
15 |     private init() {}
[15/17] Compiling IndieFeedback FeedbackConfiguration.swift
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackConfiguration.swift:23:23: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'FeedbackConfiguration' may have shared mutable state; this is an error in the Swift 6 language mode
20 | /// )
21 | /// ```
22 | public class FeedbackConfiguration {
   |              `- note: class 'FeedbackConfiguration' does not conform to the 'Sendable' protocol
23 |     public static let shared = FeedbackConfiguration()
   |                       |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'FeedbackConfiguration' may have shared mutable state; this is an error in the Swift 6 language mode
   |                       |- note: add '@MainActor' to make static property 'shared' part of global actor 'MainActor'
   |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
24 |
25 |     // MARK: - Configuration Properties
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackDetailView.swift:230:25: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
228 |
229 |     private func toggleVoteAndRefresh() async {
230 |         await viewModel.toggleVote(for: currentItem)
    |                         |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                         `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'toggleVote(for:)' risks causing data races between nonisolated and main actor-isolated uses
231 |
232 |         // Refresh details to get updated vote count
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackDetailView.swift:233:39: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
231 |
232 |         // Refresh details to get updated vote count
233 |         let updated = await viewModel.fetchFeedbackDetail(issueNumber: feedbackItem.id)
    |                                       |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                       `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'fetchFeedbackDetail(issueNumber:)' risks causing data races between nonisolated and main actor-isolated uses
234 |         await MainActor.run {
235 |             self.detailedItem = updated
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackDetailView.swift:221:44: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
219 |     private func loadDetails() {
220 |         Task {
221 |             let detailed = await viewModel.fetchFeedbackDetail(issueNumber: feedbackItem.id)
    |                                            |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                            `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'fetchFeedbackDetail(issueNumber:)' risks causing data races between nonisolated and main actor-isolated uses
222 |             await MainActor.run {
223 |                 self.detailedItem = detailed
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackDetailView.swift:247:42: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
245 |
246 |         Task {
247 |             let result = await viewModel.addComment(to: currentItem, comment: commentText)
    |                                          |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                          `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'addComment(to:comment:)' risks causing data races between nonisolated and main actor-isolated uses
248 |
249 |             await MainActor.run {
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackDetailView.swift:260:55: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
258 |                     // Refresh to show new comment
259 |                     Task {
260 |                         let updated = await viewModel.fetchFeedbackDetail(issueNumber: feedbackItem.id)
    |                                                       |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                                       `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'fetchFeedbackDetail(issueNumber:)' risks causing data races between nonisolated and main actor-isolated uses
261 |                         await MainActor.run {
262 |                             self.detailedItem = updated
[16/17] Compiling IndieFeedback FeedbackDetailView.swift
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackConfiguration.swift:23:23: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'FeedbackConfiguration' may have shared mutable state; this is an error in the Swift 6 language mode
20 | /// )
21 | /// ```
22 | public class FeedbackConfiguration {
   |              `- note: class 'FeedbackConfiguration' does not conform to the 'Sendable' protocol
23 |     public static let shared = FeedbackConfiguration()
   |                       |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'FeedbackConfiguration' may have shared mutable state; this is an error in the Swift 6 language mode
   |                       |- note: add '@MainActor' to make static property 'shared' part of global actor 'MainActor'
   |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
24 |
25 |     // MARK: - Configuration Properties
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackDetailView.swift:230:25: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
228 |
229 |     private func toggleVoteAndRefresh() async {
230 |         await viewModel.toggleVote(for: currentItem)
    |                         |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                         `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'toggleVote(for:)' risks causing data races between nonisolated and main actor-isolated uses
231 |
232 |         // Refresh details to get updated vote count
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackDetailView.swift:233:39: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
231 |
232 |         // Refresh details to get updated vote count
233 |         let updated = await viewModel.fetchFeedbackDetail(issueNumber: feedbackItem.id)
    |                                       |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                       `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'fetchFeedbackDetail(issueNumber:)' risks causing data races between nonisolated and main actor-isolated uses
234 |         await MainActor.run {
235 |             self.detailedItem = updated
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackDetailView.swift:221:44: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
219 |     private func loadDetails() {
220 |         Task {
221 |             let detailed = await viewModel.fetchFeedbackDetail(issueNumber: feedbackItem.id)
    |                                            |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                            `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'fetchFeedbackDetail(issueNumber:)' risks causing data races between nonisolated and main actor-isolated uses
222 |             await MainActor.run {
223 |                 self.detailedItem = detailed
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackDetailView.swift:247:42: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
245 |
246 |         Task {
247 |             let result = await viewModel.addComment(to: currentItem, comment: commentText)
    |                                          |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                          `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'addComment(to:comment:)' risks causing data races between nonisolated and main actor-isolated uses
248 |
249 |             await MainActor.run {
/Users/admin/builder/spi-builder-workspace/Sources/IndieFeedback/FeedbackDetailView.swift:260:55: warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
258 |                     // Refresh to show new comment
259 |                     Task {
260 |                         let updated = await viewModel.fetchFeedbackDetail(issueNumber: feedbackItem.id)
    |                                                       |- warning: sending 'self.viewModel' risks causing data races; this is an error in the Swift 6 language mode
    |                                                       `- note: sending main actor-isolated 'self.viewModel' to nonisolated instance method 'fetchFeedbackDetail(issueNumber:)' risks causing data races between nonisolated and main actor-isolated uses
261 |                         await MainActor.run {
262 |                             self.detailedItem = updated
[17/17] Compiling IndieFeedback ShakeToFeedback.swift
Build complete! (9.35s)
Build complete.
{
  "dependencies" : [
  ],
  "manifest_display_name" : "IndieFeedback",
  "name" : "IndieFeedback",
  "path" : "/Users/admin/builder/spi-builder-workspace",
  "platforms" : [
    {
      "name" : "ios",
      "version" : "17.0"
    },
    {
      "name" : "macos",
      "version" : "14.0"
    }
  ],
  "products" : [
    {
      "name" : "IndieFeedback",
      "targets" : [
        "IndieFeedback"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    }
  ],
  "targets" : [
    {
      "c99name" : "IndieFeedback",
      "module_type" : "SwiftTarget",
      "name" : "IndieFeedback",
      "path" : "Sources/IndieFeedback",
      "product_memberships" : [
        "IndieFeedback"
      ],
      "sources" : [
        "AddFeedbackView.swift",
        "FeedbackButton.swift",
        "FeedbackConfiguration.swift",
        "FeedbackDetailView.swift",
        "FeedbackEntryPoints.swift",
        "FeedbackListView.swift",
        "FeedbackModels.swift",
        "FeedbackPrompt.swift",
        "FeedbackShipped.swift",
        "FeedbackTheme.swift",
        "FeedbackViewModel.swift",
        "IndieFeedbackView.swift",
        "KeychainHelper.swift",
        "ShakeToFeedback.swift"
      ],
      "type" : "library"
    }
  ],
  "tools_version" : "5.9"
}
Done.