The Swift Package Index logo.Swift Package Index

Track the adoption of Swift 6 strict concurrency checks for data race safety. How many packages are Ready for Swift 6?

Build Information

Successful build of Hydra, reference 2.0.6 (1d508b), with Swift 6.1 for macOS (SPM) on 26 Apr 2025 10:56:14 UTC.

Swift 6 data race errors: 1

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: 4.61.0
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/malcommac/Hydra.git
Reference: 2.0.6
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/malcommac/Hydra
 * tag               2.0.6      -> FETCH_HEAD
HEAD is now at 1d508bc Merge branch 'release/2.0.6'
Cloned https://github.com/malcommac/Hydra.git
Revision (git rev-parse @):
1d508bc909b1e7c334c1720a4b7d93a5b2d3012a
SUCCESS checkout https://github.com/malcommac/Hydra.git at 2.0.6
========================================
ResolveProductDependencies
========================================
Resolving dependencies ...
{
  "identity": ".resolve-product-dependencies",
  "name": "resolve-dependencies",
  "url": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies",
  "version": "unspecified",
  "path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies",
  "dependencies": [
    {
      "identity": "hydra",
      "name": "Hydra",
      "url": "https://github.com/malcommac/Hydra.git",
      "version": "unspecified",
      "path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies/.build/checkouts/Hydra",
      "dependencies": [
      ]
    }
  ]
}
Fetching https://github.com/malcommac/Hydra.git
[1/1836] Fetching hydra
Fetched https://github.com/malcommac/Hydra.git from cache (1.03s)
Creating working copy for https://github.com/malcommac/Hydra.git
Working copy of https://github.com/malcommac/Hydra.git resolved at 2.0.6 (1d508bc)
warning: '.resolve-product-dependencies': dependency 'hydra' is not used by any target
Found 0 product dependencies
========================================
Build
========================================
Selected platform:         macosSpm
Swift version:             6.1
Building package at path:  $PWD
https://github.com/malcommac/Hydra.git
https://github.com/malcommac/Hydra.git
{
  "dependencies" : [
  ],
  "manifest_display_name" : "Hydra",
  "name" : "Hydra",
  "path" : "/Users/admin/builder/spi-builder-workspace",
  "platforms" : [
    {
      "name" : "macos",
      "version" : "10.10"
    },
    {
      "name" : "ios",
      "version" : "9.0"
    },
    {
      "name" : "watchos",
      "version" : "2.0"
    },
    {
      "name" : "tvos",
      "version" : "9.0"
    }
  ],
  "products" : [
    {
      "name" : "Hydra",
      "targets" : [
        "Hydra"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    }
  ],
  "targets" : [
    {
      "c99name" : "HydraTests",
      "module_type" : "SwiftTarget",
      "name" : "HydraTests",
      "path" : "Tests/HydraTests",
      "sources" : [
        "HydraTests.swift"
      ],
      "target_dependencies" : [
        "Hydra"
      ],
      "type" : "test"
    },
    {
      "c99name" : "Hydra",
      "module_type" : "SwiftTarget",
      "name" : "Hydra",
      "path" : "Sources/Hydra",
      "product_memberships" : [
        "Hydra"
      ],
      "sources" : [
        "Commons.swift",
        "Context.swift",
        "DispatchTimerWrapper.swift",
        "Promise+All.swift",
        "Promise+Always.swift",
        "Promise+Any.swift",
        "Promise+Async.swift",
        "Promise+Await.swift",
        "Promise+Cancel.swift",
        "Promise+Catch.swift",
        "Promise+Defer.swift",
        "Promise+Map.swift",
        "Promise+Observer.swift",
        "Promise+Pass.swift",
        "Promise+Recover.swift",
        "Promise+Reduce.swift",
        "Promise+Retry.swift",
        "Promise+RetryWhen.swift",
        "Promise+State.swift",
        "Promise+Then.swift",
        "Promise+Timeout.swift",
        "Promise+Validate.swift",
        "Promise+Zip.swift",
        "Promise.swift"
      ],
      "type" : "library"
    }
  ],
  "tools_version" : "5.3"
}
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/25] Emitting module Hydra
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise+Await.swift:41:5: warning: let 'awaitContext' is not concurrency-safe because non-'Sendable' type 'Context' may have shared mutable state; this is an error in the Swift 6 language mode
 39 | /// The currently executing tasks run on distinct threads that are managed by the dispatch queue.
 40 | /// The exact number of tasks executing at any given point is variable and depends on system conditions.
 41 | let awaitContext = Context.custom(queue: DispatchQueue(label: "com.hydra.awaitcontext", attributes: .concurrent))
    |     |- warning: let 'awaitContext' is not concurrency-safe because non-'Sendable' type 'Context' may have shared mutable state; this is an error in the Swift 6 language mode
    |     |- note: add '@MainActor' to make let 'awaitContext' part of global actor 'MainActor'
    |     `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 42 |
 43 | /// This define a `..` operator you can use instead of calling `await` func.
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Context.swift:48:13: note: consider making enum 'Context' conform to the 'Sendable' protocol
46 | /// - utility: Should we used when work takes a few seconds to a few minutes (work that may take some time to complete and doesn’t require an immediate result, such as downloading or importing data. Utility tasks typically have a progress bar that is visible to the user. Focuses on providing a balance between responsiveness, performance, and energy efficiency).
47 | /// - custom: provide a custom queue
48 | public enum Context {
   |             `- note: consider making enum 'Context' conform to the 'Sendable' protocol
49 | 	case main
50 | 	case userInteractive
[4/27] Compiling Hydra Promise+Zip.swift
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise.swift:168:10: warning: capture of 'self' with non-sendable type 'Promise<Value>' in a '@Sendable' closure
 33 | import Foundation
 34 |
 35 | public class Promise<Value> {
    |              `- note: generic class 'Promise' does not conform to the 'Sendable' protocol
 36 |
 37 | 	public typealias Resolved = (Value) -> ()
    :
166 | 					// body can throws and fail. throwing a promise's body is equal to
167 | 					// reject it with the same error.
168 | 					try self.body?( { value in
    |          `- warning: capture of 'self' with non-sendable type 'Promise<Value>' in a '@Sendable' closure
169 | 						self.set(state: .resolved(value)) // resolved
170 | 					}, { err in
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise.swift:169:7: warning: capture of 'self' with non-sendable type 'Promise<Value>' in an isolated closure; this is an error in the Swift 6 language mode
 33 | import Foundation
 34 |
 35 | public class Promise<Value> {
    |              `- note: generic class 'Promise' does not conform to the 'Sendable' protocol
 36 |
 37 | 	public typealias Resolved = (Value) -> ()
    :
167 | 					// reject it with the same error.
168 | 					try self.body?( { value in
169 | 						self.set(state: .resolved(value)) // resolved
    |       `- warning: capture of 'self' with non-sendable type 'Promise<Value>' in an isolated closure; this is an error in the Swift 6 language mode
170 | 					}, { err in
171 | 						self.set(state: .rejected(err)) // rejected
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise.swift:171:7: warning: capture of 'self' with non-sendable type 'Promise<Value>' in an isolated closure; this is an error in the Swift 6 language mode
 33 | import Foundation
 34 |
 35 | public class Promise<Value> {
    |              `- note: generic class 'Promise' does not conform to the 'Sendable' protocol
 36 |
 37 | 	public typealias Resolved = (Value) -> ()
    :
169 | 						self.set(state: .resolved(value)) // resolved
170 | 					}, { err in
171 | 						self.set(state: .rejected(err)) // rejected
    |       `- warning: capture of 'self' with non-sendable type 'Promise<Value>' in an isolated closure; this is an error in the Swift 6 language mode
172 | 					}, self.operation)
173 | 				} catch let err {
[5/27] Compiling Hydra Promise.swift
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise.swift:168:10: warning: capture of 'self' with non-sendable type 'Promise<Value>' in a '@Sendable' closure
 33 | import Foundation
 34 |
 35 | public class Promise<Value> {
    |              `- note: generic class 'Promise' does not conform to the 'Sendable' protocol
 36 |
 37 | 	public typealias Resolved = (Value) -> ()
    :
166 | 					// body can throws and fail. throwing a promise's body is equal to
167 | 					// reject it with the same error.
168 | 					try self.body?( { value in
    |          `- warning: capture of 'self' with non-sendable type 'Promise<Value>' in a '@Sendable' closure
169 | 						self.set(state: .resolved(value)) // resolved
170 | 					}, { err in
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise.swift:169:7: warning: capture of 'self' with non-sendable type 'Promise<Value>' in an isolated closure; this is an error in the Swift 6 language mode
 33 | import Foundation
 34 |
 35 | public class Promise<Value> {
    |              `- note: generic class 'Promise' does not conform to the 'Sendable' protocol
 36 |
 37 | 	public typealias Resolved = (Value) -> ()
    :
167 | 					// reject it with the same error.
168 | 					try self.body?( { value in
169 | 						self.set(state: .resolved(value)) // resolved
    |       `- warning: capture of 'self' with non-sendable type 'Promise<Value>' in an isolated closure; this is an error in the Swift 6 language mode
170 | 					}, { err in
171 | 						self.set(state: .rejected(err)) // rejected
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise.swift:171:7: warning: capture of 'self' with non-sendable type 'Promise<Value>' in an isolated closure; this is an error in the Swift 6 language mode
 33 | import Foundation
 34 |
 35 | public class Promise<Value> {
    |              `- note: generic class 'Promise' does not conform to the 'Sendable' protocol
 36 |
 37 | 	public typealias Resolved = (Value) -> ()
    :
169 | 						self.set(state: .resolved(value)) // resolved
170 | 					}, { err in
171 | 						self.set(state: .rejected(err)) // rejected
    |       `- warning: capture of 'self' with non-sendable type 'Promise<Value>' in an isolated closure; this is an error in the Swift 6 language mode
172 | 					}, self.operation)
173 | 				} catch let err {
[6/27] Compiling Hydra Promise+Timeout.swift
[7/27] Compiling Hydra Promise+Validate.swift
[8/27] Compiling Hydra Commons.swift
[9/27] Compiling Hydra Context.swift
[10/27] Compiling Hydra DispatchTimerWrapper.swift
[11/27] Compiling Hydra Promise+Retry.swift
[12/27] Compiling Hydra Promise+RetryWhen.swift
[13/27] Compiling Hydra Promise+Recover.swift
[14/27] Compiling Hydra Promise+Reduce.swift
[15/27] Compiling Hydra Promise+Catch.swift
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise+Defer.swift:54:6: warning: capture of 'resolve' with non-sendable type '(Value) -> ()' in a '@Sendable' closure
52 | 				let fireTime: DispatchTime = .now() + seconds
53 | 				ctx.queue.asyncAfter(deadline: fireTime) {
54 | 					resolve(value)
   |      |- warning: capture of 'resolve' with non-sendable type '(Value) -> ()' in a '@Sendable' closure
   |      `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
55 | 				}
56 | 			}
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise+Defer.swift:54:14: warning: capture of 'value' with non-sendable type 'Value' in a '@Sendable' closure
52 | 				let fireTime: DispatchTime = .now() + seconds
53 | 				ctx.queue.asyncAfter(deadline: fireTime) {
54 | 					resolve(value)
   |              `- warning: capture of 'value' with non-sendable type 'Value' in a '@Sendable' closure
55 | 				}
56 | 			}
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise.swift:35:22: note: consider making generic parameter 'Value' conform to the 'Sendable' protocol
 33 | import Foundation
 34 |
 35 | public class Promise<Value> {
    |                      `- note: consider making generic parameter 'Value' conform to the 'Sendable' protocol
 36 |
 37 | 	public typealias Resolved = (Value) -> ()
[16/27] Compiling Hydra Promise+Defer.swift
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise+Defer.swift:54:6: warning: capture of 'resolve' with non-sendable type '(Value) -> ()' in a '@Sendable' closure
52 | 				let fireTime: DispatchTime = .now() + seconds
53 | 				ctx.queue.asyncAfter(deadline: fireTime) {
54 | 					resolve(value)
   |      |- warning: capture of 'resolve' with non-sendable type '(Value) -> ()' in a '@Sendable' closure
   |      `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
55 | 				}
56 | 			}
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise+Defer.swift:54:14: warning: capture of 'value' with non-sendable type 'Value' in a '@Sendable' closure
52 | 				let fireTime: DispatchTime = .now() + seconds
53 | 				ctx.queue.asyncAfter(deadline: fireTime) {
54 | 					resolve(value)
   |              `- warning: capture of 'value' with non-sendable type 'Value' in a '@Sendable' closure
55 | 				}
56 | 			}
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise.swift:35:22: note: consider making generic parameter 'Value' conform to the 'Sendable' protocol
 33 | import Foundation
 34 |
 35 | public class Promise<Value> {
    |                      `- note: consider making generic parameter 'Value' conform to the 'Sendable' protocol
 36 |
 37 | 	public typealias Resolved = (Value) -> ()
[17/27] Compiling Hydra Promise+Map.swift
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise+Defer.swift:54:6: warning: capture of 'resolve' with non-sendable type '(Value) -> ()' in a '@Sendable' closure
52 | 				let fireTime: DispatchTime = .now() + seconds
53 | 				ctx.queue.asyncAfter(deadline: fireTime) {
54 | 					resolve(value)
   |      |- warning: capture of 'resolve' with non-sendable type '(Value) -> ()' in a '@Sendable' closure
   |      `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
55 | 				}
56 | 			}
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise+Defer.swift:54:14: warning: capture of 'value' with non-sendable type 'Value' in a '@Sendable' closure
52 | 				let fireTime: DispatchTime = .now() + seconds
53 | 				ctx.queue.asyncAfter(deadline: fireTime) {
54 | 					resolve(value)
   |              `- warning: capture of 'value' with non-sendable type 'Value' in a '@Sendable' closure
55 | 				}
56 | 			}
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise.swift:35:22: note: consider making generic parameter 'Value' conform to the 'Sendable' protocol
 33 | import Foundation
 34 |
 35 | public class Promise<Value> {
    |                      `- note: consider making generic parameter 'Value' conform to the 'Sendable' protocol
 36 |
 37 | 	public typealias Resolved = (Value) -> ()
[18/27] Compiling Hydra Promise+All.swift
[19/27] Compiling Hydra Promise+Always.swift
[20/27] Compiling Hydra Promise+Any.swift
[21/27] Compiling Hydra Promise+State.swift
[22/27] Compiling Hydra Promise+Then.swift
[23/27] Compiling Hydra Promise+Async.swift
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise+Async.swift:63:4: warning: capture of 'block' with non-sendable type '() -> ()' in a '@Sendable' closure
61 | 	guard let delay = after else {
62 | 		context.queue.async {
63 | 			block()
   |    |- warning: capture of 'block' with non-sendable type '() -> ()' in a '@Sendable' closure
   |    `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
64 | 		}
65 | 		return
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise+Async.swift:68:3: warning: capture of 'block' with non-sendable type '() -> ()' in a '@Sendable' closure
66 | 	}
67 | 	context.queue.asyncAfter(deadline: .now() + delay) {
68 | 		block()
   |   |- warning: capture of 'block' with non-sendable type '() -> ()' in a '@Sendable' closure
   |   `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
69 | 	}
70 | }
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise+Await.swift:41:5: warning: let 'awaitContext' is not concurrency-safe because non-'Sendable' type 'Context' may have shared mutable state; this is an error in the Swift 6 language mode
 39 | /// The currently executing tasks run on distinct threads that are managed by the dispatch queue.
 40 | /// The exact number of tasks executing at any given point is variable and depends on system conditions.
 41 | let awaitContext = Context.custom(queue: DispatchQueue(label: "com.hydra.awaitcontext", attributes: .concurrent))
    |     |- warning: let 'awaitContext' is not concurrency-safe because non-'Sendable' type 'Context' may have shared mutable state; this is an error in the Swift 6 language mode
    |     |- note: add '@MainActor' to make let 'awaitContext' part of global actor 'MainActor'
    |     `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 42 |
 43 | /// This define a `..` operator you can use instead of calling `await` func.
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Context.swift:48:13: note: consider making enum 'Context' conform to the 'Sendable' protocol
46 | /// - utility: Should we used when work takes a few seconds to a few minutes (work that may take some time to complete and doesn’t require an immediate result, such as downloading or importing data. Utility tasks typically have a progress bar that is visible to the user. Focuses on providing a balance between responsiveness, performance, and energy efficiency).
47 | /// - custom: provide a custom queue
48 | public enum Context {
   |             `- note: consider making enum 'Context' conform to the 'Sendable' protocol
49 | 	case main
50 | 	case userInteractive
[24/27] Compiling Hydra Promise+Await.swift
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise+Async.swift:63:4: warning: capture of 'block' with non-sendable type '() -> ()' in a '@Sendable' closure
61 | 	guard let delay = after else {
62 | 		context.queue.async {
63 | 			block()
   |    |- warning: capture of 'block' with non-sendable type '() -> ()' in a '@Sendable' closure
   |    `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
64 | 		}
65 | 		return
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise+Async.swift:68:3: warning: capture of 'block' with non-sendable type '() -> ()' in a '@Sendable' closure
66 | 	}
67 | 	context.queue.asyncAfter(deadline: .now() + delay) {
68 | 		block()
   |   |- warning: capture of 'block' with non-sendable type '() -> ()' in a '@Sendable' closure
   |   `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
69 | 	}
70 | }
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise+Await.swift:41:5: warning: let 'awaitContext' is not concurrency-safe because non-'Sendable' type 'Context' may have shared mutable state; this is an error in the Swift 6 language mode
 39 | /// The currently executing tasks run on distinct threads that are managed by the dispatch queue.
 40 | /// The exact number of tasks executing at any given point is variable and depends on system conditions.
 41 | let awaitContext = Context.custom(queue: DispatchQueue(label: "com.hydra.awaitcontext", attributes: .concurrent))
    |     |- warning: let 'awaitContext' is not concurrency-safe because non-'Sendable' type 'Context' may have shared mutable state; this is an error in the Swift 6 language mode
    |     |- note: add '@MainActor' to make let 'awaitContext' part of global actor 'MainActor'
    |     `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 42 |
 43 | /// This define a `..` operator you can use instead of calling `await` func.
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Context.swift:48:13: note: consider making enum 'Context' conform to the 'Sendable' protocol
46 | /// - utility: Should we used when work takes a few seconds to a few minutes (work that may take some time to complete and doesn’t require an immediate result, such as downloading or importing data. Utility tasks typically have a progress bar that is visible to the user. Focuses on providing a balance between responsiveness, performance, and energy efficiency).
47 | /// - custom: provide a custom queue
48 | public enum Context {
   |             `- note: consider making enum 'Context' conform to the 'Sendable' protocol
49 | 	case main
50 | 	case userInteractive
[25/27] Compiling Hydra Promise+Cancel.swift
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise+Async.swift:63:4: warning: capture of 'block' with non-sendable type '() -> ()' in a '@Sendable' closure
61 | 	guard let delay = after else {
62 | 		context.queue.async {
63 | 			block()
   |    |- warning: capture of 'block' with non-sendable type '() -> ()' in a '@Sendable' closure
   |    `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
64 | 		}
65 | 		return
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise+Async.swift:68:3: warning: capture of 'block' with non-sendable type '() -> ()' in a '@Sendable' closure
66 | 	}
67 | 	context.queue.asyncAfter(deadline: .now() + delay) {
68 | 		block()
   |   |- warning: capture of 'block' with non-sendable type '() -> ()' in a '@Sendable' closure
   |   `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
69 | 	}
70 | }
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise+Await.swift:41:5: warning: let 'awaitContext' is not concurrency-safe because non-'Sendable' type 'Context' may have shared mutable state; this is an error in the Swift 6 language mode
 39 | /// The currently executing tasks run on distinct threads that are managed by the dispatch queue.
 40 | /// The exact number of tasks executing at any given point is variable and depends on system conditions.
 41 | let awaitContext = Context.custom(queue: DispatchQueue(label: "com.hydra.awaitcontext", attributes: .concurrent))
    |     |- warning: let 'awaitContext' is not concurrency-safe because non-'Sendable' type 'Context' may have shared mutable state; this is an error in the Swift 6 language mode
    |     |- note: add '@MainActor' to make let 'awaitContext' part of global actor 'MainActor'
    |     `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 42 |
 43 | /// This define a `..` operator you can use instead of calling `await` func.
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Context.swift:48:13: note: consider making enum 'Context' conform to the 'Sendable' protocol
46 | /// - utility: Should we used when work takes a few seconds to a few minutes (work that may take some time to complete and doesn’t require an immediate result, such as downloading or importing data. Utility tasks typically have a progress bar that is visible to the user. Focuses on providing a balance between responsiveness, performance, and energy efficiency).
47 | /// - custom: provide a custom queue
48 | public enum Context {
   |             `- note: consider making enum 'Context' conform to the 'Sendable' protocol
49 | 	case main
50 | 	case userInteractive
[26/27] Compiling Hydra Promise+Observer.swift
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise+Observer.swift:60:6: warning: capture of 'handler' with non-sendable type 'Promise<Value>.Observer.ResolveObserver' (aka '(Value) -> ()') in a '@Sendable' closure
58 | 			case (.onResolve(let context, let handler), .resolved(let value)):
59 | 				context.queue.async {
60 | 					handler(value)
   |      |- warning: capture of 'handler' with non-sendable type 'Promise<Value>.Observer.ResolveObserver' (aka '(Value) -> ()') in a '@Sendable' closure
   |      `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
61 | 				}
62 | 			case (.onReject(let context, let handler), .rejected(let error)):
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise+Observer.swift:60:14: warning: capture of 'value' with non-sendable type 'Value' in a '@Sendable' closure
58 | 			case (.onResolve(let context, let handler), .resolved(let value)):
59 | 				context.queue.async {
60 | 					handler(value)
   |              `- warning: capture of 'value' with non-sendable type 'Value' in a '@Sendable' closure
61 | 				}
62 | 			case (.onReject(let context, let handler), .rejected(let error)):
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise.swift:35:22: note: consider making generic parameter 'Value' conform to the 'Sendable' protocol
 33 | import Foundation
 34 |
 35 | public class Promise<Value> {
    |                      `- note: consider making generic parameter 'Value' conform to the 'Sendable' protocol
 36 |
 37 | 	public typealias Resolved = (Value) -> ()
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise+Observer.swift:64:6: warning: capture of 'handler' with non-sendable type 'Promise<Value>.Observer.RejectObserver' (aka '(any Error) -> ()') in a '@Sendable' closure
62 | 			case (.onReject(let context, let handler), .rejected(let error)):
63 | 				context.queue.async {
64 | 					handler(error)
   |      |- warning: capture of 'handler' with non-sendable type 'Promise<Value>.Observer.RejectObserver' (aka '(any Error) -> ()') in a '@Sendable' closure
   |      `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
65 | 				}
66 | 			case (.onCancel(let context, let handler), .cancelled):
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise+Observer.swift:68:6: warning: capture of 'handler' with non-sendable type 'Promise<Value>.Observer.CancelObserver' (aka '() -> ()') in a '@Sendable' closure
66 | 			case (.onCancel(let context, let handler), .cancelled):
67 | 				context.queue.async {
68 | 					handler()
   |      |- warning: capture of 'handler' with non-sendable type 'Promise<Value>.Observer.CancelObserver' (aka '() -> ()') in a '@Sendable' closure
   |      `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
69 | 				}
70 | 			default:
[27/27] Compiling Hydra Promise+Pass.swift
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise+Observer.swift:60:6: warning: capture of 'handler' with non-sendable type 'Promise<Value>.Observer.ResolveObserver' (aka '(Value) -> ()') in a '@Sendable' closure
58 | 			case (.onResolve(let context, let handler), .resolved(let value)):
59 | 				context.queue.async {
60 | 					handler(value)
   |      |- warning: capture of 'handler' with non-sendable type 'Promise<Value>.Observer.ResolveObserver' (aka '(Value) -> ()') in a '@Sendable' closure
   |      `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
61 | 				}
62 | 			case (.onReject(let context, let handler), .rejected(let error)):
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise+Observer.swift:60:14: warning: capture of 'value' with non-sendable type 'Value' in a '@Sendable' closure
58 | 			case (.onResolve(let context, let handler), .resolved(let value)):
59 | 				context.queue.async {
60 | 					handler(value)
   |              `- warning: capture of 'value' with non-sendable type 'Value' in a '@Sendable' closure
61 | 				}
62 | 			case (.onReject(let context, let handler), .rejected(let error)):
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise.swift:35:22: note: consider making generic parameter 'Value' conform to the 'Sendable' protocol
 33 | import Foundation
 34 |
 35 | public class Promise<Value> {
    |                      `- note: consider making generic parameter 'Value' conform to the 'Sendable' protocol
 36 |
 37 | 	public typealias Resolved = (Value) -> ()
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise+Observer.swift:64:6: warning: capture of 'handler' with non-sendable type 'Promise<Value>.Observer.RejectObserver' (aka '(any Error) -> ()') in a '@Sendable' closure
62 | 			case (.onReject(let context, let handler), .rejected(let error)):
63 | 				context.queue.async {
64 | 					handler(error)
   |      |- warning: capture of 'handler' with non-sendable type 'Promise<Value>.Observer.RejectObserver' (aka '(any Error) -> ()') in a '@Sendable' closure
   |      `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
65 | 				}
66 | 			case (.onCancel(let context, let handler), .cancelled):
/Users/admin/builder/spi-builder-workspace/Sources/Hydra/Promise+Observer.swift:68:6: warning: capture of 'handler' with non-sendable type 'Promise<Value>.Observer.CancelObserver' (aka '() -> ()') in a '@Sendable' closure
66 | 			case (.onCancel(let context, let handler), .cancelled):
67 | 				context.queue.async {
68 | 					handler()
   |      |- warning: capture of 'handler' with non-sendable type 'Promise<Value>.Observer.CancelObserver' (aka '() -> ()') in a '@Sendable' closure
   |      `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
69 | 				}
70 | 			default:
Build complete! (5.84s)
Build complete.
{
  "dependencies" : [
  ],
  "manifest_display_name" : "Hydra",
  "name" : "Hydra",
  "path" : "/Users/admin/builder/spi-builder-workspace",
  "platforms" : [
    {
      "name" : "macos",
      "version" : "10.10"
    },
    {
      "name" : "ios",
      "version" : "9.0"
    },
    {
      "name" : "watchos",
      "version" : "2.0"
    },
    {
      "name" : "tvos",
      "version" : "9.0"
    }
  ],
  "products" : [
    {
      "name" : "Hydra",
      "targets" : [
        "Hydra"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    }
  ],
  "targets" : [
    {
      "c99name" : "HydraTests",
      "module_type" : "SwiftTarget",
      "name" : "HydraTests",
      "path" : "Tests/HydraTests",
      "sources" : [
        "HydraTests.swift"
      ],
      "target_dependencies" : [
        "Hydra"
      ],
      "type" : "test"
    },
    {
      "c99name" : "Hydra",
      "module_type" : "SwiftTarget",
      "name" : "Hydra",
      "path" : "Sources/Hydra",
      "product_memberships" : [
        "Hydra"
      ],
      "sources" : [
        "Commons.swift",
        "Context.swift",
        "DispatchTimerWrapper.swift",
        "Promise+All.swift",
        "Promise+Always.swift",
        "Promise+Any.swift",
        "Promise+Async.swift",
        "Promise+Await.swift",
        "Promise+Cancel.swift",
        "Promise+Catch.swift",
        "Promise+Defer.swift",
        "Promise+Map.swift",
        "Promise+Observer.swift",
        "Promise+Pass.swift",
        "Promise+Recover.swift",
        "Promise+Reduce.swift",
        "Promise+Retry.swift",
        "Promise+RetryWhen.swift",
        "Promise+State.swift",
        "Promise+Then.swift",
        "Promise+Timeout.swift",
        "Promise+Validate.swift",
        "Promise+Zip.swift",
        "Promise.swift"
      ],
      "type" : "library"
    }
  ],
  "tools_version" : "5.3"
}
Done.