Thanks to visit codestin.com
Credit goes to github.com

Skip to content

feat: migrate to latest Swift 6.2#57

Merged
hsluoyz merged 3 commits into
masterfrom
copilot/migrate-to-swift-6-2
Jan 1, 2026
Merged

feat: migrate to latest Swift 6.2#57
hsluoyz merged 3 commits into
masterfrom
copilot/migrate-to-swift-6-2

Conversation

Copilot AI commented Jan 1, 2026

Copy link
Copy Markdown
Contributor

Swift 6.2 Migration Progress

  • Update Package.swift to Swift 6.2
  • Update CI workflow to use Swift 6.2
  • Update README badge
  • Add Sendable constraints to async/await bridge functions
  • Fix Sendable warnings in InternalApi.swift (added @unchecked Sendable to Enforcer)
  • Fix test failures by replacing #file with #filePath
  • Verify all tests pass after fixes
Original prompt

This section details on the original issue you should resolve

<issue_title>[feature] migrate to latest Swift 6.2</issue_title>
<issue_description></issue_description>

Comments on the Issue (you are @copilot in this section)


💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

@CLAassistant

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.
You have signed the CLA already but the status is still pending? Let us recheck it.

@hsluoyz hsluoyz marked this pull request as ready for review January 1, 2026 03:01
Copilot AI changed the title [WIP] Migrate project to latest Swift 6.2 Migrate to Swift 6.2 Jan 1, 2026
Copilot AI requested a review from hsluoyz January 1, 2026 03:09
@hsluoyz hsluoyz changed the title Migrate to Swift 6.2 feat: migrate to latest Swift 6.2 Jan 1, 2026
@hsluoyz

hsluoyz commented Jan 1, 2026

Copy link
Copy Markdown
Member

@copilot fix failed CI check: https://github.com/casbin/SwiftCasbin/actions/runs/20631612818/job/59250547705?pr=57

[324/360] Emitting module Casbin
[325/368] Compiling Casbin Role.swift
[326/368] Compiling Casbin RoleManager.swift
[327/368] Compiling Casbin CasbinResult.swift
[328/368] Compiling Casbin Extension+Dictionary.swift
[329/368] Compiling Casbin MatchFunctions.swift
[330/368] Compiling Casbin Storage.swift
[331/368] Compiling Casbin Util.swift
[332/368] Compiling Casbin Watcher.swift
[333/368] Compiling Casbin Cache.swift
/__w/SwiftCasbin/SwiftCasbin/Sources/Casbin/Config.swift:26:16: warning: 'openFile(path:eventLoop:)' is deprecated: Avoid using NIOFileHandle. The type is difficult to hold correctly, use NIOFileSystem as a replacement API. [#DeprecatedDeclaration]
 24 | 
 25 |     public static func from(file:String,fileIo:NonBlockingFileIO,on eventloop:EventLoop) -> EventLoopFuture<Self> {
 26 |         fileIo.openFile(path: file, eventLoop: eventloop).flatMap { arg -> EventLoopFuture<ByteBuffer> in
    |                `- warning: 'openFile(path:eventLoop:)' is deprecated: Avoid using NIOFileHandle. The type is difficult to hold correctly, use NIOFileSystem as a replacement API. [#DeprecatedDeclaration]
 27 |             fileIo.read(fileRegion: arg.1, allocator: .init(), eventLoop: eventloop)
 28 |                 .flatMapThrowing { buffer in

[#DeprecatedDeclaration]: <https://docs.swift.org/compiler/documentation/diagnostics/deprecated-declaration>
[334/368] Compiling Casbin MemoryCache.swift
/__w/SwiftCasbin/SwiftCasbin/Sources/Casbin/Config.swift:26:16: warning: 'openFile(path:eventLoop:)' is deprecated: Avoid using NIOFileHandle. The type is difficult to hold correctly, use NIOFileSystem as a replacement API. [#DeprecatedDeclaration]
 24 | 
 25 |     public static func from(file:String,fileIo:NonBlockingFileIO,on eventloop:EventLoop) -> EventLoopFuture<Self> {
 26 |         fileIo.openFile(path: file, eventLoop: eventloop).flatMap { arg -> EventLoopFuture<ByteBuffer> in
    |                `- warning: 'openFile(path:eventLoop:)' is deprecated: Avoid using NIOFileHandle. The type is difficult to hold correctly, use NIOFileSystem as a replacement API. [#DeprecatedDeclaration]
 27 |             fileIo.read(fileRegion: arg.1, allocator: .init(), eventLoop: eventloop)
 28 |                 .flatMapThrowing { buffer in

[#DeprecatedDeclaration]: <https://docs.swift.org/compiler/documentation/diagnostics/deprecated-declaration>
[335/368] Compiling Casbin CasbinError.swift
/__w/SwiftCasbin/SwiftCasbin/Sources/Casbin/Config.swift:26:16: warning: 'openFile(path:eventLoop:)' is deprecated: Avoid using NIOFileHandle. The type is difficult to hold correctly, use NIOFileSystem as a replacement API. [#DeprecatedDeclaration]
 24 | 
 25 |     public static func from(file:String,fileIo:NonBlockingFileIO,on eventloop:EventLoop) -> EventLoopFuture<Self> {
 26 |         fileIo.openFile(path: file, eventLoop: eventloop).flatMap { arg -> EventLoopFuture<ByteBuffer> in
    |                `- warning: 'openFile(path:eventLoop:)' is deprecated: Avoid using NIOFileHandle. The type is difficult to hold correctly, use NIOFileSystem as a replacement API. [#DeprecatedDeclaration]
 27 |             fileIo.read(fileRegion: arg.1, allocator: .init(), eventLoop: eventloop)
 28 |                 .flatMapThrowing { buffer in

[#DeprecatedDeclaration]: <https://docs.swift.org/compiler/documentation/diagnostics/deprecated-declaration>
[336/368] Compiling Casbin Config.swift
/__w/SwiftCasbin/SwiftCasbin/Sources/Casbin/Config.swift:26:16: warning: 'openFile(path:eventLoop:)' is deprecated: Avoid using NIOFileHandle. The type is difficult to hold correctly, use NIOFileSystem as a replacement API. [#DeprecatedDeclaration]
 24 | 
 25 |     public static func from(file:String,fileIo:NonBlockingFileIO,on eventloop:EventLoop) -> EventLoopFuture<Self> {
 26 |         fileIo.openFile(path: file, eventLoop: eventloop).flatMap { arg -> EventLoopFuture<ByteBuffer> in
    |                `- warning: 'openFile(path:eventLoop:)' is deprecated: Avoid using NIOFileHandle. The type is difficult to hold correctly, use NIOFileSystem as a replacement API. [#DeprecatedDeclaration]
 27 |             fileIo.read(fileRegion: arg.1, allocator: .init(), eventLoop: eventloop)
 28 |                 .flatMapThrowing { buffer in

[#DeprecatedDeclaration]: <https://docs.swift.org/compiler/documentation/diagnostics/deprecated-declaration>
[337/368] Compiling Casbin Core.swift
/__w/SwiftCasbin/SwiftCasbin/Sources/Casbin/Config.swift:26:16: warning: 'openFile(path:eventLoop:)' is deprecated: Avoid using NIOFileHandle. The type is difficult to hold correctly, use NIOFileSystem as a replacement API. [#DeprecatedDeclaration]
 24 | 
 25 |     public static func from(file:String,fileIo:NonBlockingFileIO,on eventloop:EventLoop) -> EventLoopFuture<Self> {
 26 |         fileIo.openFile(path: file, eventLoop: eventloop).flatMap { arg -> EventLoopFuture<ByteBuffer> in
    |                `- warning: 'openFile(path:eventLoop:)' is deprecated: Avoid using NIOFileHandle. The type is difficult to hold correctly, use NIOFileSystem as a replacement API. [#DeprecatedDeclaration]
 27 |             fileIo.read(fileRegion: arg.1, allocator: .init(), eventLoop: eventloop)
 28 |                 .flatMapThrowing { buffer in

[#DeprecatedDeclaration]: <https://docs.swift.org/compiler/documentation/diagnostics/deprecated-declaration>
[338/368] Compiling Casbin Effect.swift
/__w/SwiftCasbin/SwiftCasbin/Sources/Casbin/Config.swift:26:16: warning: 'openFile(path:eventLoop:)' is deprecated: Avoid using NIOFileHandle. The type is difficult to hold correctly, use NIOFileSystem as a replacement API. [#DeprecatedDeclaration]
 24 | 
 25 |     public static func from(file:String,fileIo:NonBlockingFileIO,on eventloop:EventLoop) -> EventLoopFuture<Self> {
 26 |         fileIo.openFile(path: file, eventLoop: eventloop).flatMap { arg -> EventLoopFuture<ByteBuffer> in
    |                `- warning: 'openFile(path:eventLoop:)' is deprecated: Avoid using NIOFileHandle. The type is difficult to hold correctly, use NIOFileSystem as a replacement API. [#DeprecatedDeclaration]
 27 |             fileIo.read(fileRegion: arg.1, allocator: .init(), eventLoop: eventloop)
 28 |                 .flatMapThrowing { buffer in

[#DeprecatedDeclaration]: <https://docs.swift.org/compiler/documentation/diagnostics/deprecated-declaration>
[339/368] Compiling Casbin Effector.swift
/__w/SwiftCasbin/SwiftCasbin/Sources/Casbin/Config.swift:26:16: warning: 'openFile(path:eventLoop:)' is deprecated: Avoid using NIOFileHandle. The type is difficult to hold correctly, use NIOFileSystem as a replacement API. [#DeprecatedDeclaration]
 24 | 
 25 |     public static func from(file:String,fileIo:NonBlockingFileIO,on eventloop:EventLoop) -> EventLoopFuture<Self> {
 26 |         fileIo.openFile(path: file, eventLoop: eventloop).flatMap { arg -> EventLoopFuture<ByteBuffer> in
    |                `- warning: 'openFile(path:eventLoop:)' is deprecated: Avoid using NIOFileHandle. The type is difficult to hold correctly, use NIOFileSystem as a replacement API. [#DeprecatedDeclaration]
 27 |             fileIo.read(fileRegion: arg.1, allocator: .init(), eventLoop: eventloop)
 28 |                 .flatMapThrowing { buffer in

[#DeprecatedDeclaration]: <https://docs.swift.org/compiler/documentation/diagnostics/deprecated-declaration>
[340/368] Compiling Casbin Enforce+Cache.swift
/__w/SwiftCasbin/SwiftCasbin/Sources/Casbin/Config.swift:26:16: warning: 'openFile(path:eventLoop:)' is deprecated: Avoid using NIOFileHandle. The type is difficult to hold correctly, use NIOFileSystem as a replacement API. [#DeprecatedDeclaration]
 24 | 
 25 |     public static func from(file:String,fileIo:NonBlockingFileIO,on eventloop:EventLoop) -> EventLoopFuture<Self> {
 26 |         fileIo.openFile(path: file, eventLoop: eventloop).flatMap { arg -> EventLoopFuture<ByteBuffer> in
    |                `- warning: 'openFile(path:eventLoop:)' is deprecated: Avoid using NIOFileHandle. The type is difficult to hold correctly, use NIOFileSystem as a replacement API. [#DeprecatedDeclaration]
 27 |             fileIo.read(fileRegion: arg.1, allocator: .init(), eventLoop: eventloop)
 28 |                 .flatMapThrowing { buffer in

[#DeprecatedDeclaration]: <https://docs.swift.org/compiler/documentation/diagnostics/deprecated-declaration>
[341/368] Compiling Casbin Enforcer+AsyncAwait.swift
/__w/SwiftCasbin/SwiftCasbin/Sources/Casbin/Config.swift:26:16: warning: 'openFile(path:eventLoop:)' is deprecated: Avoid using NIOFileHandle. The type is difficult to hold correctly, use NIOFileSystem as a replacement API. [#DeprecatedDeclaration]
 24 | 
 25 |     public static func from(file:String,fileIo:NonBlockingFileIO,on eventloop:EventLoop) -> EventLoopFuture<Self> {
 26 |         fileIo.openFile(path: file, eventLoop: eventloop).flatMap { arg -> EventLoopFuture<ByteBuffer> in
    |                `- warning: 'openFile(path:eventLoop:)' is deprecated: Avoid using NIOFileHandle. The type is difficult to hold correctly, use NIOFileSystem as a replacement API. [#DeprecatedDeclaration]
 27 |             fileIo.read(fileRegion: arg.1, allocator: .init(), eventLoop: eventloop)
 28 |                 .flatMapThrowing { buffer in

[#DeprecatedDeclaration]: <https://docs.swift.org/compiler/documentation/diagnostics/deprecated-declaration>
[342/368] Compiling Casbin CoreApi.swift
/__w/SwiftCasbin/SwiftCasbin/Sources/Casbin/APi/InternalApi.swift:21:16: warning: capture of 'self' with non-Sendable type 'Self' in a '@Sendable' closure [#SendableClosureCaptures]
19 |     func addPolicyInternal(sec:String,ptype:String,rule:[String]) -> EventLoopFuture<Bool> {
20 |         adapter.addPolicy(sec: sec, ptype: ptype, rule: rule).flatMap { _bool in
21 |             if hasAutoSaveEnable() && !_bool {
   |                `- warning: capture of 'self' with non-Sendable type 'Self' in a '@Sendable' closure [#SendableClosureCaptures]
22 |                return eventLoopGroup.next().makeSucceededFuture(false)
23 |             }

Casbin.CoreApi.Self:2:1: note: consider making generic parameter 'Self' conform to the 'Sendable' protocol
1 | protocol CoreApi {
2 | Self : Casbin.CoreApi}
  | `- note: consider making generic parameter 'Self' conform to the 'Sendable' protocol
3 | 

/__w/SwiftCasbin/SwiftCasbin/Sources/Casbin/APi/InternalApi.swift:21:16: warning: capture of non-Sendable type 'Self.Type' in an isolated closure [#SendableMetatypes]
19 |     func addPolicyInternal(sec:String,ptype:String,rule:[String]) -> EventLoopFuture<Bool> {
20 |         adapter.addPolicy(sec: sec, ptype: ptype, rule: rule).flatMap { _bool in
21 |             if hasAutoSaveEnable() && !_bool {
   |                `- warning: capture of non-Sendable type 'Self.Type' in an isolated closure [#SendableMetatypes]
22 |                return eventLoopGroup.next().makeSucceededFuture(false)
23 |             }

/__w/SwiftCasbin/SwiftCasbin/Sources/Casbin/APi/InternalApi.swift:32:16: warning: capture of 'self' with non-Sendable type 'Self' in a '@Sendable' closure [#SendableClosureCaptures]
30 |     func addPoliciesInternal(sec:String,ptype:String,rules:[[String]]) -> EventLoopFuture<Bool> {
31 |         adapter.addPolicies(sec: sec, ptype: ptype, rules: rules).flatMap { _bool in
32 |             if hasAutoSaveEnable() && !_bool {
   |                `- warning: capture of 'self' with non-Sendable type 'Self' in a '@Sendable' closure [#SendableClosureCaptures]
33 |                return eventLoopGroup.next().makeSucceededFuture(false)
34 |             }

Casbin.CoreApi.Self:2:1: note: consider making generic parameter 'Self' conform to the 'Sendable' protocol
1 | protocol CoreApi {
2 | Self : Casbin.CoreApi}
  | `- note: consider making generic parameter 'Self' conform to the 'Sendable' protocol
3 | 

/__w/SwiftCasbin/SwiftCasbin/Sources/Casbin/APi/InternalApi.swift:32:16: warning: capture of non-Sendable type 'Self.Type' in an isolated closure [#SendableMetatypes]
30 |     func addPoliciesInternal(sec:String,ptype:String,rules:[[String]]) -> EventLoopFuture<Bool> {
31 |         adapter.addPolicies(sec: sec, ptype: ptype, rules: rules).flatMap { _bool in
32 |             if hasAutoSaveEnable() && !_bool {
   |                `- warning: capture of non-Sendable type 'Self.Type' in an isolated closure [#SendableMetatypes]
33 |                return eventLoopGroup.next().makeSucceededFuture(false)
34 |             }

/__w/SwiftCasbin/SwiftCasbin/Sources/Casbin/APi/InternalApi.swift:42:16: warning: capture of 'self' with non-Sendable type 'Self' in a '@Sendable' closure [#SendableClosureCaptures]
40 |     func removePolicyInternal(sec:String,ptype:String,rule:[String]) -> EventLoopFuture<Bool> {
41 |         adapter.removePolicy(sec: sec, ptype: ptype, rule: rule).flatMap { _bool in
42 |             if hasAutoSaveEnable() && !_bool {
   |                `- warning: capture of 'self' with non-Sendable type 'Self' in a '@Sendable' closure [#SendableClosureCaptures]
43 |                return eventLoopGroup.next().makeSucceededFuture(false)
44 |             }

Casbin.CoreApi.Self:2:1: note: consider making generic parameter 'Self' conform to the 'Sendable' protocol
1 | protocol CoreApi {
2 | Self : Casbin.CoreApi}
  | `- note: consider making generic parameter 'Self' conform to the 'Sendable' protocol
3 | 

/__w/SwiftCasbin/SwiftCasbin/Sources/Casbin/APi/InternalApi.swift:42:16: warning: capture of non-Sendable type 'Self.Type' in an isolated closure [#SendableMetatypes]
40 |     func removePolicyInternal(sec:String,ptype:String,rule:[String]) -> EventLoopFuture<Bool> {
41 |         adapter.removePolicy(sec: sec, ptype: ptype, rule: rule).flatMap { _bool in
42 |             if hasAutoSaveEnable() && !_bool {
   |                `- warning: capture of non-Sendable type 'Self.Type' in an isolated closure [#SendableMetatypes]
43 |                return eventLoopGroup.next().makeSucceededFuture(false)
44 |             }
✘ Test "rbac not deny" recorded an issue at DefaultModelTests.swift:218:6: Caught error: open(file:oFlag:mode:): No such file or directory) (errno: 2)
✘ Test "filtered file adapter" recorded an issue at EnforcerTests.swift:227:6: Caught error: open(file:oFlag:mode:): No such file or directory) (errno: 2)
✘ Test "rbac with deny" recorded an issue at DefaultModelTests.swift:204:6: Caught error: open(file:oFlag:mode:): No such file or directory) (errno: 2)
✘ Test "root no policy" recorded an issue at DefaultModelTests.swift:72:6: Caught error: open(file:oFlag:mode:): No such file or directory) (errno: 2)
✘ Test "rbac with resource roles" recorded an issue at DefaultModelTests.swift:123:6: Caught error: open(file:oFlag:mode:): No such file or directory) (errno: 2)
✘ Test "basic model no policy" recorded an issue at DefaultModelTests.swift:41:6: Caught error: open(file:oFlag:mode:): No such file or directory) (errno: 2)
✘ Test "keymatch custom function" recorded an issue at EnforcerTests.swift:212:6: Caught error: open(file:oFlag:mode:): No such file or directory) (errno: 2)
✘ Test "rbac multiline model" recorded an issue at EnforcerTests.swift:115:6: Caught error: open(file:oFlag:mode:): No such file or directory) (errno: 2)
✘ Test "rbac model basic" recorded an issue at DefaultModelTests.swift:109:6: Caught error: open(file:oFlag:mode:): No such file or directory) (errno: 2)
✘ Test "basic model without resources" recorded an issue at DefaultModelTests.swift:99:6: Caught error: open(file:oFlag:mode:): No such file or directory) (errno: 2)
✘ Test "rbac with domains" recorded an issue at DefaultModelTests.swift:137:6: Caught error: open(file:oFlag:mode:): No such file or directory) (errno: 2)
✘ Test "basic role APIs" failed after 1.009 seconds with 1 issue.
✘ Test "core API with domain" failed after 1.009 seconds with 1 issue.
✘ Test "keyMatch model in memory" failed after 1.008 seconds with 1 issue.
✘ Test "get & set adapter in-memory" failed after 1.009 seconds with 1 issue.
✘ Test "role links" failed after 1.009 seconds with 1 issue.
✘ Test "ip match model" failed after 1.009 seconds with 1 issue.
✘ Test "rbac in memory" failed after 1.009 seconds with 1 issue.
✘ Test "set role manager" failed after 1.008 seconds with 1 issue.
✘ Test "keyMatch deny" failed after 1.009 seconds with 1 issue.
✘ Test "basic model without users" failed after 1.009 seconds with 1 issue.
✘ Test "rbac domains at runtime with adapter" failed after 1.009 seconds with 1 issue.
✘ Test "basic model with root" failed after 1.009 seconds with 1 issue.
✘ Test "rbac with domains runtime policy" failed after 1.009 seconds with 1 issue.
✔ Test "keyMatch" passed after 1.008 seconds.
✘ Test "enable auto save" failed after 1.010 seconds with 1 issue.
✘ Test "rbac using in op" failed after 1.009 seconds with 1 issue.
✘ Test "get & set model" failed after 1.009 seconds with 1 issue.
✘ Test "load from file and get/set" failed after 1.010 seconds with 1 issue.
✘ Test "rbac with custom data" failed after 1.009 seconds with 1 issue.
✔ Test "load from text and get/set" passed after 1.010 seconds.
✘ Test "basic model" failed after 1.009 seconds with 1 issue.
✘ Test "rbac not deny" failed after 1.009 seconds with 1 issue.
✔ Test "rbac indeterminate" passed after 1.009 seconds.
✘ Test "filtered file adapter" failed after 1.009 seconds with 1 issue.
✘ Test "abac model" failed after 1.009 seconds with 1 issue.
✘ Test "root no policy" failed after 1.009 seconds with 1 issue.
✘ Test "rbac with resource roles" failed after 1.009 seconds with 1 issue.
✘ Test "rbac with deny" failed after 1.009 seconds with 1 issue.
✘ Test "basic model no policy" failed after 1.009 seconds with 1 issue.
✘ Test "keymatch custom function" failed after 1.009 seconds with 1 issue.
✔ Test "Clear all roles" passed after 1.009 seconds.
✘ Test "rbac multiline model" failed after 1.009 seconds with 1 issue.
✔ Test "Domain-specific roles" passed after 1.009 seconds.
✘ Test "rbac model basic" failed after 1.009 seconds with 1 issue.
✔ Test "keyMatch3 braces params" passed after 1.009 seconds.
✔ Test "regexMatch" passed after 1.009 seconds.
✔ Test "Get users for a role" passed after 1.009 seconds.
✔ Test "Role hierarchy management" passed after 1.009 seconds.
✔ Test "policy ABAC 1" passed after 1.010 seconds.
✔ Test "escapeAssertion replaces dots with underscores" passed after 1.009 seconds.
✔ Test "keyMatch2 path params" passed after 1.009 seconds.
✔ Test "globMatch patterns" passed after 1.009 seconds.
✔ Test "CSV parsing: quoted field with comma" passed after 1.009 seconds.
✔ Test "CSV parsing: multiple quoted fields" passed after 1.009 seconds.
✘ Test "rbac with domains" failed after 1.009 seconds with 1 issue.
✔ Test "CSV parsing: only comma yields nil" passed after 1.009 seconds.
✔ Test "policy ABAC 2" passed after 1.010 seconds.
✔ Test "ipMatch IPv4/IPv6 + CIDR" passed after 1.009 seconds.
✔ Test "CSV parsing: simple" passed after 1.009 seconds.
✘ Suite "RBAC API" failed after 1.013 seconds with 2 issues.
✘ Suite "Enforcer" failed after 1.013 seconds with 12 issues.
✔ Test "CSV parsing: edge cases" passed after 1.009 seconds.
✔ Suite "Key/Glob/IP match utilities" passed after 1.013 seconds.
✘ Test "basic model without resources" failed after 1.009 seconds with 1 issue.
✘ Suite "Config parsing" failed after 1.013 seconds with 1 issue.
✔ Suite "Role Manager Tests" passed after 1.013 seconds.
✔ Suite "Utilities: CSV + assertion escaping" passed after 1.013 seconds.
✘ Suite "Default Model" failed after 1.013 seconds with 16 issues.
✘ Test run with 58 tests in 8 suites failed after 1.015 seconds with 31 issues.
Error: Process completed with exit code 1.

Copilot AI commented Jan 1, 2026

Copy link
Copy Markdown
Contributor Author

@copilot fix failed CI check: https://github.com/casbin/SwiftCasbin/actions/runs/20631612818/job/59250547705?pr=57

...

Fixed in commit 49fb70e. The issues were:

  1. Sendable warnings: Added @unchecked Sendable conformance to the Enforcer class
  2. Test failures: Replaced #file with #filePath in test files - Swift 5.3+ changed the default behavior of #file to return module/file names instead of full paths

All 58 tests now pass with thread sanitizer enabled.

@hsluoyz hsluoyz merged commit f4d4d6b into master Jan 1, 2026
5 of 6 checks passed
hsluoyz added a commit that referenced this pull request Jan 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[feature] migrate to latest Swift 6.2

3 participants