The Swift Package Index logo.Swift Package Index

Has it really been five years since Swift Package Index launched? Read our anniversary blog post!

Build Information

Successful build of Citadel, reference main (d29285), with Swift 6.1 for Linux on 23 Jun 2025 12:55:30 UTC.

Swift 6 data race errors: 38

Build Command

bash -c docker run --pull=always --rm -v "checkouts-4606859-1":/host -w "$PWD" registry.gitlab.com/finestructure/spi-images:basic-6.1-latest swift build --triple x86_64-unknown-linux-gnu -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 2>&1

Build Log

 63 |
 64 |     func channelInactive(context: ChannelHandlerContext) {
 65 |         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
 66 |             try await self.context?.terminate()
    |                       `- note: closure captures 'self' which is accessible to code in the current task
 67 |             self.context = nil
 68 |             self.pipeChannel = nil
/host/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:90:18: 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
 88 |             }
 89 |         case ChannelEvent.inputClosed:
 90 |             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
 91 |                 try await self.context?.inputClosed()
    |                           `- note: closure captures 'self' which is accessible to code in the current task
 92 |             }
 93 |         default:
[867/875] Compiling Citadel SFTPClient.swift
/host/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:60:13: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 58 |     func handlerAdded(context: ChannelHandlerContext) {
 59 |         context.channel.setOption(ChannelOptions.allowRemoteHalfClosure, value: true).whenFailure { error in
 60 |             context.fireErrorCaught(error)
    |             `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 61 |         }
 62 |     }
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:80:21: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 78 |             } else if event.wantReply {
 79 |                 context.channel.triggerUserOutboundEvent(ChannelFailureEvent()).whenComplete { _ in
 80 |                     context.channel.close(promise: nil)
    |                     `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 81 |                 }
 82 |             }
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:138:37: warning: type 'GlueHandler' does not conform to the 'Sendable' protocol
136 |         }
137 |
138 |         channel.pipeline.addHandler(ours).flatMap {
    |                                     `- warning: type 'GlueHandler' does not conform to the 'Sendable' protocol
139 |             NIOPipeBootstrap(group: channel.eventLoop)
140 |                 .channelOption(ChannelOptions.allowRemoteHalfClosure, value: true)
/host/spi-builder-workspace/Sources/Citadel/NIOGlueHandler.swift:17:13: note: class 'GlueHandler' does not conform to the 'Sendable' protocol
 15 | import NIOCore
 16 |
 17 | final class GlueHandler {
    |             `- note: class 'GlueHandler' does not conform to the 'Sendable' protocol
 18 |     private var partner: GlueHandler?
 19 |
/host/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:142:54: warning: type 'SSHInboundChannelDataWrapper' does not conform to the 'Sendable' protocol
140 |                 .channelOption(ChannelOptions.allowRemoteHalfClosure, value: true)
141 |                 .channelInitializer { pipeChannel in
142 |                     pipeChannel.pipeline.addHandlers(SSHInboundChannelDataWrapper(), theirs)
    |                                                      `- warning: type 'SSHInboundChannelDataWrapper' does not conform to the 'Sendable' protocol
143 |                 }.withPipes(
144 |                     inputDescriptor: dup(handler.stdoutPipe.fileHandleForReading.fileDescriptor),
/host/spi-builder-workspace/Sources/Citadel/ChannelUnwrapper.swift:40:13: note: class 'SSHInboundChannelDataWrapper' does not conform to the 'Sendable' protocol
38 | }
39 |
40 | final class SSHInboundChannelDataWrapper: ChannelInboundHandler {
   |             `- note: class 'SSHInboundChannelDataWrapper' does not conform to the 'Sendable' protocol
41 |     typealias InboundIn = ByteBuffer
42 |     typealias InboundOut = SSHChannelData
/host/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:142:86: warning: type 'GlueHandler' does not conform to the 'Sendable' protocol
140 |                 .channelOption(ChannelOptions.allowRemoteHalfClosure, value: true)
141 |                 .channelInitializer { pipeChannel in
142 |                     pipeChannel.pipeline.addHandlers(SSHInboundChannelDataWrapper(), theirs)
    |                                                                                      `- warning: type 'GlueHandler' does not conform to the 'Sendable' protocol
143 |                 }.withPipes(
144 |                     inputDescriptor: dup(handler.stdoutPipe.fileHandleForReading.fileDescriptor),
/host/spi-builder-workspace/Sources/Citadel/NIOGlueHandler.swift:17:13: note: class 'GlueHandler' does not conform to the 'Sendable' protocol
 15 | import NIOCore
 16 |
 17 | final class GlueHandler {
    |             `- note: class 'GlueHandler' does not conform to the 'Sendable' protocol
 18 |     private var partner: GlueHandler?
 19 |
/host/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:143:19: warning: 'withPipes(inputDescriptor:outputDescriptor:)' is deprecated: renamed to 'takingOwnershipOfDescriptors(input:output:)'
141 |                 .channelInitializer { pipeChannel in
142 |                     pipeChannel.pipeline.addHandlers(SSHInboundChannelDataWrapper(), theirs)
143 |                 }.withPipes(
    |                   |- warning: 'withPipes(inputDescriptor:outputDescriptor:)' is deprecated: renamed to 'takingOwnershipOfDescriptors(input:output:)'
    |                   `- note: use 'takingOwnershipOfDescriptors(input:output:)' instead
144 |                     inputDescriptor: dup(handler.stdoutPipe.fileHandleForReading.fileDescriptor),
145 |                     outputDescriptor: dup(handler.stdinPipe.fileHandleForWriting.fileDescriptor)
/host/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:142:86: warning: capture of 'theirs' with non-sendable type 'GlueHandler' in a '@Sendable' closure
140 |                 .channelOption(ChannelOptions.allowRemoteHalfClosure, value: true)
141 |                 .channelInitializer { pipeChannel in
142 |                     pipeChannel.pipeline.addHandlers(SSHInboundChannelDataWrapper(), theirs)
    |                                                                                      `- warning: capture of 'theirs' with non-sendable type 'GlueHandler' in a '@Sendable' closure
143 |                 }.withPipes(
144 |                     inputDescriptor: dup(handler.stdoutPipe.fileHandleForReading.fileDescriptor),
/host/spi-builder-workspace/Sources/Citadel/NIOGlueHandler.swift:17:13: note: class 'GlueHandler' does not conform to the 'Sendable' protocol
 15 | import NIOCore
 16 |
 17 | final class GlueHandler {
    |             `- note: class 'GlueHandler' does not conform to the 'Sendable' protocol
 18 |     private var partner: GlueHandler?
 19 |
/host/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:144:42: warning: capture of 'handler' with non-sendable type 'ExecOutputHandler' in a '@Sendable' closure
142 |                     pipeChannel.pipeline.addHandlers(SSHInboundChannelDataWrapper(), theirs)
143 |                 }.withPipes(
144 |                     inputDescriptor: dup(handler.stdoutPipe.fileHandleForReading.fileDescriptor),
    |                                          `- warning: capture of 'handler' with non-sendable type 'ExecOutputHandler' in a '@Sendable' closure
145 |                     outputDescriptor: dup(handler.stdinPipe.fileHandleForWriting.fileDescriptor)
146 |                 )
/host/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecDelegate.swift:16:20: note: class 'ExecOutputHandler' does not conform to the 'Sendable' protocol
14 | }
15 |
16 | public final class ExecOutputHandler {
   |                    `- note: class 'ExecOutputHandler' does not conform to the 'Sendable' protocol
17 |     public typealias ExitHandler = @Sendable (ExecExitContext) -> ()
18 |
/host/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:142:86: warning: capture of 'theirs' with non-sendable type 'GlueHandler' in a '@Sendable' closure
140 |                 .channelOption(ChannelOptions.allowRemoteHalfClosure, value: true)
141 |                 .channelInitializer { pipeChannel in
142 |                     pipeChannel.pipeline.addHandlers(SSHInboundChannelDataWrapper(), theirs)
    |                                                                                      `- warning: capture of 'theirs' with non-sendable type 'GlueHandler' in a '@Sendable' closure
143 |                 }.withPipes(
144 |                     inputDescriptor: dup(handler.stdoutPipe.fileHandleForReading.fileDescriptor),
/host/spi-builder-workspace/Sources/Citadel/NIOGlueHandler.swift:17:13: note: class 'GlueHandler' does not conform to the 'Sendable' protocol
 15 | import NIOCore
 16 |
 17 | final class GlueHandler {
    |             `- note: class 'GlueHandler' does not conform to the 'Sendable' protocol
 18 |     private var partner: GlueHandler?
 19 |
/host/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:148:13: warning: capture of 'self' with non-sendable type 'ExecHandler' in a '@Sendable' closure
 38 | }
 39 |
 40 | final class ExecHandler: ChannelDuplexHandler {
    |             `- note: class 'ExecHandler' does not conform to the 'Sendable' protocol
 41 |     typealias InboundIn = SSHChannelData
 42 |     typealias InboundOut = SSHChannelData
    :
146 |                 )
147 |         }.flatMap { pipeChannel -> EventLoopFuture<Channel> in
148 |             self.pipeChannel = pipeChannel
    |             `- warning: capture of 'self' with non-sendable type 'ExecHandler' in a '@Sendable' closure
149 |             let start = channel.eventLoop.makePromise(of: Void.self)
150 |             start.completeWithTask {
/host/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:153:34: warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
151 |                 do {
152 |                     self.context = try await delegate.start(
153 |                         command: event.command,
    |                                  `- warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
154 |                         outputHandler: handler
155 |                     )
/host/spi-builder-workspace/.build/checkouts/swift-nio-ssh/Sources/NIOSSH/Child Channels/ChildChannelUserEvents.swift:126:19: note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
124 |
125 |     /// A request for this session to exec a command.
126 |     public struct ExecRequest: Hashable {
    |                   `- note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
127 |         /// The command to exec.
128 |         public var command: String
/host/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:20:1: warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'NIOSSH'
 18 | import NIOFoundationCompat
 19 | import NIOPosix
 20 | import NIOSSH
    | `- warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'NIOSSH'
 21 |
 22 | #if canImport(Darwin)
/host/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:154:40: warning: capture of 'handler' with non-sendable type 'ExecOutputHandler' in a '@Sendable' closure
152 |                     self.context = try await delegate.start(
153 |                         command: event.command,
154 |                         outputHandler: handler
    |                                        `- warning: capture of 'handler' with non-sendable type 'ExecOutputHandler' in a '@Sendable' closure
155 |                     )
156 |                 } catch {
/host/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecDelegate.swift:16:20: note: class 'ExecOutputHandler' does not conform to the 'Sendable' protocol
14 | }
15 |
16 | public final class ExecOutputHandler {
   |                    `- note: class 'ExecOutputHandler' does not conform to the 'Sendable' protocol
17 |     public typealias ExitHandler = @Sendable (ExecExitContext) -> ()
18 |
/host/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:152:21: warning: capture of 'self' with non-sendable type 'ExecHandler' in a '@Sendable' closure
 38 | }
 39 |
 40 | final class ExecHandler: ChannelDuplexHandler {
    |             `- note: class 'ExecHandler' does not conform to the 'Sendable' protocol
 41 |     typealias InboundIn = SSHChannelData
 42 |     typealias InboundOut = SSHChannelData
    :
150 |             start.completeWithTask {
151 |                 do {
152 |                     self.context = try await delegate.start(
    |                     `- warning: capture of 'self' with non-sendable type 'ExecHandler' in a '@Sendable' closure
153 |                         command: event.command,
154 |                         outputHandler: handler
/host/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:153:34: warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
151 |                 do {
152 |                     self.context = try await delegate.start(
153 |                         command: event.command,
    |                                  `- warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
154 |                         outputHandler: handler
155 |                     )
/host/spi-builder-workspace/.build/checkouts/swift-nio-ssh/Sources/NIOSSH/Child Channels/ChildChannelUserEvents.swift:126:19: note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
124 |
125 |     /// A request for this session to exec a command.
126 |     public struct ExecRequest: Hashable {
    |                   `- note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
127 |         /// The command to exec.
128 |         public var command: String
/host/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:154:40: warning: capture of 'handler' with non-sendable type 'ExecOutputHandler' in a '@Sendable' closure
152 |                     self.context = try await delegate.start(
153 |                         command: event.command,
154 |                         outputHandler: handler
    |                                        `- warning: capture of 'handler' with non-sendable type 'ExecOutputHandler' in a '@Sendable' closure
155 |                     )
156 |                 } catch {
/host/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecDelegate.swift:16:20: note: class 'ExecOutputHandler' does not conform to the 'Sendable' protocol
14 | }
15 |
16 | public final class ExecOutputHandler {
   |                    `- note: class 'ExecOutputHandler' does not conform to the 'Sendable' protocol
17 |     public typealias ExitHandler = @Sendable (ExecExitContext) -> ()
18 |
/host/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:162:20: warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
160 |
161 |             return start.futureResult.flatMap {
162 |                 if event.wantReply {
    |                    `- warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
163 |                     return channel.triggerUserOutboundEvent(ChannelSuccessEvent()).map {
164 |                         pipeChannel
/host/spi-builder-workspace/.build/checkouts/swift-nio-ssh/Sources/NIOSSH/Child Channels/ChildChannelUserEvents.swift:126:19: note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
124 |
125 |     /// A request for this session to exec a command.
126 |     public struct ExecRequest: Hashable {
    |                   `- note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
127 |         /// The command to exec.
128 |         public var command: String
/host/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:181:20: warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
179 |                 channel.close(promise: nil)
180 |             case .failure:
181 |                 if event.wantReply {
    |                    `- warning: capture of 'event' with non-sendable type 'SSHChannelRequestEvent.ExecRequest' in a '@Sendable' closure
182 |                     channel.triggerUserOutboundEvent(ChannelFailureEvent()).whenComplete { _ in
183 |                         channel.close(promise: nil)
/host/spi-builder-workspace/.build/checkouts/swift-nio-ssh/Sources/NIOSSH/Child Channels/ChildChannelUserEvents.swift:126:19: note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
124 |
125 |     /// A request for this session to exec a command.
126 |     public struct ExecRequest: Hashable {
    |                   `- note: struct 'ExecRequest' does not conform to the 'Sendable' protocol
127 |         /// The command to exec.
128 |         public var command: String
/host/spi-builder-workspace/Sources/Citadel/SFTP/Client/SFTPClient.swift:48:13: warning: type 'SSHChannelDataUnwrapper' does not conform to the 'Sendable' protocol
 46 |
 47 |         return channel.pipeline.addHandlers(
 48 |             SSHChannelDataUnwrapper(),
    |             `- warning: type 'SSHChannelDataUnwrapper' does not conform to the 'Sendable' protocol
 49 |             SSHOutboundChannelDataWrapper(),
 50 |             deserializeHandler,
/host/spi-builder-workspace/Sources/Citadel/ChannelUnwrapper.swift:4:13: note: class 'SSHChannelDataUnwrapper' does not conform to the 'Sendable' protocol
 2 | import NIOSSH
 3 |
 4 | final class SSHChannelDataUnwrapper: ChannelInboundHandler {
   |             `- note: class 'SSHChannelDataUnwrapper' does not conform to the 'Sendable' protocol
 5 |     typealias InboundIn = SSHChannelData
 6 |     typealias InboundOut = ByteBuffer
/host/spi-builder-workspace/Sources/Citadel/SFTP/Client/SFTPClient.swift:49:13: warning: type 'SSHOutboundChannelDataWrapper' does not conform to the 'Sendable' protocol
 47 |         return channel.pipeline.addHandlers(
 48 |             SSHChannelDataUnwrapper(),
 49 |             SSHOutboundChannelDataWrapper(),
    |             `- warning: type 'SSHOutboundChannelDataWrapper' does not conform to the 'Sendable' protocol
 50 |             deserializeHandler,
 51 |             serializeHandler,
/host/spi-builder-workspace/Sources/Citadel/ChannelUnwrapper.swift:30:13: note: class 'SSHOutboundChannelDataWrapper' does not conform to the 'Sendable' protocol
28 | }
29 |
30 | final class SSHOutboundChannelDataWrapper: ChannelOutboundHandler {
   |             `- note: class 'SSHOutboundChannelDataWrapper' does not conform to the 'Sendable' protocol
31 |     typealias OutboundIn = ByteBuffer
32 |     typealias OutboundOut = SSHChannelData
/host/spi-builder-workspace/Sources/Citadel/SFTP/Client/SFTPClient.swift:50:13: warning: conformance of 'ByteToMessageHandler<Decoder>' to 'Sendable' is unavailable; this is an error in the Swift 6 language mode
 48 |             SSHChannelDataUnwrapper(),
 49 |             SSHOutboundChannelDataWrapper(),
 50 |             deserializeHandler,
    |             `- warning: conformance of 'ByteToMessageHandler<Decoder>' to 'Sendable' is unavailable; this is an error in the Swift 6 language mode
 51 |             serializeHandler,
 52 |             sftpInboundHandler,
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/Codec.swift:507:1: note: conformance of 'ByteToMessageHandler<Decoder>' to 'Sendable' has been explicitly marked unavailable here
505 |
506 | @available(*, unavailable)
507 | extension ByteToMessageHandler: Sendable {}
    | `- note: conformance of 'ByteToMessageHandler<Decoder>' to 'Sendable' has been explicitly marked unavailable here
508 |
509 | // MARK: ByteToMessageHandler: Test Helpers
/host/spi-builder-workspace/Sources/Citadel/SFTP/Client/SFTPClient.swift:51:13: warning: conformance of 'MessageToByteHandler<Encoder>' to 'Sendable' is unavailable; this is an error in the Swift 6 language mode
 49 |             SSHOutboundChannelDataWrapper(),
 50 |             deserializeHandler,
 51 |             serializeHandler,
    |             `- warning: conformance of 'MessageToByteHandler<Encoder>' to 'Sendable' is unavailable; this is an error in the Swift 6 language mode
 52 |             sftpInboundHandler,
 53 |             CloseErrorHandler(logger: logger)
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/Codec.swift:810:1: note: conformance of 'MessageToByteHandler<Encoder>' to 'Sendable' has been explicitly marked unavailable here
808 |
809 | @available(*, unavailable)
810 | extension MessageToByteHandler: Sendable {}
    | `- note: conformance of 'MessageToByteHandler<Encoder>' to 'Sendable' has been explicitly marked unavailable here
811 |
812 | extension MessageToByteHandler {
/host/spi-builder-workspace/Sources/Citadel/SFTP/Client/SFTPClient.swift:52:13: warning: type 'SFTPClientInboundHandler' does not conform to the 'Sendable' protocol
 50 |             deserializeHandler,
 51 |             serializeHandler,
 52 |             sftpInboundHandler,
    |             `- warning: type 'SFTPClientInboundHandler' does not conform to the 'Sendable' protocol
 53 |             CloseErrorHandler(logger: logger)
 54 |         ).map {
/host/spi-builder-workspace/Sources/Citadel/SFTP/Client/SFTPClientInboundHandler.swift:6:13: note: class 'SFTPClientInboundHandler' does not conform to the 'Sendable' protocol
 4 | import Logging
 5 |
 6 | final class SFTPClientInboundHandler: ChannelInboundHandler {
   |             `- note: class 'SFTPClientInboundHandler' does not conform to the 'Sendable' protocol
 7 |     typealias InboundIn = SFTPMessage
 8 |
/host/spi-builder-workspace/Sources/Citadel/SFTP/Client/SFTPClient.swift:53:13: warning: type 'CloseErrorHandler' does not conform to the 'Sendable' protocol
 51 |             serializeHandler,
 52 |             sftpInboundHandler,
 53 |             CloseErrorHandler(logger: logger)
    |             `- warning: type 'CloseErrorHandler' does not conform to the 'Sendable' protocol
 54 |         ).map {
 55 |             let client = SFTPClient(channel: channel, responses: responses, logger: logger)
/host/spi-builder-workspace/Sources/Citadel/Server.swift:6:13: note: class 'CloseErrorHandler' does not conform to the 'Sendable' protocol
  4 | import NIOConcurrencyHelpers
  5 |
  6 | final class CloseErrorHandler: ChannelInboundHandler {
    |             `- note: class 'CloseErrorHandler' does not conform to the 'Sendable' protocol
  7 |     typealias InboundIn = Any
  8 |     let logger: Logger
/host/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:65: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
 63 |
 64 |     func channelInactive(context: ChannelHandlerContext) {
 65 |         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
 66 |             try await self.context?.terminate()
    |                       `- note: closure captures 'self' which is accessible to code in the current task
 67 |             self.context = nil
 68 |             self.pipeChannel = nil
/host/spi-builder-workspace/Sources/Citadel/Exec/Server/ExecHandler.swift:90:18: 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
 88 |             }
 89 |         case ChannelEvent.inputClosed:
 90 |             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
 91 |                 try await self.context?.inputClosed()
    |                           `- note: closure captures 'self' which is accessible to code in the current task
 92 |             }
 93 |         default:
[868/875] Compiling Citadel SSHKeyTypeDetection.swift
/host/spi-builder-workspace/Sources/Citadel/SSHKeyTypeDetection.swift:50:23: warning: static property 'rsa' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
  6 | /// A `struct` is used instead of a public `enum` so new algorithms can be
  7 | /// added later without breaking source or ABI stability.
  8 | public struct SSHKeyType: RawRepresentable, Equatable, Hashable, CaseIterable, CustomStringConvertible {
    |               `- note: consider making struct 'SSHKeyType' conform to the 'Sendable' protocol
  9 |
 10 |     // MARK: Backing storage for the algorithms currently bundled with Citadel.
    :
 48 |
 49 |     // MARK: Statically known key types
 50 |     public static let rsa        = SSHKeyType(backing: .rsa)
    |                       |- warning: static property 'rsa' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'rsa' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 51 |     public static let ed25519    = SSHKeyType(backing: .ed25519)
 52 |     public static let ecdsaP256  = SSHKeyType(backing: .ecdsaP256)
/host/spi-builder-workspace/Sources/Citadel/SSHKeyTypeDetection.swift:51:23: warning: static property 'ed25519' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
  6 | /// A `struct` is used instead of a public `enum` so new algorithms can be
  7 | /// added later without breaking source or ABI stability.
  8 | public struct SSHKeyType: RawRepresentable, Equatable, Hashable, CaseIterable, CustomStringConvertible {
    |               `- note: consider making struct 'SSHKeyType' conform to the 'Sendable' protocol
  9 |
 10 |     // MARK: Backing storage for the algorithms currently bundled with Citadel.
    :
 49 |     // MARK: Statically known key types
 50 |     public static let rsa        = SSHKeyType(backing: .rsa)
 51 |     public static let ed25519    = SSHKeyType(backing: .ed25519)
    |                       |- warning: static property 'ed25519' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'ed25519' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 52 |     public static let ecdsaP256  = SSHKeyType(backing: .ecdsaP256)
 53 |     public static let ecdsaP384  = SSHKeyType(backing: .ecdsaP384)
/host/spi-builder-workspace/Sources/Citadel/SSHKeyTypeDetection.swift:52:23: warning: static property 'ecdsaP256' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
  6 | /// A `struct` is used instead of a public `enum` so new algorithms can be
  7 | /// added later without breaking source or ABI stability.
  8 | public struct SSHKeyType: RawRepresentable, Equatable, Hashable, CaseIterable, CustomStringConvertible {
    |               `- note: consider making struct 'SSHKeyType' conform to the 'Sendable' protocol
  9 |
 10 |     // MARK: Backing storage for the algorithms currently bundled with Citadel.
    :
 50 |     public static let rsa        = SSHKeyType(backing: .rsa)
 51 |     public static let ed25519    = SSHKeyType(backing: .ed25519)
 52 |     public static let ecdsaP256  = SSHKeyType(backing: .ecdsaP256)
    |                       |- warning: static property 'ecdsaP256' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'ecdsaP256' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 53 |     public static let ecdsaP384  = SSHKeyType(backing: .ecdsaP384)
 54 |     public static let ecdsaP521  = SSHKeyType(backing: .ecdsaP521)
/host/spi-builder-workspace/Sources/Citadel/SSHKeyTypeDetection.swift:53:23: warning: static property 'ecdsaP384' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
  6 | /// A `struct` is used instead of a public `enum` so new algorithms can be
  7 | /// added later without breaking source or ABI stability.
  8 | public struct SSHKeyType: RawRepresentable, Equatable, Hashable, CaseIterable, CustomStringConvertible {
    |               `- note: consider making struct 'SSHKeyType' conform to the 'Sendable' protocol
  9 |
 10 |     // MARK: Backing storage for the algorithms currently bundled with Citadel.
    :
 51 |     public static let ed25519    = SSHKeyType(backing: .ed25519)
 52 |     public static let ecdsaP256  = SSHKeyType(backing: .ecdsaP256)
 53 |     public static let ecdsaP384  = SSHKeyType(backing: .ecdsaP384)
    |                       |- warning: static property 'ecdsaP384' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'ecdsaP384' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 54 |     public static let ecdsaP521  = SSHKeyType(backing: .ecdsaP521)
 55 | }
/host/spi-builder-workspace/Sources/Citadel/SSHKeyTypeDetection.swift:54:23: warning: static property 'ecdsaP521' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
  6 | /// A `struct` is used instead of a public `enum` so new algorithms can be
  7 | /// added later without breaking source or ABI stability.
  8 | public struct SSHKeyType: RawRepresentable, Equatable, Hashable, CaseIterable, CustomStringConvertible {
    |               `- note: consider making struct 'SSHKeyType' conform to the 'Sendable' protocol
  9 |
 10 |     // MARK: Backing storage for the algorithms currently bundled with Citadel.
    :
 52 |     public static let ecdsaP256  = SSHKeyType(backing: .ecdsaP256)
 53 |     public static let ecdsaP384  = SSHKeyType(backing: .ecdsaP384)
 54 |     public static let ecdsaP521  = SSHKeyType(backing: .ecdsaP521)
    |                       |- warning: static property 'ecdsaP521' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'ecdsaP521' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 55 | }
 56 |
/host/spi-builder-workspace/Sources/Citadel/Server.swift:40:13: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 38 |     func handlerAdded(context: ChannelHandlerContext) {
 39 |         context.channel.setOption(ChannelOptions.allowRemoteHalfClosure, value: true).whenFailure { error in
 40 |             context.fireErrorCaught(error)
    |             `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 41 |         }
 42 |     }
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:59:21: warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
 18 | }
 19 |
 20 | final class SubsystemHandler: ChannelDuplexHandler {
    |             `- note: class 'SubsystemHandler' does not conform to the 'Sendable' protocol
 21 |     typealias InboundIn = SSHChannelData
 22 |     typealias InboundOut = SSHChannelData
    :
 57 |             guard let shell = shell, let parent = context.channel.parent else {
 58 |                 _ = context.channel.triggerUserOutboundEvent(ChannelFailureEvent()).flatMap {
 59 |                     self.configured.succeed(())
    |                     `- warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
 60 |                     return context.channel.close()
 61 |                 }
/host/spi-builder-workspace/Sources/Citadel/Server.swift:60:28: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 58 |                 _ = context.channel.triggerUserOutboundEvent(ChannelFailureEvent()).flatMap {
 59 |                     self.configured.succeed(())
 60 |                     return context.channel.close()
    |                            `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 61 |                 }
 62 |                 return
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:67:30: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 65 |             parent.pipeline.handler(type: NIOSSHHandler.self).flatMap { handler in
 66 |                 ShellServerSubsystem.setupChannelHanders(
 67 |                     channel: context.channel,
    |                              `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 68 |                     shell: shell,
 69 |                     logger: .init(label: "nl.orlandos.citadel.sftp-server"),
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:73:31: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 71 |                 )
 72 |             }.flatMap { () -> EventLoopFuture<Void> in
 73 |                 let promise = context.eventLoop.makePromise(of: Void.self)
    |                               `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 74 |                 context.channel.triggerUserOutboundEvent(ChannelSuccessEvent(), promise: promise)
 75 |                 self.configured.succeed(())
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:75:17: warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
 18 | }
 19 |
 20 | final class SubsystemHandler: ChannelDuplexHandler {
    |             `- note: class 'SubsystemHandler' does not conform to the 'Sendable' protocol
 21 |     typealias InboundIn = SSHChannelData
 22 |     typealias InboundOut = SSHChannelData
    :
 73 |                 let promise = context.eventLoop.makePromise(of: Void.self)
 74 |                 context.channel.triggerUserOutboundEvent(ChannelSuccessEvent(), promise: promise)
 75 |                 self.configured.succeed(())
    |                 `- warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
 76 |                 return promise.futureResult
 77 |             }.whenFailure { _ in
/host/spi-builder-workspace/Sources/Citadel/Server.swift:78:17: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 76 |                 return promise.futureResult
 77 |             }.whenFailure { _ in
 78 |                 context.channel.triggerUserOutboundEvent(ChannelFailureEvent(), promise: nil)
    |                 `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 79 |             }
 80 |         case let event as SSHChannelRequestEvent.SubsystemRequest:
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:91:34: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 89 |                 parent.pipeline.handler(type: NIOSSHHandler.self).flatMap { handler in
 90 |                     SFTPServerSubsystem.setupChannelHanders(
 91 |                         channel: context.channel,
    |                                  `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 92 |                         sftp: sftp,
 93 |                         logger: .init(label: "nl.orlandos.citadel.sftp-server"),
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:97:35: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 95 |                     )
 96 |                 }.flatMap { () -> EventLoopFuture<Void> in
 97 |                     let promise = context.eventLoop.makePromise(of: Void.self)
    |                                   `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 98 |                     context.channel.triggerUserOutboundEvent(ChannelSuccessEvent(), promise: promise)
 99 |                     self.configured.succeed(())
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:99:21: warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
 18 | }
 19 |
 20 | final class SubsystemHandler: ChannelDuplexHandler {
    |             `- note: class 'SubsystemHandler' does not conform to the 'Sendable' protocol
 21 |     typealias InboundIn = SSHChannelData
 22 |     typealias InboundOut = SSHChannelData
    :
 97 |                     let promise = context.eventLoop.makePromise(of: Void.self)
 98 |                     context.channel.triggerUserOutboundEvent(ChannelSuccessEvent(), promise: promise)
 99 |                     self.configured.succeed(())
    |                     `- warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
100 |                     return promise.futureResult
101 |                 }.whenFailure { _ in
/host/spi-builder-workspace/Sources/Citadel/Server.swift:102:21: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
100 |                     return promise.futureResult
101 |                 }.whenFailure { _ in
102 |                     context.channel.triggerUserOutboundEvent(ChannelFailureEvent(), promise: nil)
    |                     `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
103 |                 }
104 |             default:
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:114:13: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
112 |     func channelRead(context: ChannelHandlerContext, data: NIOAny) {
113 |         configured.futureResult.whenSuccess {
114 |             context.fireChannelRead(data)
    |             `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
115 |         }
116 |     }
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:114:37: warning: capture of 'data' with non-sendable type 'NIOAny' in a '@Sendable' closure
112 |     func channelRead(context: ChannelHandlerContext, data: NIOAny) {
113 |         configured.futureResult.whenSuccess {
114 |             context.fireChannelRead(data)
    |                                     `- warning: capture of 'data' with non-sendable type 'NIOAny' in a '@Sendable' closure
115 |         }
116 |     }
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/NIOAny.swift:45:15: note: struct 'NIOAny' does not conform to the 'Sendable' protocol
 43 | ///         }
 44 | ///     }
 45 | public struct NIOAny {
    |               `- note: struct 'NIOAny' does not conform to the 'Sendable' protocol
 46 |     @usableFromInline
 47 |     let _storage: _NIOAny
/host/spi-builder-workspace/Sources/Citadel/Server.swift:163:49: warning: type 'any ChannelHandler' does not conform to the 'Sendable' protocol
161 |             handlers.append(ExecHandler(delegate: exec, username: username))
162 |
163 |             return channel.pipeline.addHandlers(handlers)
    |                                                 `- warning: type 'any ChannelHandler' does not conform to the 'Sendable' protocol
164 |         case .directTCPIP(let request):
165 |             guard let delegate = directTCPIP else {
/host/spi-builder-workspace/Sources/Citadel/Server.swift:169:48: warning: type 'DataToBufferCodec' does not conform to the 'Sendable' protocol
167 |             }
168 |
169 |             return channel.pipeline.addHandler(DataToBufferCodec()).flatMap {
    |                                                `- warning: type 'DataToBufferCodec' does not conform to the 'Sendable' protocol
170 |                 return delegate.initializeDirectTCPIPChannel(
171 |                     channel,
/host/spi-builder-workspace/Sources/Citadel/DirectTCPIP/Client/DirectTCPIP+Client.swift:4:13: note: class 'DataToBufferCodec' does not conform to the 'Sendable' protocol
 2 | import NIOSSH
 3 |
 4 | final class DataToBufferCodec: ChannelDuplexHandler {
   |             `- note: class 'DataToBufferCodec' does not conform to the 'Sendable' protocol
 5 |     typealias InboundIn = SSHChannelData
 6 |     typealias InboundOut = ByteBuffer
/host/spi-builder-workspace/Sources/Citadel/Server.swift:270:21: warning: type 'CloseErrorHandler' does not conform to the 'Sendable' protocol
  4 | import NIOConcurrencyHelpers
  5 |
  6 | final class CloseErrorHandler: ChannelInboundHandler {
    |             `- note: class 'CloseErrorHandler' does not conform to the 'Sendable' protocol
  7 |     typealias InboundIn = Any
  8 |     let logger: Logger
    :
268 |                         }
269 |                     ),
270 |                     CloseErrorHandler(logger: logger)
    |                     `- warning: type 'CloseErrorHandler' does not conform to the 'Sendable' protocol
271 |                 ])
272 |             }
/host/spi-builder-workspace/Sources/Citadel/Server.swift:278:11: warning: type 'SSHServer' does not conform to the 'Sendable' protocol
184 | /// The server can be closed using the `close()` method.
185 | /// - Note: This class is not thread safe.
186 | public final class SSHServer {
    |                    `- note: class 'SSHServer' does not conform to the 'Sendable' protocol
187 |     let channel: Channel
188 |     let delegate: CitadelServerDelegate
    :
276 |         return try await bootstrap.bind(host: host, port: port).map { channel in
277 |             SSHServer(channel: channel, logger: logger, delegate: delegate)
278 |         }.get()
    |           `- warning: type 'SSHServer' does not conform to the 'Sendable' protocol
279 |     }
280 | }
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:102:47: warning: converting non-sendable function value to '@Sendable (any Error) -> Void' may introduce data races
100 |         }
101 |
102 |         done.futureResult.whenFailure(context.fireErrorCaught)
    |                                               `- warning: converting non-sendable function value to '@Sendable (any Error) -> Void' may introduce data races
103 |     }
104 |
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:76:31: warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in a '@Sendable' closure
 43 | }
 44 |
 45 | final class ShellServerInboundHandler: ChannelInboundHandler {
    |             `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
 46 |     typealias InboundIn = ByteBuffer
 47 |
    :
 74 |             try await withThrowingTaskGroup(of: Void.self) { group in
 75 |                 group.addTask {
 76 |                     try await self.delegate.startShell(
    |                               `- warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in a '@Sendable' closure
 77 |                         inbound: self.inbound.stream,
 78 |                         outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:79:34: warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in a '@Sendable' closure
 77 |                         inbound: self.inbound.stream,
 78 |                         outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
 79 |                         context: shellContext
    |                                  `- warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in a '@Sendable' closure
 80 |                     )
 81 |                 }
/host/spi-builder-workspace/Sources/Citadel/SFTP/Server/SFTPServer.swift:35:15: note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
 33 | }
 34 |
 35 | public struct SSHShellContext {
    |               `- note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
 36 |     public struct WindowSize {
 37 |         public let columns: Int
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:76:31: warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
 43 | }
 44 |
 45 | final class ShellServerInboundHandler: ChannelInboundHandler {
    |             `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
 46 |     typealias InboundIn = ByteBuffer
 47 |
    :
 74 |             try await withThrowingTaskGroup(of: Void.self) { group in
 75 |                 group.addTask {
 76 |                     try await self.delegate.startShell(
    |                               `- warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
 77 |                         inbound: self.inbound.stream,
 78 |                         outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:79:34: warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in an isolated closure; this is an error in the Swift 6 language mode
 77 |                         inbound: self.inbound.stream,
 78 |                         outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
 79 |                         context: shellContext
    |                                  `- warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in an isolated closure; this is an error in the Swift 6 language mode
 80 |                     )
 81 |                 }
/host/spi-builder-workspace/Sources/Citadel/SFTP/Server/SFTPServer.swift:35:15: note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
 33 | }
 34 |
 35 | public struct SSHShellContext {
    |               `- note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
 36 |     public struct WindowSize {
 37 |         public let columns: Int
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:76:31: warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
 43 | }
 44 |
 45 | final class ShellServerInboundHandler: ChannelInboundHandler {
    |             `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
 46 |     typealias InboundIn = ByteBuffer
 47 |
    :
 74 |             try await withThrowingTaskGroup(of: Void.self) { group in
 75 |                 group.addTask {
 76 |                     try await self.delegate.startShell(
    |                               `- warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
 77 |                         inbound: self.inbound.stream,
 78 |                         outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:79:34: warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in an isolated closure; this is an error in the Swift 6 language mode
 77 |                         inbound: self.inbound.stream,
 78 |                         outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
 79 |                         context: shellContext
    |                                  `- warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in an isolated closure; this is an error in the Swift 6 language mode
 80 |                     )
 81 |                 }
/host/spi-builder-workspace/Sources/Citadel/SFTP/Server/SFTPServer.swift:35:15: note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
 33 | }
 34 |
 35 | public struct SSHShellContext {
    |               `- note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
 36 |     public struct WindowSize {
 37 |         public let columns: Int
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:84:46: warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
 43 | }
 44 |
 45 | final class ShellServerInboundHandler: ChannelInboundHandler {
    |             `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
 46 |     typealias InboundIn = ByteBuffer
 47 |
    :
 82 |
 83 |                 group.addTask {
 84 |                     for try await message in self.outbound.stream {
    |                                              `- warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
 85 |                         switch message.event {
 86 |                         case .stdout(let data):
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:134:13: warning: type 'SSHChannelDataUnwrapper' does not conform to the 'Sendable' protocol
132 |
133 |         return channel.pipeline.addHandlers(
134 |             SSHChannelDataUnwrapper(),
    |             `- warning: type 'SSHChannelDataUnwrapper' does not conform to the 'Sendable' protocol
135 |             SSHOutboundChannelDataWrapper(),
136 |             shellInboundHandler,
/host/spi-builder-workspace/Sources/Citadel/ChannelUnwrapper.swift:4:13: note: class 'SSHChannelDataUnwrapper' does not conform to the 'Sendable' protocol
 2 | import NIOSSH
 3 |
 4 | final class SSHChannelDataUnwrapper: ChannelInboundHandler {
   |             `- note: class 'SSHChannelDataUnwrapper' does not conform to the 'Sendable' protocol
 5 |     typealias InboundIn = SSHChannelData
 6 |     typealias InboundOut = ByteBuffer
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:135:13: warning: type 'SSHOutboundChannelDataWrapper' does not conform to the 'Sendable' protocol
133 |         return channel.pipeline.addHandlers(
134 |             SSHChannelDataUnwrapper(),
135 |             SSHOutboundChannelDataWrapper(),
    |             `- warning: type 'SSHOutboundChannelDataWrapper' does not conform to the 'Sendable' protocol
136 |             shellInboundHandler,
137 |             CloseErrorHandler(logger: logger)
/host/spi-builder-workspace/Sources/Citadel/ChannelUnwrapper.swift:30:13: note: class 'SSHOutboundChannelDataWrapper' does not conform to the 'Sendable' protocol
28 | }
29 |
30 | final class SSHOutboundChannelDataWrapper: ChannelOutboundHandler {
   |             `- note: class 'SSHOutboundChannelDataWrapper' does not conform to the 'Sendable' protocol
31 |     typealias OutboundIn = ByteBuffer
32 |     typealias OutboundOut = SSHChannelData
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:136:13: warning: type 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
 43 | }
 44 |
 45 | final class ShellServerInboundHandler: ChannelInboundHandler {
    |             `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
 46 |     typealias InboundIn = ByteBuffer
 47 |
    :
134 |             SSHChannelDataUnwrapper(),
135 |             SSHOutboundChannelDataWrapper(),
136 |             shellInboundHandler,
    |             `- warning: type 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
137 |             CloseErrorHandler(logger: logger)
138 |         )
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:137:13: warning: type 'CloseErrorHandler' does not conform to the 'Sendable' protocol
135 |             SSHOutboundChannelDataWrapper(),
136 |             shellInboundHandler,
137 |             CloseErrorHandler(logger: logger)
    |             `- warning: type 'CloseErrorHandler' does not conform to the 'Sendable' protocol
138 |         )
139 |     }
/host/spi-builder-workspace/Sources/Citadel/Server.swift:6:13: note: class 'CloseErrorHandler' does not conform to the 'Sendable' protocol
  4 | import NIOConcurrencyHelpers
  5 |
  6 | final class CloseErrorHandler: ChannelInboundHandler {
    |             `- note: class 'CloseErrorHandler' does not conform to the 'Sendable' protocol
  7 |     typealias InboundIn = Any
  8 |     let logger: Logger
/host/spi-builder-workspace/Sources/Citadel/TTY/Client/TTY.swift:124:13: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
122 |         context.channel.setOption(ChannelOptions.allowRemoteHalfClosure, value: true).whenFailure { error in
123 |             self.logger.debug("Failed to set allowRemoteHalfClosure: \(error)")
124 |             context.fireErrorCaught(error)
    |             `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
125 |         }
126 |     }
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/TTY/Client/TTY.swift:285:17: warning: capture of 'self' with non-sendable type 'SSHClient' in a '@Sendable' closure; this is an error in the Swift 6 language mode
283 |                 streamContinuation.yield(.stderr(stderr))
284 |             case .eof(let error):
285 |                 self.logger.debug("EOF triggered, ending the command stream.")
    |                 `- warning: capture of 'self' with non-sendable type 'SSHClient' in a '@Sendable' closure; this is an error in the Swift 6 language mode
286 |                 if let error {
287 |                     streamContinuation.finish(throwing: error)
/host/spi-builder-workspace/Sources/Citadel/Client.swift:112:20: note: class 'SSHClient' does not conform to the 'Sendable' protocol
110 |
111 | /// Represents an SSH connection.
112 | public final class SSHClient {
    |                    `- note: class 'SSHClient' does not conform to the 'Sendable' protocol
113 |     private(set) var session: SSHClientSession
114 |     private var userInitiatedClose = false
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:75:31: 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
 73 |         done.completeWithTask {
 74 |             try await withThrowingTaskGroup(of: Void.self) { group in
 75 |                 group.addTask {
    |                               `- 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
 76 |                     try await self.delegate.startShell(
    |                               `- note: closure captures non-Sendable 'self'
 77 |                         inbound: self.inbound.stream,
 78 |                         outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
 79 |                         context: shellContext
    |                                  `- note: closure captures non-Sendable 'shellContext'
 80 |                     )
 81 |                 }
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:83:31: 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
 81 |                 }
 82 |
 83 |                 group.addTask {
    |                               `- 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
 84 |                     for try await message in self.outbound.stream {
    |                                              `- note: closure captures 'self' which is accessible to code in the current task
 85 |                         switch message.event {
 86 |                         case .stdout(let data):
/host/spi-builder-workspace/Sources/Citadel/TTY/Client/TTY.swift:467: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
465 |         )
466 |
467 |         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
468 |             do {
469 |                 let stream = try await executeCommandStream(command, inShell: inShell)
    |                                        `- note: closure captures 'self' which is accessible to code in the current task
470 |                 for try await chunk in stream {
471 |                     switch chunk {
[869/875] Compiling Citadel Server.swift
/host/spi-builder-workspace/Sources/Citadel/SSHKeyTypeDetection.swift:50:23: warning: static property 'rsa' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
  6 | /// A `struct` is used instead of a public `enum` so new algorithms can be
  7 | /// added later without breaking source or ABI stability.
  8 | public struct SSHKeyType: RawRepresentable, Equatable, Hashable, CaseIterable, CustomStringConvertible {
    |               `- note: consider making struct 'SSHKeyType' conform to the 'Sendable' protocol
  9 |
 10 |     // MARK: Backing storage for the algorithms currently bundled with Citadel.
    :
 48 |
 49 |     // MARK: Statically known key types
 50 |     public static let rsa        = SSHKeyType(backing: .rsa)
    |                       |- warning: static property 'rsa' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'rsa' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 51 |     public static let ed25519    = SSHKeyType(backing: .ed25519)
 52 |     public static let ecdsaP256  = SSHKeyType(backing: .ecdsaP256)
/host/spi-builder-workspace/Sources/Citadel/SSHKeyTypeDetection.swift:51:23: warning: static property 'ed25519' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
  6 | /// A `struct` is used instead of a public `enum` so new algorithms can be
  7 | /// added later without breaking source or ABI stability.
  8 | public struct SSHKeyType: RawRepresentable, Equatable, Hashable, CaseIterable, CustomStringConvertible {
    |               `- note: consider making struct 'SSHKeyType' conform to the 'Sendable' protocol
  9 |
 10 |     // MARK: Backing storage for the algorithms currently bundled with Citadel.
    :
 49 |     // MARK: Statically known key types
 50 |     public static let rsa        = SSHKeyType(backing: .rsa)
 51 |     public static let ed25519    = SSHKeyType(backing: .ed25519)
    |                       |- warning: static property 'ed25519' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'ed25519' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 52 |     public static let ecdsaP256  = SSHKeyType(backing: .ecdsaP256)
 53 |     public static let ecdsaP384  = SSHKeyType(backing: .ecdsaP384)
/host/spi-builder-workspace/Sources/Citadel/SSHKeyTypeDetection.swift:52:23: warning: static property 'ecdsaP256' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
  6 | /// A `struct` is used instead of a public `enum` so new algorithms can be
  7 | /// added later without breaking source or ABI stability.
  8 | public struct SSHKeyType: RawRepresentable, Equatable, Hashable, CaseIterable, CustomStringConvertible {
    |               `- note: consider making struct 'SSHKeyType' conform to the 'Sendable' protocol
  9 |
 10 |     // MARK: Backing storage for the algorithms currently bundled with Citadel.
    :
 50 |     public static let rsa        = SSHKeyType(backing: .rsa)
 51 |     public static let ed25519    = SSHKeyType(backing: .ed25519)
 52 |     public static let ecdsaP256  = SSHKeyType(backing: .ecdsaP256)
    |                       |- warning: static property 'ecdsaP256' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'ecdsaP256' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 53 |     public static let ecdsaP384  = SSHKeyType(backing: .ecdsaP384)
 54 |     public static let ecdsaP521  = SSHKeyType(backing: .ecdsaP521)
/host/spi-builder-workspace/Sources/Citadel/SSHKeyTypeDetection.swift:53:23: warning: static property 'ecdsaP384' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
  6 | /// A `struct` is used instead of a public `enum` so new algorithms can be
  7 | /// added later without breaking source or ABI stability.
  8 | public struct SSHKeyType: RawRepresentable, Equatable, Hashable, CaseIterable, CustomStringConvertible {
    |               `- note: consider making struct 'SSHKeyType' conform to the 'Sendable' protocol
  9 |
 10 |     // MARK: Backing storage for the algorithms currently bundled with Citadel.
    :
 51 |     public static let ed25519    = SSHKeyType(backing: .ed25519)
 52 |     public static let ecdsaP256  = SSHKeyType(backing: .ecdsaP256)
 53 |     public static let ecdsaP384  = SSHKeyType(backing: .ecdsaP384)
    |                       |- warning: static property 'ecdsaP384' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'ecdsaP384' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 54 |     public static let ecdsaP521  = SSHKeyType(backing: .ecdsaP521)
 55 | }
/host/spi-builder-workspace/Sources/Citadel/SSHKeyTypeDetection.swift:54:23: warning: static property 'ecdsaP521' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
  6 | /// A `struct` is used instead of a public `enum` so new algorithms can be
  7 | /// added later without breaking source or ABI stability.
  8 | public struct SSHKeyType: RawRepresentable, Equatable, Hashable, CaseIterable, CustomStringConvertible {
    |               `- note: consider making struct 'SSHKeyType' conform to the 'Sendable' protocol
  9 |
 10 |     // MARK: Backing storage for the algorithms currently bundled with Citadel.
    :
 52 |     public static let ecdsaP256  = SSHKeyType(backing: .ecdsaP256)
 53 |     public static let ecdsaP384  = SSHKeyType(backing: .ecdsaP384)
 54 |     public static let ecdsaP521  = SSHKeyType(backing: .ecdsaP521)
    |                       |- warning: static property 'ecdsaP521' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'ecdsaP521' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 55 | }
 56 |
/host/spi-builder-workspace/Sources/Citadel/Server.swift:40:13: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 38 |     func handlerAdded(context: ChannelHandlerContext) {
 39 |         context.channel.setOption(ChannelOptions.allowRemoteHalfClosure, value: true).whenFailure { error in
 40 |             context.fireErrorCaught(error)
    |             `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 41 |         }
 42 |     }
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:59:21: warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
 18 | }
 19 |
 20 | final class SubsystemHandler: ChannelDuplexHandler {
    |             `- note: class 'SubsystemHandler' does not conform to the 'Sendable' protocol
 21 |     typealias InboundIn = SSHChannelData
 22 |     typealias InboundOut = SSHChannelData
    :
 57 |             guard let shell = shell, let parent = context.channel.parent else {
 58 |                 _ = context.channel.triggerUserOutboundEvent(ChannelFailureEvent()).flatMap {
 59 |                     self.configured.succeed(())
    |                     `- warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
 60 |                     return context.channel.close()
 61 |                 }
/host/spi-builder-workspace/Sources/Citadel/Server.swift:60:28: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 58 |                 _ = context.channel.triggerUserOutboundEvent(ChannelFailureEvent()).flatMap {
 59 |                     self.configured.succeed(())
 60 |                     return context.channel.close()
    |                            `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 61 |                 }
 62 |                 return
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:67:30: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 65 |             parent.pipeline.handler(type: NIOSSHHandler.self).flatMap { handler in
 66 |                 ShellServerSubsystem.setupChannelHanders(
 67 |                     channel: context.channel,
    |                              `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 68 |                     shell: shell,
 69 |                     logger: .init(label: "nl.orlandos.citadel.sftp-server"),
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:73:31: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 71 |                 )
 72 |             }.flatMap { () -> EventLoopFuture<Void> in
 73 |                 let promise = context.eventLoop.makePromise(of: Void.self)
    |                               `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 74 |                 context.channel.triggerUserOutboundEvent(ChannelSuccessEvent(), promise: promise)
 75 |                 self.configured.succeed(())
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:75:17: warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
 18 | }
 19 |
 20 | final class SubsystemHandler: ChannelDuplexHandler {
    |             `- note: class 'SubsystemHandler' does not conform to the 'Sendable' protocol
 21 |     typealias InboundIn = SSHChannelData
 22 |     typealias InboundOut = SSHChannelData
    :
 73 |                 let promise = context.eventLoop.makePromise(of: Void.self)
 74 |                 context.channel.triggerUserOutboundEvent(ChannelSuccessEvent(), promise: promise)
 75 |                 self.configured.succeed(())
    |                 `- warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
 76 |                 return promise.futureResult
 77 |             }.whenFailure { _ in
/host/spi-builder-workspace/Sources/Citadel/Server.swift:78:17: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 76 |                 return promise.futureResult
 77 |             }.whenFailure { _ in
 78 |                 context.channel.triggerUserOutboundEvent(ChannelFailureEvent(), promise: nil)
    |                 `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 79 |             }
 80 |         case let event as SSHChannelRequestEvent.SubsystemRequest:
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:91:34: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 89 |                 parent.pipeline.handler(type: NIOSSHHandler.self).flatMap { handler in
 90 |                     SFTPServerSubsystem.setupChannelHanders(
 91 |                         channel: context.channel,
    |                                  `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 92 |                         sftp: sftp,
 93 |                         logger: .init(label: "nl.orlandos.citadel.sftp-server"),
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:97:35: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 95 |                     )
 96 |                 }.flatMap { () -> EventLoopFuture<Void> in
 97 |                     let promise = context.eventLoop.makePromise(of: Void.self)
    |                                   `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 98 |                     context.channel.triggerUserOutboundEvent(ChannelSuccessEvent(), promise: promise)
 99 |                     self.configured.succeed(())
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:99:21: warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
 18 | }
 19 |
 20 | final class SubsystemHandler: ChannelDuplexHandler {
    |             `- note: class 'SubsystemHandler' does not conform to the 'Sendable' protocol
 21 |     typealias InboundIn = SSHChannelData
 22 |     typealias InboundOut = SSHChannelData
    :
 97 |                     let promise = context.eventLoop.makePromise(of: Void.self)
 98 |                     context.channel.triggerUserOutboundEvent(ChannelSuccessEvent(), promise: promise)
 99 |                     self.configured.succeed(())
    |                     `- warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
100 |                     return promise.futureResult
101 |                 }.whenFailure { _ in
/host/spi-builder-workspace/Sources/Citadel/Server.swift:102:21: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
100 |                     return promise.futureResult
101 |                 }.whenFailure { _ in
102 |                     context.channel.triggerUserOutboundEvent(ChannelFailureEvent(), promise: nil)
    |                     `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
103 |                 }
104 |             default:
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:114:13: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
112 |     func channelRead(context: ChannelHandlerContext, data: NIOAny) {
113 |         configured.futureResult.whenSuccess {
114 |             context.fireChannelRead(data)
    |             `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
115 |         }
116 |     }
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:114:37: warning: capture of 'data' with non-sendable type 'NIOAny' in a '@Sendable' closure
112 |     func channelRead(context: ChannelHandlerContext, data: NIOAny) {
113 |         configured.futureResult.whenSuccess {
114 |             context.fireChannelRead(data)
    |                                     `- warning: capture of 'data' with non-sendable type 'NIOAny' in a '@Sendable' closure
115 |         }
116 |     }
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/NIOAny.swift:45:15: note: struct 'NIOAny' does not conform to the 'Sendable' protocol
 43 | ///         }
 44 | ///     }
 45 | public struct NIOAny {
    |               `- note: struct 'NIOAny' does not conform to the 'Sendable' protocol
 46 |     @usableFromInline
 47 |     let _storage: _NIOAny
/host/spi-builder-workspace/Sources/Citadel/Server.swift:163:49: warning: type 'any ChannelHandler' does not conform to the 'Sendable' protocol
161 |             handlers.append(ExecHandler(delegate: exec, username: username))
162 |
163 |             return channel.pipeline.addHandlers(handlers)
    |                                                 `- warning: type 'any ChannelHandler' does not conform to the 'Sendable' protocol
164 |         case .directTCPIP(let request):
165 |             guard let delegate = directTCPIP else {
/host/spi-builder-workspace/Sources/Citadel/Server.swift:169:48: warning: type 'DataToBufferCodec' does not conform to the 'Sendable' protocol
167 |             }
168 |
169 |             return channel.pipeline.addHandler(DataToBufferCodec()).flatMap {
    |                                                `- warning: type 'DataToBufferCodec' does not conform to the 'Sendable' protocol
170 |                 return delegate.initializeDirectTCPIPChannel(
171 |                     channel,
/host/spi-builder-workspace/Sources/Citadel/DirectTCPIP/Client/DirectTCPIP+Client.swift:4:13: note: class 'DataToBufferCodec' does not conform to the 'Sendable' protocol
 2 | import NIOSSH
 3 |
 4 | final class DataToBufferCodec: ChannelDuplexHandler {
   |             `- note: class 'DataToBufferCodec' does not conform to the 'Sendable' protocol
 5 |     typealias InboundIn = SSHChannelData
 6 |     typealias InboundOut = ByteBuffer
/host/spi-builder-workspace/Sources/Citadel/Server.swift:270:21: warning: type 'CloseErrorHandler' does not conform to the 'Sendable' protocol
  4 | import NIOConcurrencyHelpers
  5 |
  6 | final class CloseErrorHandler: ChannelInboundHandler {
    |             `- note: class 'CloseErrorHandler' does not conform to the 'Sendable' protocol
  7 |     typealias InboundIn = Any
  8 |     let logger: Logger
    :
268 |                         }
269 |                     ),
270 |                     CloseErrorHandler(logger: logger)
    |                     `- warning: type 'CloseErrorHandler' does not conform to the 'Sendable' protocol
271 |                 ])
272 |             }
/host/spi-builder-workspace/Sources/Citadel/Server.swift:278:11: warning: type 'SSHServer' does not conform to the 'Sendable' protocol
184 | /// The server can be closed using the `close()` method.
185 | /// - Note: This class is not thread safe.
186 | public final class SSHServer {
    |                    `- note: class 'SSHServer' does not conform to the 'Sendable' protocol
187 |     let channel: Channel
188 |     let delegate: CitadelServerDelegate
    :
276 |         return try await bootstrap.bind(host: host, port: port).map { channel in
277 |             SSHServer(channel: channel, logger: logger, delegate: delegate)
278 |         }.get()
    |           `- warning: type 'SSHServer' does not conform to the 'Sendable' protocol
279 |     }
280 | }
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:102:47: warning: converting non-sendable function value to '@Sendable (any Error) -> Void' may introduce data races
100 |         }
101 |
102 |         done.futureResult.whenFailure(context.fireErrorCaught)
    |                                               `- warning: converting non-sendable function value to '@Sendable (any Error) -> Void' may introduce data races
103 |     }
104 |
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:76:31: warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in a '@Sendable' closure
 43 | }
 44 |
 45 | final class ShellServerInboundHandler: ChannelInboundHandler {
    |             `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
 46 |     typealias InboundIn = ByteBuffer
 47 |
    :
 74 |             try await withThrowingTaskGroup(of: Void.self) { group in
 75 |                 group.addTask {
 76 |                     try await self.delegate.startShell(
    |                               `- warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in a '@Sendable' closure
 77 |                         inbound: self.inbound.stream,
 78 |                         outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:79:34: warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in a '@Sendable' closure
 77 |                         inbound: self.inbound.stream,
 78 |                         outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
 79 |                         context: shellContext
    |                                  `- warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in a '@Sendable' closure
 80 |                     )
 81 |                 }
/host/spi-builder-workspace/Sources/Citadel/SFTP/Server/SFTPServer.swift:35:15: note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
 33 | }
 34 |
 35 | public struct SSHShellContext {
    |               `- note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
 36 |     public struct WindowSize {
 37 |         public let columns: Int
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:76:31: warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
 43 | }
 44 |
 45 | final class ShellServerInboundHandler: ChannelInboundHandler {
    |             `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
 46 |     typealias InboundIn = ByteBuffer
 47 |
    :
 74 |             try await withThrowingTaskGroup(of: Void.self) { group in
 75 |                 group.addTask {
 76 |                     try await self.delegate.startShell(
    |                               `- warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
 77 |                         inbound: self.inbound.stream,
 78 |                         outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:79:34: warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in an isolated closure; this is an error in the Swift 6 language mode
 77 |                         inbound: self.inbound.stream,
 78 |                         outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
 79 |                         context: shellContext
    |                                  `- warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in an isolated closure; this is an error in the Swift 6 language mode
 80 |                     )
 81 |                 }
/host/spi-builder-workspace/Sources/Citadel/SFTP/Server/SFTPServer.swift:35:15: note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
 33 | }
 34 |
 35 | public struct SSHShellContext {
    |               `- note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
 36 |     public struct WindowSize {
 37 |         public let columns: Int
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:76:31: warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
 43 | }
 44 |
 45 | final class ShellServerInboundHandler: ChannelInboundHandler {
    |             `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
 46 |     typealias InboundIn = ByteBuffer
 47 |
    :
 74 |             try await withThrowingTaskGroup(of: Void.self) { group in
 75 |                 group.addTask {
 76 |                     try await self.delegate.startShell(
    |                               `- warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
 77 |                         inbound: self.inbound.stream,
 78 |                         outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:79:34: warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in an isolated closure; this is an error in the Swift 6 language mode
 77 |                         inbound: self.inbound.stream,
 78 |                         outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
 79 |                         context: shellContext
    |                                  `- warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in an isolated closure; this is an error in the Swift 6 language mode
 80 |                     )
 81 |                 }
/host/spi-builder-workspace/Sources/Citadel/SFTP/Server/SFTPServer.swift:35:15: note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
 33 | }
 34 |
 35 | public struct SSHShellContext {
    |               `- note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
 36 |     public struct WindowSize {
 37 |         public let columns: Int
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:84:46: warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
 43 | }
 44 |
 45 | final class ShellServerInboundHandler: ChannelInboundHandler {
    |             `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
 46 |     typealias InboundIn = ByteBuffer
 47 |
    :
 82 |
 83 |                 group.addTask {
 84 |                     for try await message in self.outbound.stream {
    |                                              `- warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
 85 |                         switch message.event {
 86 |                         case .stdout(let data):
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:134:13: warning: type 'SSHChannelDataUnwrapper' does not conform to the 'Sendable' protocol
132 |
133 |         return channel.pipeline.addHandlers(
134 |             SSHChannelDataUnwrapper(),
    |             `- warning: type 'SSHChannelDataUnwrapper' does not conform to the 'Sendable' protocol
135 |             SSHOutboundChannelDataWrapper(),
136 |             shellInboundHandler,
/host/spi-builder-workspace/Sources/Citadel/ChannelUnwrapper.swift:4:13: note: class 'SSHChannelDataUnwrapper' does not conform to the 'Sendable' protocol
 2 | import NIOSSH
 3 |
 4 | final class SSHChannelDataUnwrapper: ChannelInboundHandler {
   |             `- note: class 'SSHChannelDataUnwrapper' does not conform to the 'Sendable' protocol
 5 |     typealias InboundIn = SSHChannelData
 6 |     typealias InboundOut = ByteBuffer
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:135:13: warning: type 'SSHOutboundChannelDataWrapper' does not conform to the 'Sendable' protocol
133 |         return channel.pipeline.addHandlers(
134 |             SSHChannelDataUnwrapper(),
135 |             SSHOutboundChannelDataWrapper(),
    |             `- warning: type 'SSHOutboundChannelDataWrapper' does not conform to the 'Sendable' protocol
136 |             shellInboundHandler,
137 |             CloseErrorHandler(logger: logger)
/host/spi-builder-workspace/Sources/Citadel/ChannelUnwrapper.swift:30:13: note: class 'SSHOutboundChannelDataWrapper' does not conform to the 'Sendable' protocol
28 | }
29 |
30 | final class SSHOutboundChannelDataWrapper: ChannelOutboundHandler {
   |             `- note: class 'SSHOutboundChannelDataWrapper' does not conform to the 'Sendable' protocol
31 |     typealias OutboundIn = ByteBuffer
32 |     typealias OutboundOut = SSHChannelData
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:136:13: warning: type 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
 43 | }
 44 |
 45 | final class ShellServerInboundHandler: ChannelInboundHandler {
    |             `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
 46 |     typealias InboundIn = ByteBuffer
 47 |
    :
134 |             SSHChannelDataUnwrapper(),
135 |             SSHOutboundChannelDataWrapper(),
136 |             shellInboundHandler,
    |             `- warning: type 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
137 |             CloseErrorHandler(logger: logger)
138 |         )
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:137:13: warning: type 'CloseErrorHandler' does not conform to the 'Sendable' protocol
135 |             SSHOutboundChannelDataWrapper(),
136 |             shellInboundHandler,
137 |             CloseErrorHandler(logger: logger)
    |             `- warning: type 'CloseErrorHandler' does not conform to the 'Sendable' protocol
138 |         )
139 |     }
/host/spi-builder-workspace/Sources/Citadel/Server.swift:6:13: note: class 'CloseErrorHandler' does not conform to the 'Sendable' protocol
  4 | import NIOConcurrencyHelpers
  5 |
  6 | final class CloseErrorHandler: ChannelInboundHandler {
    |             `- note: class 'CloseErrorHandler' does not conform to the 'Sendable' protocol
  7 |     typealias InboundIn = Any
  8 |     let logger: Logger
/host/spi-builder-workspace/Sources/Citadel/TTY/Client/TTY.swift:124:13: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
122 |         context.channel.setOption(ChannelOptions.allowRemoteHalfClosure, value: true).whenFailure { error in
123 |             self.logger.debug("Failed to set allowRemoteHalfClosure: \(error)")
124 |             context.fireErrorCaught(error)
    |             `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
125 |         }
126 |     }
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/TTY/Client/TTY.swift:285:17: warning: capture of 'self' with non-sendable type 'SSHClient' in a '@Sendable' closure; this is an error in the Swift 6 language mode
283 |                 streamContinuation.yield(.stderr(stderr))
284 |             case .eof(let error):
285 |                 self.logger.debug("EOF triggered, ending the command stream.")
    |                 `- warning: capture of 'self' with non-sendable type 'SSHClient' in a '@Sendable' closure; this is an error in the Swift 6 language mode
286 |                 if let error {
287 |                     streamContinuation.finish(throwing: error)
/host/spi-builder-workspace/Sources/Citadel/Client.swift:112:20: note: class 'SSHClient' does not conform to the 'Sendable' protocol
110 |
111 | /// Represents an SSH connection.
112 | public final class SSHClient {
    |                    `- note: class 'SSHClient' does not conform to the 'Sendable' protocol
113 |     private(set) var session: SSHClientSession
114 |     private var userInitiatedClose = false
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:75:31: 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
 73 |         done.completeWithTask {
 74 |             try await withThrowingTaskGroup(of: Void.self) { group in
 75 |                 group.addTask {
    |                               `- 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
 76 |                     try await self.delegate.startShell(
    |                               `- note: closure captures non-Sendable 'self'
 77 |                         inbound: self.inbound.stream,
 78 |                         outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
 79 |                         context: shellContext
    |                                  `- note: closure captures non-Sendable 'shellContext'
 80 |                     )
 81 |                 }
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:83:31: 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
 81 |                 }
 82 |
 83 |                 group.addTask {
    |                               `- 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
 84 |                     for try await message in self.outbound.stream {
    |                                              `- note: closure captures 'self' which is accessible to code in the current task
 85 |                         switch message.event {
 86 |                         case .stdout(let data):
/host/spi-builder-workspace/Sources/Citadel/TTY/Client/TTY.swift:467: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
465 |         )
466 |
467 |         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
468 |             do {
469 |                 let stream = try await executeCommandStream(command, inShell: inShell)
    |                                        `- note: closure captures 'self' which is accessible to code in the current task
470 |                 for try await chunk in stream {
471 |                     switch chunk {
[870/875] Compiling Citadel ShellDelegate.swift
/host/spi-builder-workspace/Sources/Citadel/SSHKeyTypeDetection.swift:50:23: warning: static property 'rsa' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
  6 | /// A `struct` is used instead of a public `enum` so new algorithms can be
  7 | /// added later without breaking source or ABI stability.
  8 | public struct SSHKeyType: RawRepresentable, Equatable, Hashable, CaseIterable, CustomStringConvertible {
    |               `- note: consider making struct 'SSHKeyType' conform to the 'Sendable' protocol
  9 |
 10 |     // MARK: Backing storage for the algorithms currently bundled with Citadel.
    :
 48 |
 49 |     // MARK: Statically known key types
 50 |     public static let rsa        = SSHKeyType(backing: .rsa)
    |                       |- warning: static property 'rsa' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'rsa' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 51 |     public static let ed25519    = SSHKeyType(backing: .ed25519)
 52 |     public static let ecdsaP256  = SSHKeyType(backing: .ecdsaP256)
/host/spi-builder-workspace/Sources/Citadel/SSHKeyTypeDetection.swift:51:23: warning: static property 'ed25519' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
  6 | /// A `struct` is used instead of a public `enum` so new algorithms can be
  7 | /// added later without breaking source or ABI stability.
  8 | public struct SSHKeyType: RawRepresentable, Equatable, Hashable, CaseIterable, CustomStringConvertible {
    |               `- note: consider making struct 'SSHKeyType' conform to the 'Sendable' protocol
  9 |
 10 |     // MARK: Backing storage for the algorithms currently bundled with Citadel.
    :
 49 |     // MARK: Statically known key types
 50 |     public static let rsa        = SSHKeyType(backing: .rsa)
 51 |     public static let ed25519    = SSHKeyType(backing: .ed25519)
    |                       |- warning: static property 'ed25519' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'ed25519' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 52 |     public static let ecdsaP256  = SSHKeyType(backing: .ecdsaP256)
 53 |     public static let ecdsaP384  = SSHKeyType(backing: .ecdsaP384)
/host/spi-builder-workspace/Sources/Citadel/SSHKeyTypeDetection.swift:52:23: warning: static property 'ecdsaP256' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
  6 | /// A `struct` is used instead of a public `enum` so new algorithms can be
  7 | /// added later without breaking source or ABI stability.
  8 | public struct SSHKeyType: RawRepresentable, Equatable, Hashable, CaseIterable, CustomStringConvertible {
    |               `- note: consider making struct 'SSHKeyType' conform to the 'Sendable' protocol
  9 |
 10 |     // MARK: Backing storage for the algorithms currently bundled with Citadel.
    :
 50 |     public static let rsa        = SSHKeyType(backing: .rsa)
 51 |     public static let ed25519    = SSHKeyType(backing: .ed25519)
 52 |     public static let ecdsaP256  = SSHKeyType(backing: .ecdsaP256)
    |                       |- warning: static property 'ecdsaP256' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'ecdsaP256' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 53 |     public static let ecdsaP384  = SSHKeyType(backing: .ecdsaP384)
 54 |     public static let ecdsaP521  = SSHKeyType(backing: .ecdsaP521)
/host/spi-builder-workspace/Sources/Citadel/SSHKeyTypeDetection.swift:53:23: warning: static property 'ecdsaP384' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
  6 | /// A `struct` is used instead of a public `enum` so new algorithms can be
  7 | /// added later without breaking source or ABI stability.
  8 | public struct SSHKeyType: RawRepresentable, Equatable, Hashable, CaseIterable, CustomStringConvertible {
    |               `- note: consider making struct 'SSHKeyType' conform to the 'Sendable' protocol
  9 |
 10 |     // MARK: Backing storage for the algorithms currently bundled with Citadel.
    :
 51 |     public static let ed25519    = SSHKeyType(backing: .ed25519)
 52 |     public static let ecdsaP256  = SSHKeyType(backing: .ecdsaP256)
 53 |     public static let ecdsaP384  = SSHKeyType(backing: .ecdsaP384)
    |                       |- warning: static property 'ecdsaP384' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'ecdsaP384' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 54 |     public static let ecdsaP521  = SSHKeyType(backing: .ecdsaP521)
 55 | }
/host/spi-builder-workspace/Sources/Citadel/SSHKeyTypeDetection.swift:54:23: warning: static property 'ecdsaP521' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
  6 | /// A `struct` is used instead of a public `enum` so new algorithms can be
  7 | /// added later without breaking source or ABI stability.
  8 | public struct SSHKeyType: RawRepresentable, Equatable, Hashable, CaseIterable, CustomStringConvertible {
    |               `- note: consider making struct 'SSHKeyType' conform to the 'Sendable' protocol
  9 |
 10 |     // MARK: Backing storage for the algorithms currently bundled with Citadel.
    :
 52 |     public static let ecdsaP256  = SSHKeyType(backing: .ecdsaP256)
 53 |     public static let ecdsaP384  = SSHKeyType(backing: .ecdsaP384)
 54 |     public static let ecdsaP521  = SSHKeyType(backing: .ecdsaP521)
    |                       |- warning: static property 'ecdsaP521' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'ecdsaP521' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 55 | }
 56 |
/host/spi-builder-workspace/Sources/Citadel/Server.swift:40:13: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 38 |     func handlerAdded(context: ChannelHandlerContext) {
 39 |         context.channel.setOption(ChannelOptions.allowRemoteHalfClosure, value: true).whenFailure { error in
 40 |             context.fireErrorCaught(error)
    |             `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 41 |         }
 42 |     }
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:59:21: warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
 18 | }
 19 |
 20 | final class SubsystemHandler: ChannelDuplexHandler {
    |             `- note: class 'SubsystemHandler' does not conform to the 'Sendable' protocol
 21 |     typealias InboundIn = SSHChannelData
 22 |     typealias InboundOut = SSHChannelData
    :
 57 |             guard let shell = shell, let parent = context.channel.parent else {
 58 |                 _ = context.channel.triggerUserOutboundEvent(ChannelFailureEvent()).flatMap {
 59 |                     self.configured.succeed(())
    |                     `- warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
 60 |                     return context.channel.close()
 61 |                 }
/host/spi-builder-workspace/Sources/Citadel/Server.swift:60:28: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 58 |                 _ = context.channel.triggerUserOutboundEvent(ChannelFailureEvent()).flatMap {
 59 |                     self.configured.succeed(())
 60 |                     return context.channel.close()
    |                            `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 61 |                 }
 62 |                 return
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:67:30: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 65 |             parent.pipeline.handler(type: NIOSSHHandler.self).flatMap { handler in
 66 |                 ShellServerSubsystem.setupChannelHanders(
 67 |                     channel: context.channel,
    |                              `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 68 |                     shell: shell,
 69 |                     logger: .init(label: "nl.orlandos.citadel.sftp-server"),
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:73:31: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 71 |                 )
 72 |             }.flatMap { () -> EventLoopFuture<Void> in
 73 |                 let promise = context.eventLoop.makePromise(of: Void.self)
    |                               `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 74 |                 context.channel.triggerUserOutboundEvent(ChannelSuccessEvent(), promise: promise)
 75 |                 self.configured.succeed(())
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:75:17: warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
 18 | }
 19 |
 20 | final class SubsystemHandler: ChannelDuplexHandler {
    |             `- note: class 'SubsystemHandler' does not conform to the 'Sendable' protocol
 21 |     typealias InboundIn = SSHChannelData
 22 |     typealias InboundOut = SSHChannelData
    :
 73 |                 let promise = context.eventLoop.makePromise(of: Void.self)
 74 |                 context.channel.triggerUserOutboundEvent(ChannelSuccessEvent(), promise: promise)
 75 |                 self.configured.succeed(())
    |                 `- warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
 76 |                 return promise.futureResult
 77 |             }.whenFailure { _ in
/host/spi-builder-workspace/Sources/Citadel/Server.swift:78:17: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 76 |                 return promise.futureResult
 77 |             }.whenFailure { _ in
 78 |                 context.channel.triggerUserOutboundEvent(ChannelFailureEvent(), promise: nil)
    |                 `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 79 |             }
 80 |         case let event as SSHChannelRequestEvent.SubsystemRequest:
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:91:34: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 89 |                 parent.pipeline.handler(type: NIOSSHHandler.self).flatMap { handler in
 90 |                     SFTPServerSubsystem.setupChannelHanders(
 91 |                         channel: context.channel,
    |                                  `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 92 |                         sftp: sftp,
 93 |                         logger: .init(label: "nl.orlandos.citadel.sftp-server"),
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:97:35: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 95 |                     )
 96 |                 }.flatMap { () -> EventLoopFuture<Void> in
 97 |                     let promise = context.eventLoop.makePromise(of: Void.self)
    |                                   `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 98 |                     context.channel.triggerUserOutboundEvent(ChannelSuccessEvent(), promise: promise)
 99 |                     self.configured.succeed(())
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:99:21: warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
 18 | }
 19 |
 20 | final class SubsystemHandler: ChannelDuplexHandler {
    |             `- note: class 'SubsystemHandler' does not conform to the 'Sendable' protocol
 21 |     typealias InboundIn = SSHChannelData
 22 |     typealias InboundOut = SSHChannelData
    :
 97 |                     let promise = context.eventLoop.makePromise(of: Void.self)
 98 |                     context.channel.triggerUserOutboundEvent(ChannelSuccessEvent(), promise: promise)
 99 |                     self.configured.succeed(())
    |                     `- warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
100 |                     return promise.futureResult
101 |                 }.whenFailure { _ in
/host/spi-builder-workspace/Sources/Citadel/Server.swift:102:21: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
100 |                     return promise.futureResult
101 |                 }.whenFailure { _ in
102 |                     context.channel.triggerUserOutboundEvent(ChannelFailureEvent(), promise: nil)
    |                     `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
103 |                 }
104 |             default:
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:114:13: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
112 |     func channelRead(context: ChannelHandlerContext, data: NIOAny) {
113 |         configured.futureResult.whenSuccess {
114 |             context.fireChannelRead(data)
    |             `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
115 |         }
116 |     }
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:114:37: warning: capture of 'data' with non-sendable type 'NIOAny' in a '@Sendable' closure
112 |     func channelRead(context: ChannelHandlerContext, data: NIOAny) {
113 |         configured.futureResult.whenSuccess {
114 |             context.fireChannelRead(data)
    |                                     `- warning: capture of 'data' with non-sendable type 'NIOAny' in a '@Sendable' closure
115 |         }
116 |     }
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/NIOAny.swift:45:15: note: struct 'NIOAny' does not conform to the 'Sendable' protocol
 43 | ///         }
 44 | ///     }
 45 | public struct NIOAny {
    |               `- note: struct 'NIOAny' does not conform to the 'Sendable' protocol
 46 |     @usableFromInline
 47 |     let _storage: _NIOAny
/host/spi-builder-workspace/Sources/Citadel/Server.swift:163:49: warning: type 'any ChannelHandler' does not conform to the 'Sendable' protocol
161 |             handlers.append(ExecHandler(delegate: exec, username: username))
162 |
163 |             return channel.pipeline.addHandlers(handlers)
    |                                                 `- warning: type 'any ChannelHandler' does not conform to the 'Sendable' protocol
164 |         case .directTCPIP(let request):
165 |             guard let delegate = directTCPIP else {
/host/spi-builder-workspace/Sources/Citadel/Server.swift:169:48: warning: type 'DataToBufferCodec' does not conform to the 'Sendable' protocol
167 |             }
168 |
169 |             return channel.pipeline.addHandler(DataToBufferCodec()).flatMap {
    |                                                `- warning: type 'DataToBufferCodec' does not conform to the 'Sendable' protocol
170 |                 return delegate.initializeDirectTCPIPChannel(
171 |                     channel,
/host/spi-builder-workspace/Sources/Citadel/DirectTCPIP/Client/DirectTCPIP+Client.swift:4:13: note: class 'DataToBufferCodec' does not conform to the 'Sendable' protocol
 2 | import NIOSSH
 3 |
 4 | final class DataToBufferCodec: ChannelDuplexHandler {
   |             `- note: class 'DataToBufferCodec' does not conform to the 'Sendable' protocol
 5 |     typealias InboundIn = SSHChannelData
 6 |     typealias InboundOut = ByteBuffer
/host/spi-builder-workspace/Sources/Citadel/Server.swift:270:21: warning: type 'CloseErrorHandler' does not conform to the 'Sendable' protocol
  4 | import NIOConcurrencyHelpers
  5 |
  6 | final class CloseErrorHandler: ChannelInboundHandler {
    |             `- note: class 'CloseErrorHandler' does not conform to the 'Sendable' protocol
  7 |     typealias InboundIn = Any
  8 |     let logger: Logger
    :
268 |                         }
269 |                     ),
270 |                     CloseErrorHandler(logger: logger)
    |                     `- warning: type 'CloseErrorHandler' does not conform to the 'Sendable' protocol
271 |                 ])
272 |             }
/host/spi-builder-workspace/Sources/Citadel/Server.swift:278:11: warning: type 'SSHServer' does not conform to the 'Sendable' protocol
184 | /// The server can be closed using the `close()` method.
185 | /// - Note: This class is not thread safe.
186 | public final class SSHServer {
    |                    `- note: class 'SSHServer' does not conform to the 'Sendable' protocol
187 |     let channel: Channel
188 |     let delegate: CitadelServerDelegate
    :
276 |         return try await bootstrap.bind(host: host, port: port).map { channel in
277 |             SSHServer(channel: channel, logger: logger, delegate: delegate)
278 |         }.get()
    |           `- warning: type 'SSHServer' does not conform to the 'Sendable' protocol
279 |     }
280 | }
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:102:47: warning: converting non-sendable function value to '@Sendable (any Error) -> Void' may introduce data races
100 |         }
101 |
102 |         done.futureResult.whenFailure(context.fireErrorCaught)
    |                                               `- warning: converting non-sendable function value to '@Sendable (any Error) -> Void' may introduce data races
103 |     }
104 |
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:76:31: warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in a '@Sendable' closure
 43 | }
 44 |
 45 | final class ShellServerInboundHandler: ChannelInboundHandler {
    |             `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
 46 |     typealias InboundIn = ByteBuffer
 47 |
    :
 74 |             try await withThrowingTaskGroup(of: Void.self) { group in
 75 |                 group.addTask {
 76 |                     try await self.delegate.startShell(
    |                               `- warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in a '@Sendable' closure
 77 |                         inbound: self.inbound.stream,
 78 |                         outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:79:34: warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in a '@Sendable' closure
 77 |                         inbound: self.inbound.stream,
 78 |                         outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
 79 |                         context: shellContext
    |                                  `- warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in a '@Sendable' closure
 80 |                     )
 81 |                 }
/host/spi-builder-workspace/Sources/Citadel/SFTP/Server/SFTPServer.swift:35:15: note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
 33 | }
 34 |
 35 | public struct SSHShellContext {
    |               `- note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
 36 |     public struct WindowSize {
 37 |         public let columns: Int
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:76:31: warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
 43 | }
 44 |
 45 | final class ShellServerInboundHandler: ChannelInboundHandler {
    |             `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
 46 |     typealias InboundIn = ByteBuffer
 47 |
    :
 74 |             try await withThrowingTaskGroup(of: Void.self) { group in
 75 |                 group.addTask {
 76 |                     try await self.delegate.startShell(
    |                               `- warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
 77 |                         inbound: self.inbound.stream,
 78 |                         outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:79:34: warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in an isolated closure; this is an error in the Swift 6 language mode
 77 |                         inbound: self.inbound.stream,
 78 |                         outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
 79 |                         context: shellContext
    |                                  `- warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in an isolated closure; this is an error in the Swift 6 language mode
 80 |                     )
 81 |                 }
/host/spi-builder-workspace/Sources/Citadel/SFTP/Server/SFTPServer.swift:35:15: note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
 33 | }
 34 |
 35 | public struct SSHShellContext {
    |               `- note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
 36 |     public struct WindowSize {
 37 |         public let columns: Int
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:76:31: warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
 43 | }
 44 |
 45 | final class ShellServerInboundHandler: ChannelInboundHandler {
    |             `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
 46 |     typealias InboundIn = ByteBuffer
 47 |
    :
 74 |             try await withThrowingTaskGroup(of: Void.self) { group in
 75 |                 group.addTask {
 76 |                     try await self.delegate.startShell(
    |                               `- warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
 77 |                         inbound: self.inbound.stream,
 78 |                         outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:79:34: warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in an isolated closure; this is an error in the Swift 6 language mode
 77 |                         inbound: self.inbound.stream,
 78 |                         outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
 79 |                         context: shellContext
    |                                  `- warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in an isolated closure; this is an error in the Swift 6 language mode
 80 |                     )
 81 |                 }
/host/spi-builder-workspace/Sources/Citadel/SFTP/Server/SFTPServer.swift:35:15: note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
 33 | }
 34 |
 35 | public struct SSHShellContext {
    |               `- note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
 36 |     public struct WindowSize {
 37 |         public let columns: Int
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:84:46: warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
 43 | }
 44 |
 45 | final class ShellServerInboundHandler: ChannelInboundHandler {
    |             `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
 46 |     typealias InboundIn = ByteBuffer
 47 |
    :
 82 |
 83 |                 group.addTask {
 84 |                     for try await message in self.outbound.stream {
    |                                              `- warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
 85 |                         switch message.event {
 86 |                         case .stdout(let data):
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:134:13: warning: type 'SSHChannelDataUnwrapper' does not conform to the 'Sendable' protocol
132 |
133 |         return channel.pipeline.addHandlers(
134 |             SSHChannelDataUnwrapper(),
    |             `- warning: type 'SSHChannelDataUnwrapper' does not conform to the 'Sendable' protocol
135 |             SSHOutboundChannelDataWrapper(),
136 |             shellInboundHandler,
/host/spi-builder-workspace/Sources/Citadel/ChannelUnwrapper.swift:4:13: note: class 'SSHChannelDataUnwrapper' does not conform to the 'Sendable' protocol
 2 | import NIOSSH
 3 |
 4 | final class SSHChannelDataUnwrapper: ChannelInboundHandler {
   |             `- note: class 'SSHChannelDataUnwrapper' does not conform to the 'Sendable' protocol
 5 |     typealias InboundIn = SSHChannelData
 6 |     typealias InboundOut = ByteBuffer
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:135:13: warning: type 'SSHOutboundChannelDataWrapper' does not conform to the 'Sendable' protocol
133 |         return channel.pipeline.addHandlers(
134 |             SSHChannelDataUnwrapper(),
135 |             SSHOutboundChannelDataWrapper(),
    |             `- warning: type 'SSHOutboundChannelDataWrapper' does not conform to the 'Sendable' protocol
136 |             shellInboundHandler,
137 |             CloseErrorHandler(logger: logger)
/host/spi-builder-workspace/Sources/Citadel/ChannelUnwrapper.swift:30:13: note: class 'SSHOutboundChannelDataWrapper' does not conform to the 'Sendable' protocol
28 | }
29 |
30 | final class SSHOutboundChannelDataWrapper: ChannelOutboundHandler {
   |             `- note: class 'SSHOutboundChannelDataWrapper' does not conform to the 'Sendable' protocol
31 |     typealias OutboundIn = ByteBuffer
32 |     typealias OutboundOut = SSHChannelData
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:136:13: warning: type 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
 43 | }
 44 |
 45 | final class ShellServerInboundHandler: ChannelInboundHandler {
    |             `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
 46 |     typealias InboundIn = ByteBuffer
 47 |
    :
134 |             SSHChannelDataUnwrapper(),
135 |             SSHOutboundChannelDataWrapper(),
136 |             shellInboundHandler,
    |             `- warning: type 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
137 |             CloseErrorHandler(logger: logger)
138 |         )
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:137:13: warning: type 'CloseErrorHandler' does not conform to the 'Sendable' protocol
135 |             SSHOutboundChannelDataWrapper(),
136 |             shellInboundHandler,
137 |             CloseErrorHandler(logger: logger)
    |             `- warning: type 'CloseErrorHandler' does not conform to the 'Sendable' protocol
138 |         )
139 |     }
/host/spi-builder-workspace/Sources/Citadel/Server.swift:6:13: note: class 'CloseErrorHandler' does not conform to the 'Sendable' protocol
  4 | import NIOConcurrencyHelpers
  5 |
  6 | final class CloseErrorHandler: ChannelInboundHandler {
    |             `- note: class 'CloseErrorHandler' does not conform to the 'Sendable' protocol
  7 |     typealias InboundIn = Any
  8 |     let logger: Logger
/host/spi-builder-workspace/Sources/Citadel/TTY/Client/TTY.swift:124:13: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
122 |         context.channel.setOption(ChannelOptions.allowRemoteHalfClosure, value: true).whenFailure { error in
123 |             self.logger.debug("Failed to set allowRemoteHalfClosure: \(error)")
124 |             context.fireErrorCaught(error)
    |             `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
125 |         }
126 |     }
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/TTY/Client/TTY.swift:285:17: warning: capture of 'self' with non-sendable type 'SSHClient' in a '@Sendable' closure; this is an error in the Swift 6 language mode
283 |                 streamContinuation.yield(.stderr(stderr))
284 |             case .eof(let error):
285 |                 self.logger.debug("EOF triggered, ending the command stream.")
    |                 `- warning: capture of 'self' with non-sendable type 'SSHClient' in a '@Sendable' closure; this is an error in the Swift 6 language mode
286 |                 if let error {
287 |                     streamContinuation.finish(throwing: error)
/host/spi-builder-workspace/Sources/Citadel/Client.swift:112:20: note: class 'SSHClient' does not conform to the 'Sendable' protocol
110 |
111 | /// Represents an SSH connection.
112 | public final class SSHClient {
    |                    `- note: class 'SSHClient' does not conform to the 'Sendable' protocol
113 |     private(set) var session: SSHClientSession
114 |     private var userInitiatedClose = false
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:75:31: 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
 73 |         done.completeWithTask {
 74 |             try await withThrowingTaskGroup(of: Void.self) { group in
 75 |                 group.addTask {
    |                               `- 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
 76 |                     try await self.delegate.startShell(
    |                               `- note: closure captures non-Sendable 'self'
 77 |                         inbound: self.inbound.stream,
 78 |                         outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
 79 |                         context: shellContext
    |                                  `- note: closure captures non-Sendable 'shellContext'
 80 |                     )
 81 |                 }
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:83:31: 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
 81 |                 }
 82 |
 83 |                 group.addTask {
    |                               `- 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
 84 |                     for try await message in self.outbound.stream {
    |                                              `- note: closure captures 'self' which is accessible to code in the current task
 85 |                         switch message.event {
 86 |                         case .stdout(let data):
/host/spi-builder-workspace/Sources/Citadel/TTY/Client/TTY.swift:467: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
465 |         )
466 |
467 |         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
468 |             do {
469 |                 let stream = try await executeCommandStream(command, inShell: inShell)
    |                                        `- note: closure captures 'self' which is accessible to code in the current task
470 |                 for try await chunk in stream {
471 |                     switch chunk {
[871/875] Compiling Citadel TTY.swift
/host/spi-builder-workspace/Sources/Citadel/SSHKeyTypeDetection.swift:50:23: warning: static property 'rsa' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
  6 | /// A `struct` is used instead of a public `enum` so new algorithms can be
  7 | /// added later without breaking source or ABI stability.
  8 | public struct SSHKeyType: RawRepresentable, Equatable, Hashable, CaseIterable, CustomStringConvertible {
    |               `- note: consider making struct 'SSHKeyType' conform to the 'Sendable' protocol
  9 |
 10 |     // MARK: Backing storage for the algorithms currently bundled with Citadel.
    :
 48 |
 49 |     // MARK: Statically known key types
 50 |     public static let rsa        = SSHKeyType(backing: .rsa)
    |                       |- warning: static property 'rsa' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'rsa' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 51 |     public static let ed25519    = SSHKeyType(backing: .ed25519)
 52 |     public static let ecdsaP256  = SSHKeyType(backing: .ecdsaP256)
/host/spi-builder-workspace/Sources/Citadel/SSHKeyTypeDetection.swift:51:23: warning: static property 'ed25519' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
  6 | /// A `struct` is used instead of a public `enum` so new algorithms can be
  7 | /// added later without breaking source or ABI stability.
  8 | public struct SSHKeyType: RawRepresentable, Equatable, Hashable, CaseIterable, CustomStringConvertible {
    |               `- note: consider making struct 'SSHKeyType' conform to the 'Sendable' protocol
  9 |
 10 |     // MARK: Backing storage for the algorithms currently bundled with Citadel.
    :
 49 |     // MARK: Statically known key types
 50 |     public static let rsa        = SSHKeyType(backing: .rsa)
 51 |     public static let ed25519    = SSHKeyType(backing: .ed25519)
    |                       |- warning: static property 'ed25519' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'ed25519' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 52 |     public static let ecdsaP256  = SSHKeyType(backing: .ecdsaP256)
 53 |     public static let ecdsaP384  = SSHKeyType(backing: .ecdsaP384)
/host/spi-builder-workspace/Sources/Citadel/SSHKeyTypeDetection.swift:52:23: warning: static property 'ecdsaP256' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
  6 | /// A `struct` is used instead of a public `enum` so new algorithms can be
  7 | /// added later without breaking source or ABI stability.
  8 | public struct SSHKeyType: RawRepresentable, Equatable, Hashable, CaseIterable, CustomStringConvertible {
    |               `- note: consider making struct 'SSHKeyType' conform to the 'Sendable' protocol
  9 |
 10 |     // MARK: Backing storage for the algorithms currently bundled with Citadel.
    :
 50 |     public static let rsa        = SSHKeyType(backing: .rsa)
 51 |     public static let ed25519    = SSHKeyType(backing: .ed25519)
 52 |     public static let ecdsaP256  = SSHKeyType(backing: .ecdsaP256)
    |                       |- warning: static property 'ecdsaP256' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'ecdsaP256' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 53 |     public static let ecdsaP384  = SSHKeyType(backing: .ecdsaP384)
 54 |     public static let ecdsaP521  = SSHKeyType(backing: .ecdsaP521)
/host/spi-builder-workspace/Sources/Citadel/SSHKeyTypeDetection.swift:53:23: warning: static property 'ecdsaP384' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
  6 | /// A `struct` is used instead of a public `enum` so new algorithms can be
  7 | /// added later without breaking source or ABI stability.
  8 | public struct SSHKeyType: RawRepresentable, Equatable, Hashable, CaseIterable, CustomStringConvertible {
    |               `- note: consider making struct 'SSHKeyType' conform to the 'Sendable' protocol
  9 |
 10 |     // MARK: Backing storage for the algorithms currently bundled with Citadel.
    :
 51 |     public static let ed25519    = SSHKeyType(backing: .ed25519)
 52 |     public static let ecdsaP256  = SSHKeyType(backing: .ecdsaP256)
 53 |     public static let ecdsaP384  = SSHKeyType(backing: .ecdsaP384)
    |                       |- warning: static property 'ecdsaP384' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'ecdsaP384' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 54 |     public static let ecdsaP521  = SSHKeyType(backing: .ecdsaP521)
 55 | }
/host/spi-builder-workspace/Sources/Citadel/SSHKeyTypeDetection.swift:54:23: warning: static property 'ecdsaP521' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
  6 | /// A `struct` is used instead of a public `enum` so new algorithms can be
  7 | /// added later without breaking source or ABI stability.
  8 | public struct SSHKeyType: RawRepresentable, Equatable, Hashable, CaseIterable, CustomStringConvertible {
    |               `- note: consider making struct 'SSHKeyType' conform to the 'Sendable' protocol
  9 |
 10 |     // MARK: Backing storage for the algorithms currently bundled with Citadel.
    :
 52 |     public static let ecdsaP256  = SSHKeyType(backing: .ecdsaP256)
 53 |     public static let ecdsaP384  = SSHKeyType(backing: .ecdsaP384)
 54 |     public static let ecdsaP521  = SSHKeyType(backing: .ecdsaP521)
    |                       |- warning: static property 'ecdsaP521' is not concurrency-safe because non-'Sendable' type 'SSHKeyType' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'ecdsaP521' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 55 | }
 56 |
/host/spi-builder-workspace/Sources/Citadel/Server.swift:40:13: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 38 |     func handlerAdded(context: ChannelHandlerContext) {
 39 |         context.channel.setOption(ChannelOptions.allowRemoteHalfClosure, value: true).whenFailure { error in
 40 |             context.fireErrorCaught(error)
    |             `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 41 |         }
 42 |     }
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:59:21: warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
 18 | }
 19 |
 20 | final class SubsystemHandler: ChannelDuplexHandler {
    |             `- note: class 'SubsystemHandler' does not conform to the 'Sendable' protocol
 21 |     typealias InboundIn = SSHChannelData
 22 |     typealias InboundOut = SSHChannelData
    :
 57 |             guard let shell = shell, let parent = context.channel.parent else {
 58 |                 _ = context.channel.triggerUserOutboundEvent(ChannelFailureEvent()).flatMap {
 59 |                     self.configured.succeed(())
    |                     `- warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
 60 |                     return context.channel.close()
 61 |                 }
/host/spi-builder-workspace/Sources/Citadel/Server.swift:60:28: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 58 |                 _ = context.channel.triggerUserOutboundEvent(ChannelFailureEvent()).flatMap {
 59 |                     self.configured.succeed(())
 60 |                     return context.channel.close()
    |                            `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 61 |                 }
 62 |                 return
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:67:30: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 65 |             parent.pipeline.handler(type: NIOSSHHandler.self).flatMap { handler in
 66 |                 ShellServerSubsystem.setupChannelHanders(
 67 |                     channel: context.channel,
    |                              `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 68 |                     shell: shell,
 69 |                     logger: .init(label: "nl.orlandos.citadel.sftp-server"),
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:73:31: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 71 |                 )
 72 |             }.flatMap { () -> EventLoopFuture<Void> in
 73 |                 let promise = context.eventLoop.makePromise(of: Void.self)
    |                               `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 74 |                 context.channel.triggerUserOutboundEvent(ChannelSuccessEvent(), promise: promise)
 75 |                 self.configured.succeed(())
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:75:17: warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
 18 | }
 19 |
 20 | final class SubsystemHandler: ChannelDuplexHandler {
    |             `- note: class 'SubsystemHandler' does not conform to the 'Sendable' protocol
 21 |     typealias InboundIn = SSHChannelData
 22 |     typealias InboundOut = SSHChannelData
    :
 73 |                 let promise = context.eventLoop.makePromise(of: Void.self)
 74 |                 context.channel.triggerUserOutboundEvent(ChannelSuccessEvent(), promise: promise)
 75 |                 self.configured.succeed(())
    |                 `- warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
 76 |                 return promise.futureResult
 77 |             }.whenFailure { _ in
/host/spi-builder-workspace/Sources/Citadel/Server.swift:78:17: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 76 |                 return promise.futureResult
 77 |             }.whenFailure { _ in
 78 |                 context.channel.triggerUserOutboundEvent(ChannelFailureEvent(), promise: nil)
    |                 `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 79 |             }
 80 |         case let event as SSHChannelRequestEvent.SubsystemRequest:
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:91:34: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 89 |                 parent.pipeline.handler(type: NIOSSHHandler.self).flatMap { handler in
 90 |                     SFTPServerSubsystem.setupChannelHanders(
 91 |                         channel: context.channel,
    |                                  `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 92 |                         sftp: sftp,
 93 |                         logger: .init(label: "nl.orlandos.citadel.sftp-server"),
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:97:35: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 95 |                     )
 96 |                 }.flatMap { () -> EventLoopFuture<Void> in
 97 |                     let promise = context.eventLoop.makePromise(of: Void.self)
    |                                   `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
 98 |                     context.channel.triggerUserOutboundEvent(ChannelSuccessEvent(), promise: promise)
 99 |                     self.configured.succeed(())
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:99:21: warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
 18 | }
 19 |
 20 | final class SubsystemHandler: ChannelDuplexHandler {
    |             `- note: class 'SubsystemHandler' does not conform to the 'Sendable' protocol
 21 |     typealias InboundIn = SSHChannelData
 22 |     typealias InboundOut = SSHChannelData
    :
 97 |                     let promise = context.eventLoop.makePromise(of: Void.self)
 98 |                     context.channel.triggerUserOutboundEvent(ChannelSuccessEvent(), promise: promise)
 99 |                     self.configured.succeed(())
    |                     `- warning: capture of 'self' with non-sendable type 'SubsystemHandler' in a '@Sendable' closure
100 |                     return promise.futureResult
101 |                 }.whenFailure { _ in
/host/spi-builder-workspace/Sources/Citadel/Server.swift:102:21: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
100 |                     return promise.futureResult
101 |                 }.whenFailure { _ in
102 |                     context.channel.triggerUserOutboundEvent(ChannelFailureEvent(), promise: nil)
    |                     `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
103 |                 }
104 |             default:
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:114:13: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
112 |     func channelRead(context: ChannelHandlerContext, data: NIOAny) {
113 |         configured.futureResult.whenSuccess {
114 |             context.fireChannelRead(data)
    |             `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
115 |         }
116 |     }
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/Server.swift:114:37: warning: capture of 'data' with non-sendable type 'NIOAny' in a '@Sendable' closure
112 |     func channelRead(context: ChannelHandlerContext, data: NIOAny) {
113 |         configured.futureResult.whenSuccess {
114 |             context.fireChannelRead(data)
    |                                     `- warning: capture of 'data' with non-sendable type 'NIOAny' in a '@Sendable' closure
115 |         }
116 |     }
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/NIOAny.swift:45:15: note: struct 'NIOAny' does not conform to the 'Sendable' protocol
 43 | ///         }
 44 | ///     }
 45 | public struct NIOAny {
    |               `- note: struct 'NIOAny' does not conform to the 'Sendable' protocol
 46 |     @usableFromInline
 47 |     let _storage: _NIOAny
/host/spi-builder-workspace/Sources/Citadel/Server.swift:163:49: warning: type 'any ChannelHandler' does not conform to the 'Sendable' protocol
161 |             handlers.append(ExecHandler(delegate: exec, username: username))
162 |
163 |             return channel.pipeline.addHandlers(handlers)
    |                                                 `- warning: type 'any ChannelHandler' does not conform to the 'Sendable' protocol
164 |         case .directTCPIP(let request):
165 |             guard let delegate = directTCPIP else {
/host/spi-builder-workspace/Sources/Citadel/Server.swift:169:48: warning: type 'DataToBufferCodec' does not conform to the 'Sendable' protocol
167 |             }
168 |
169 |             return channel.pipeline.addHandler(DataToBufferCodec()).flatMap {
    |                                                `- warning: type 'DataToBufferCodec' does not conform to the 'Sendable' protocol
170 |                 return delegate.initializeDirectTCPIPChannel(
171 |                     channel,
/host/spi-builder-workspace/Sources/Citadel/DirectTCPIP/Client/DirectTCPIP+Client.swift:4:13: note: class 'DataToBufferCodec' does not conform to the 'Sendable' protocol
 2 | import NIOSSH
 3 |
 4 | final class DataToBufferCodec: ChannelDuplexHandler {
   |             `- note: class 'DataToBufferCodec' does not conform to the 'Sendable' protocol
 5 |     typealias InboundIn = SSHChannelData
 6 |     typealias InboundOut = ByteBuffer
/host/spi-builder-workspace/Sources/Citadel/Server.swift:270:21: warning: type 'CloseErrorHandler' does not conform to the 'Sendable' protocol
  4 | import NIOConcurrencyHelpers
  5 |
  6 | final class CloseErrorHandler: ChannelInboundHandler {
    |             `- note: class 'CloseErrorHandler' does not conform to the 'Sendable' protocol
  7 |     typealias InboundIn = Any
  8 |     let logger: Logger
    :
268 |                         }
269 |                     ),
270 |                     CloseErrorHandler(logger: logger)
    |                     `- warning: type 'CloseErrorHandler' does not conform to the 'Sendable' protocol
271 |                 ])
272 |             }
/host/spi-builder-workspace/Sources/Citadel/Server.swift:278:11: warning: type 'SSHServer' does not conform to the 'Sendable' protocol
184 | /// The server can be closed using the `close()` method.
185 | /// - Note: This class is not thread safe.
186 | public final class SSHServer {
    |                    `- note: class 'SSHServer' does not conform to the 'Sendable' protocol
187 |     let channel: Channel
188 |     let delegate: CitadelServerDelegate
    :
276 |         return try await bootstrap.bind(host: host, port: port).map { channel in
277 |             SSHServer(channel: channel, logger: logger, delegate: delegate)
278 |         }.get()
    |           `- warning: type 'SSHServer' does not conform to the 'Sendable' protocol
279 |     }
280 | }
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:102:47: warning: converting non-sendable function value to '@Sendable (any Error) -> Void' may introduce data races
100 |         }
101 |
102 |         done.futureResult.whenFailure(context.fireErrorCaught)
    |                                               `- warning: converting non-sendable function value to '@Sendable (any Error) -> Void' may introduce data races
103 |     }
104 |
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:76:31: warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in a '@Sendable' closure
 43 | }
 44 |
 45 | final class ShellServerInboundHandler: ChannelInboundHandler {
    |             `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
 46 |     typealias InboundIn = ByteBuffer
 47 |
    :
 74 |             try await withThrowingTaskGroup(of: Void.self) { group in
 75 |                 group.addTask {
 76 |                     try await self.delegate.startShell(
    |                               `- warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in a '@Sendable' closure
 77 |                         inbound: self.inbound.stream,
 78 |                         outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:79:34: warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in a '@Sendable' closure
 77 |                         inbound: self.inbound.stream,
 78 |                         outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
 79 |                         context: shellContext
    |                                  `- warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in a '@Sendable' closure
 80 |                     )
 81 |                 }
/host/spi-builder-workspace/Sources/Citadel/SFTP/Server/SFTPServer.swift:35:15: note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
 33 | }
 34 |
 35 | public struct SSHShellContext {
    |               `- note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
 36 |     public struct WindowSize {
 37 |         public let columns: Int
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:76:31: warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
 43 | }
 44 |
 45 | final class ShellServerInboundHandler: ChannelInboundHandler {
    |             `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
 46 |     typealias InboundIn = ByteBuffer
 47 |
    :
 74 |             try await withThrowingTaskGroup(of: Void.self) { group in
 75 |                 group.addTask {
 76 |                     try await self.delegate.startShell(
    |                               `- warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
 77 |                         inbound: self.inbound.stream,
 78 |                         outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:79:34: warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in an isolated closure; this is an error in the Swift 6 language mode
 77 |                         inbound: self.inbound.stream,
 78 |                         outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
 79 |                         context: shellContext
    |                                  `- warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in an isolated closure; this is an error in the Swift 6 language mode
 80 |                     )
 81 |                 }
/host/spi-builder-workspace/Sources/Citadel/SFTP/Server/SFTPServer.swift:35:15: note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
 33 | }
 34 |
 35 | public struct SSHShellContext {
    |               `- note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
 36 |     public struct WindowSize {
 37 |         public let columns: Int
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:76:31: warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
 43 | }
 44 |
 45 | final class ShellServerInboundHandler: ChannelInboundHandler {
    |             `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
 46 |     typealias InboundIn = ByteBuffer
 47 |
    :
 74 |             try await withThrowingTaskGroup(of: Void.self) { group in
 75 |                 group.addTask {
 76 |                     try await self.delegate.startShell(
    |                               `- warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
 77 |                         inbound: self.inbound.stream,
 78 |                         outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:79:34: warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in an isolated closure; this is an error in the Swift 6 language mode
 77 |                         inbound: self.inbound.stream,
 78 |                         outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
 79 |                         context: shellContext
    |                                  `- warning: capture of 'shellContext' with non-sendable type 'SSHShellContext' in an isolated closure; this is an error in the Swift 6 language mode
 80 |                     )
 81 |                 }
/host/spi-builder-workspace/Sources/Citadel/SFTP/Server/SFTPServer.swift:35:15: note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
 33 | }
 34 |
 35 | public struct SSHShellContext {
    |               `- note: consider making struct 'SSHShellContext' conform to the 'Sendable' protocol
 36 |     public struct WindowSize {
 37 |         public let columns: Int
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:84:46: warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
 43 | }
 44 |
 45 | final class ShellServerInboundHandler: ChannelInboundHandler {
    |             `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
 46 |     typealias InboundIn = ByteBuffer
 47 |
    :
 82 |
 83 |                 group.addTask {
 84 |                     for try await message in self.outbound.stream {
    |                                              `- warning: capture of 'self' with non-sendable type 'ShellServerInboundHandler' in an isolated closure; this is an error in the Swift 6 language mode
 85 |                         switch message.event {
 86 |                         case .stdout(let data):
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:134:13: warning: type 'SSHChannelDataUnwrapper' does not conform to the 'Sendable' protocol
132 |
133 |         return channel.pipeline.addHandlers(
134 |             SSHChannelDataUnwrapper(),
    |             `- warning: type 'SSHChannelDataUnwrapper' does not conform to the 'Sendable' protocol
135 |             SSHOutboundChannelDataWrapper(),
136 |             shellInboundHandler,
/host/spi-builder-workspace/Sources/Citadel/ChannelUnwrapper.swift:4:13: note: class 'SSHChannelDataUnwrapper' does not conform to the 'Sendable' protocol
 2 | import NIOSSH
 3 |
 4 | final class SSHChannelDataUnwrapper: ChannelInboundHandler {
   |             `- note: class 'SSHChannelDataUnwrapper' does not conform to the 'Sendable' protocol
 5 |     typealias InboundIn = SSHChannelData
 6 |     typealias InboundOut = ByteBuffer
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:135:13: warning: type 'SSHOutboundChannelDataWrapper' does not conform to the 'Sendable' protocol
133 |         return channel.pipeline.addHandlers(
134 |             SSHChannelDataUnwrapper(),
135 |             SSHOutboundChannelDataWrapper(),
    |             `- warning: type 'SSHOutboundChannelDataWrapper' does not conform to the 'Sendable' protocol
136 |             shellInboundHandler,
137 |             CloseErrorHandler(logger: logger)
/host/spi-builder-workspace/Sources/Citadel/ChannelUnwrapper.swift:30:13: note: class 'SSHOutboundChannelDataWrapper' does not conform to the 'Sendable' protocol
28 | }
29 |
30 | final class SSHOutboundChannelDataWrapper: ChannelOutboundHandler {
   |             `- note: class 'SSHOutboundChannelDataWrapper' does not conform to the 'Sendable' protocol
31 |     typealias OutboundIn = ByteBuffer
32 |     typealias OutboundOut = SSHChannelData
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:136:13: warning: type 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
 43 | }
 44 |
 45 | final class ShellServerInboundHandler: ChannelInboundHandler {
    |             `- note: class 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
 46 |     typealias InboundIn = ByteBuffer
 47 |
    :
134 |             SSHChannelDataUnwrapper(),
135 |             SSHOutboundChannelDataWrapper(),
136 |             shellInboundHandler,
    |             `- warning: type 'ShellServerInboundHandler' does not conform to the 'Sendable' protocol
137 |             CloseErrorHandler(logger: logger)
138 |         )
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:137:13: warning: type 'CloseErrorHandler' does not conform to the 'Sendable' protocol
135 |             SSHOutboundChannelDataWrapper(),
136 |             shellInboundHandler,
137 |             CloseErrorHandler(logger: logger)
    |             `- warning: type 'CloseErrorHandler' does not conform to the 'Sendable' protocol
138 |         )
139 |     }
/host/spi-builder-workspace/Sources/Citadel/Server.swift:6:13: note: class 'CloseErrorHandler' does not conform to the 'Sendable' protocol
  4 | import NIOConcurrencyHelpers
  5 |
  6 | final class CloseErrorHandler: ChannelInboundHandler {
    |             `- note: class 'CloseErrorHandler' does not conform to the 'Sendable' protocol
  7 |     typealias InboundIn = Any
  8 |     let logger: Logger
/host/spi-builder-workspace/Sources/Citadel/TTY/Client/TTY.swift:124:13: warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
122 |         context.channel.setOption(ChannelOptions.allowRemoteHalfClosure, value: true).whenFailure { error in
123 |             self.logger.debug("Failed to set allowRemoteHalfClosure: \(error)")
124 |             context.fireErrorCaught(error)
    |             `- warning: capture of 'context' with non-sendable type 'ChannelHandlerContext' in a '@Sendable' closure
125 |         }
126 |     }
/host/spi-builder-workspace/.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1786:20: note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1784 | /// at the right point in time. Often, the right behaviour is to react to an event and then forward it to the next
1785 | /// `ChannelHandler`.
1786 | public final class ChannelHandlerContext: ChannelInvoker {
     |                    `- note: class 'ChannelHandlerContext' does not conform to the 'Sendable' protocol
1787 |     // visible for ChannelPipeline to modify
1788 |     fileprivate var next: Optional<ChannelHandlerContext>
/host/spi-builder-workspace/Sources/Citadel/TTY/Client/TTY.swift:285:17: warning: capture of 'self' with non-sendable type 'SSHClient' in a '@Sendable' closure; this is an error in the Swift 6 language mode
283 |                 streamContinuation.yield(.stderr(stderr))
284 |             case .eof(let error):
285 |                 self.logger.debug("EOF triggered, ending the command stream.")
    |                 `- warning: capture of 'self' with non-sendable type 'SSHClient' in a '@Sendable' closure; this is an error in the Swift 6 language mode
286 |                 if let error {
287 |                     streamContinuation.finish(throwing: error)
/host/spi-builder-workspace/Sources/Citadel/Client.swift:112:20: note: class 'SSHClient' does not conform to the 'Sendable' protocol
110 |
111 | /// Represents an SSH connection.
112 | public final class SSHClient {
    |                    `- note: class 'SSHClient' does not conform to the 'Sendable' protocol
113 |     private(set) var session: SSHClientSession
114 |     private var userInitiatedClose = false
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:75:31: 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
 73 |         done.completeWithTask {
 74 |             try await withThrowingTaskGroup(of: Void.self) { group in
 75 |                 group.addTask {
    |                               `- 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
 76 |                     try await self.delegate.startShell(
    |                               `- note: closure captures non-Sendable 'self'
 77 |                         inbound: self.inbound.stream,
 78 |                         outbound: ShellOutboundWriter(continuation: self.outbound.continuation),
 79 |                         context: shellContext
    |                                  `- note: closure captures non-Sendable 'shellContext'
 80 |                     )
 81 |                 }
/host/spi-builder-workspace/Sources/Citadel/Shell/Server/ShellDelegate.swift:83:31: 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
 81 |                 }
 82 |
 83 |                 group.addTask {
    |                               `- 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
 84 |                     for try await message in self.outbound.stream {
    |                                              `- note: closure captures 'self' which is accessible to code in the current task
 85 |                         switch message.event {
 86 |                         case .stdout(let data):
/host/spi-builder-workspace/Sources/Citadel/TTY/Client/TTY.swift:467: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
465 |         )
466 |
467 |         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
468 |             do {
469 |                 let stream = try await executeCommandStream(command, inShell: inShell)
    |                                        `- note: closure captures 'self' which is accessible to code in the current task
470 |                 for try await chunk in stream {
471 |                     switch chunk {
[872/883] Wrapping AST for Citadel for debugging
[874/883] Compiling CitadelServerExample Terminal.swift
[875/883] Compiling CitadelServerExample Extensions.swift
[876/883] Compiling CitadelServerExample HostKeyFile.swift
[877/883] Compiling CitadelServerExample Server.swift
/host/spi-builder-workspace/Sources/CitadelServerExample/Server.swift:24:42: warning: non-sendable result type 'SSHServer' cannot be sent from nonisolated context in call to static method 'host(host:port:hostKeys:algorithms:protocolOptions:logger:authenticationDelegate:group:)'; this is an error in the Swift 6 language mode
22 |         }
23 |
24 |         let server = try await SSHServer.host(
   |                                          `- warning: non-sendable result type 'SSHServer' cannot be sent from nonisolated context in call to static method 'host(host:port:hostKeys:algorithms:protocolOptions:logger:authenticationDelegate:group:)'; this is an error in the Swift 6 language mode
25 |             host: "localhost",
26 |             port: 2323,
/host/spi-builder-workspace/Sources/Citadel/Server.swift:186:20: note: class 'SSHServer' does not conform to the 'Sendable' protocol
184 | /// The server can be closed using the `close()` method.
185 | /// - Note: This class is not thread safe.
186 | public final class SSHServer {
    |                    `- note: class 'SSHServer' does not conform to the 'Sendable' protocol
187 |     let channel: Channel
188 |     let delegate: CitadelServerDelegate
/host/spi-builder-workspace/Sources/CitadelServerExample/Server.swift:1:1: warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'Citadel'
 1 | import Citadel
   | `- warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'Citadel'
 2 | import Crypto
 3 | import Foundation
/host/spi-builder-workspace/Sources/CitadelServerExample/Server.swift:52:36: warning: type 'NIOSSHUserAuthenticationOutcome' does not conform to the 'Sendable' protocol
50 |     ) {
51 |         if case .password(.init(password: password)) = request.request, request.username == username {
52 |             return responsePromise.succeed(.success)
   |                                    `- warning: type 'NIOSSHUserAuthenticationOutcome' does not conform to the 'Sendable' protocol
53 |         }
54 |
/host/spi-builder-workspace/.build/checkouts/swift-nio-ssh/Sources/NIOSSH/User Authentication/UserAuthenticationMethod.swift:211:13: note: enum 'NIOSSHUserAuthenticationOutcome' does not conform to the 'Sendable' protocol
209 |
210 | /// The outcome of a user authentication attempt.
211 | public enum NIOSSHUserAuthenticationOutcome {
    |             `- note: enum 'NIOSSHUserAuthenticationOutcome' does not conform to the 'Sendable' protocol
212 |     case success
213 |     case partialSuccess(remainingMethods: NIOSSHAvailableUserAuthenticationMethods)
/host/spi-builder-workspace/Sources/CitadelServerExample/Server.swift:5:1: warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'NIOSSH'
 3 | import Foundation
 4 | import NIO
 5 | import NIOSSH
   | `- warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'NIOSSH'
 6 |
 7 | @main struct ExampleSSHServer {
/host/spi-builder-workspace/Sources/CitadelServerExample/Server.swift:55:32: warning: type 'NIOSSHUserAuthenticationOutcome' does not conform to the 'Sendable' protocol
53 |         }
54 |
55 |         return responsePromise.succeed(.failure)
   |                                `- warning: type 'NIOSSHUserAuthenticationOutcome' does not conform to the 'Sendable' protocol
56 |     }
57 | }
/host/spi-builder-workspace/.build/checkouts/swift-nio-ssh/Sources/NIOSSH/User Authentication/UserAuthenticationMethod.swift:211:13: note: enum 'NIOSSHUserAuthenticationOutcome' does not conform to the 'Sendable' protocol
209 |
210 | /// The outcome of a user authentication attempt.
211 | public enum NIOSSHUserAuthenticationOutcome {
    |             `- note: enum 'NIOSSHUserAuthenticationOutcome' does not conform to the 'Sendable' protocol
212 |     case success
213 |     case partialSuccess(remainingMethods: NIOSSHAvailableUserAuthenticationMethods)
[878/883] Compiling CitadelServerExample BasicCommands.swift
[879/883] Emitting module CitadelServerExample
[880/883] Compiling CitadelServerExample EchoShell.swift
[881/884] Wrapping AST for CitadelServerExample for debugging
[882/884] Write Objects.LinkFileList
[883/884] Linking CitadelServerExample
Build complete! (156.05s)
Build complete.
{
  "dependencies" : [
    {
      "identity" : "swift-nio-ssh",
      "requirement" : {
        "range" : [
          {
            "lower_bound" : "0.3.2",
            "upper_bound" : "0.4.0"
          }
        ]
      },
      "type" : "sourceControl",
      "url" : "https://github.com/Joannis/swift-nio-ssh.git"
    },
    {
      "identity" : "swift-log",
      "requirement" : {
        "range" : [
          {
            "lower_bound" : "1.0.0",
            "upper_bound" : "2.0.0"
          }
        ]
      },
      "type" : "sourceControl",
      "url" : "https://github.com/apple/swift-log.git"
    },
    {
      "identity" : "bigint",
      "requirement" : {
        "range" : [
          {
            "lower_bound" : "5.2.0",
            "upper_bound" : "6.0.0"
          }
        ]
      },
      "type" : "sourceControl",
      "url" : "https://github.com/attaswift/BigInt.git"
    },
    {
      "identity" : "swift-crypto",
      "requirement" : {
        "range" : [
          {
            "lower_bound" : "1.0.0",
            "upper_bound" : "2.1.0"
          }
        ]
      },
      "type" : "sourceControl",
      "url" : "https://github.com/apple/swift-crypto.git"
    },
    {
      "identity" : "colorizeswift",
      "requirement" : {
        "range" : [
          {
            "lower_bound" : "1.5.0",
            "upper_bound" : "2.0.0"
          }
        ]
      },
      "type" : "sourceControl",
      "url" : "https://github.com/mtynior/ColorizeSwift.git"
    }
  ],
  "manifest_display_name" : "Citadel",
  "name" : "Citadel",
  "path" : "/host/spi-builder-workspace",
  "platforms" : [
    {
      "name" : "macos",
      "version" : "12.0"
    },
    {
      "name" : "ios",
      "version" : "14.0"
    }
  ],
  "products" : [
    {
      "name" : "Citadel",
      "targets" : [
        "Citadel"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    },
    {
      "name" : "CitadelServerExample",
      "targets" : [
        "CitadelServerExample"
      ],
      "type" : {
        "executable" : null
      }
    }
  ],
  "targets" : [
    {
      "c99name" : "CitadelTests",
      "module_type" : "SwiftTarget",
      "name" : "CitadelTests",
      "path" : "Tests/CitadelTests",
      "product_dependencies" : [
        "NIOSSH",
        "BigInt",
        "Logging"
      ],
      "sources" : [
        "Citadel2Tests.swift",
        "EndToEndTests.swift",
        "KeyTests.swift"
      ],
      "target_dependencies" : [
        "Citadel"
      ],
      "type" : "test"
    },
    {
      "c99name" : "CitadelServerExample",
      "module_type" : "SwiftTarget",
      "name" : "CitadelServerExample",
      "path" : "Sources/CitadelServerExample",
      "product_dependencies" : [
        "ColorizeSwift"
      ],
      "product_memberships" : [
        "CitadelServerExample"
      ],
      "sources" : [
        "EchoShell/BasicCommands.swift",
        "EchoShell/EchoShell.swift",
        "EchoShell/Extensions.swift",
        "EchoShell/Terminal.swift",
        "HostKeyFile.swift",
        "Server.swift"
      ],
      "target_dependencies" : [
        "Citadel"
      ],
      "type" : "executable"
    },
    {
      "c99name" : "Citadel",
      "module_type" : "SwiftTarget",
      "name" : "Citadel",
      "path" : "Sources/Citadel",
      "product_dependencies" : [
        "NIOSSH",
        "Crypto",
        "_CryptoExtras",
        "BigInt",
        "Logging"
      ],
      "product_memberships" : [
        "Citadel",
        "CitadelServerExample"
      ],
      "sources" : [
        "Algorithms/AES.swift",
        "Algorithms/DH-Helpers.swift",
        "Algorithms/DiffieHellmanGroup14Sha1.swift",
        "Algorithms/DiffieHellmanGroup14Sha256.swift",
        "Algorithms/RSA.swift",
        "BCrypt.swift",
        "ByteBufferHelpers.swift",
        "ChannelUnwrapper.swift",
        "Client.swift",
        "ClientSession.swift",
        "DirectTCPIP/Client/DirectTCPIP+Client.swift",
        "DirectTCPIP/Server/DirectTCPIP+Server.swift",
        "Errors.swift",
        "Exec/Client/ExecClient.swift",
        "Exec/Server/ExecDelegate.swift",
        "Exec/Server/ExecHandler.swift",
        "NIOGlueHandler.swift",
        "OpenSSHKey.swift",
        "SFTP/Client/SFTPClient.swift",
        "SFTP/Client/SFTPClientInboundHandler.swift",
        "SFTP/Client/SFTPFile.swift",
        "SFTP/SFTPBasicEnums.swift",
        "SFTP/SFTPFileFlags.swift",
        "SFTP/SFTPMessage.swift",
        "SFTP/SFTPMessageParser.swift",
        "SFTP/SFTPSerializer.swift",
        "SFTP/Server/SFTPServer.swift",
        "SFTP/Server/SFTPServerInboundHandler.swift",
        "SSHAuthenticationMethod.swift",
        "SSHCert.swift",
        "SSHConnectionPoolSettings.swift",
        "SSHKeyTypeDetection.swift",
        "Server.swift",
        "Shell/Server/ShellDelegate.swift",
        "TTY/Client/TTY.swift"
      ],
      "target_dependencies" : [
        "CCitadelBcrypt"
      ],
      "type" : "library"
    },
    {
      "c99name" : "CCitadelBcrypt",
      "module_type" : "ClangTarget",
      "name" : "CCitadelBcrypt",
      "path" : "Sources/CCitadelBcrypt",
      "product_memberships" : [
        "Citadel",
        "CitadelServerExample"
      ],
      "sources" : [
        "bcrypt-kdf.c",
        "bcrypt.c",
        "blf.c"
      ],
      "type" : "library"
    }
  ],
  "tools_version" : "5.5"
}
basic-6.1-latest: Pulling from finestructure/spi-images
Digest: sha256:2e2b3aca8600f890617c2faa770b70e33c1dfd303d6f92b308423b89ef6bde64
Status: Image is up to date for registry.gitlab.com/finestructure/spi-images:basic-6.1-latest
Done.