Build Information
Successful build of PaginatedRESTClient, reference main (9836b5), with Swift 6.4 for macOS (SPM) on 16 Oct 2026 08:25:02 UTC.
Swift 6 data race errors: 0
Build Command
env DEVELOPER_DIR=/Applications/Xcode-27.0.0.app xcrun swift build --arch arm64Build Log
========================================
RunAll
========================================
Builder version: 5.1.3
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/adamtheturtle/PaginatedRESTClient.git
Reference: main
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/adamtheturtle/PaginatedRESTClient
* branch main -> FETCH_HEAD
* [new branch] main -> origin/main
HEAD is now at 9836b58 Merge pull request #233 from adamtheturtle/dependabot/github_actions/astral-sh/setup-uv-10.3.0
Cloned https://github.com/adamtheturtle/PaginatedRESTClient.git
Revision (git rev-parse @):
9836b588624f303605b1b3d4f56712776c217608
SPI manifest file found: $PWD/.spi.yml
SUCCESS checkout https://github.com/adamtheturtle/PaginatedRESTClient.git at main
Fetching https://github.com/swiftlang/swift-docc-symbolkit
Fetching https://github.com/swiftlang/swift-docc-plugin
[1/2345] Fetching swift-docc-plugin
[213/6184] Fetching swift-docc-plugin, swift-docc-symbolkit
Fetched https://github.com/swiftlang/swift-docc-plugin (1.69s)
Fetched https://github.com/swiftlang/swift-docc-symbolkit (1.69s)
Creating working copy for https://github.com/swiftlang/swift-docc-symbolkit
Creating working copy for https://github.com/swiftlang/swift-docc-plugin
Working copy of https://github.com/swiftlang/swift-docc-symbolkit resolved at 1.0.0
Working copy of https://github.com/swiftlang/swift-docc-plugin resolved at 1.5.0
========================================
ResolveProductDependencies
========================================
Resolving dependencies ...
{
"identity": ".resolve-product-dependencies",
"name": "resolve-dependencies",
"url": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies",
"version": "unspecified",
"path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies",
"traits": [
"default"
],
"dependencies": [
{
"identity": "paginatedrestclient",
"name": "PaginatedRESTClient",
"url": "https://github.com/adamtheturtle/PaginatedRESTClient.git",
"version": "unspecified",
"path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies/.build/checkouts/PaginatedRESTClient",
"traits": [
"default"
],
"dependencies": [
]
}
]
}
Fetching https://github.com/adamtheturtle/PaginatedRESTClient.git
[1/774] Fetching paginatedrestclient
Fetched https://github.com/adamtheturtle/PaginatedRESTClient.git (0.98s)
Creating working copy for https://github.com/adamtheturtle/PaginatedRESTClient.git
Working copy of https://github.com/adamtheturtle/PaginatedRESTClient.git resolved at main (9836b58)
warning: '.resolve-product-dependencies': dependency 'paginatedrestclient' is not used by any target
Found 0 product dependencies
========================================
Build
========================================
Selected platform: macosSpm
Swift version: 6.4
Building package at path: $PWD
https://github.com/adamtheturtle/PaginatedRESTClient.git
Running build ...
env DEVELOPER_DIR=/Applications/Xcode-27.0.0.app xcrun swift build --arch arm64
Building for debugging...
[Planning deferred tasks]
[19 / 28]
[20 / 29] PaginatedRESTClient
[30 / 68]
[35 / 68]
[38 / 68]
[39 / 68]
[43 / 68]
[45 / 68]
[48 / 68]
[51 / 68]
[53 / 68]
[54 / 68]
[59 / 68] PaginatedRESTClient
[65 / 68] PaginatedRESTClient
Build complete! (7.77 sec)
Build complete.
{
"dependencies" : [
{
"identity" : "swift-docc-plugin",
"requirement" : {
"range" : [
{
"lower_bound" : "1.4.3",
"upper_bound" : "2.0.0"
}
]
},
"type" : "sourceControl",
"url" : "https://github.com/swiftlang/swift-docc-plugin"
}
],
"manifest_display_name" : "PaginatedRESTClient",
"name" : "PaginatedRESTClient",
"path" : "/Users/admin/builder/spi-builder-workspace",
"platforms" : [
{
"name" : "macos",
"version" : "15.0"
},
{
"name" : "ios",
"version" : "18.0"
},
{
"name" : "tvos",
"version" : "18.0"
},
{
"name" : "watchos",
"version" : "11.0"
},
{
"name" : "visionos",
"version" : "2.0"
}
],
"products" : [
{
"name" : "PaginatedRESTClient",
"targets" : [
"PaginatedRESTClient"
],
"type" : {
"library" : [
"automatic"
]
}
}
],
"targets" : [
{
"c99name" : "PaginatedRESTClientTests",
"module_type" : "SwiftTarget",
"name" : "PaginatedRESTClientTests",
"path" : "Tests/PaginatedRESTClientTests",
"sources" : [
"InitializerIsolationTests.swift",
"OpenIssuesBatchTests.swift",
"PaginatedRESTClientTests.swift",
"READMEQuickStartTests.swift",
"RedirectPolicyTests.swift",
"URLSessionTransportTests.swift"
],
"target_dependencies" : [
"PaginatedRESTClient"
],
"type" : "test"
},
{
"c99name" : "PaginatedRESTClient",
"module_type" : "SwiftTarget",
"name" : "PaginatedRESTClient",
"path" : "Sources/PaginatedRESTClient",
"product_memberships" : [
"PaginatedRESTClient"
],
"sources" : [
"PaginatedRESTClient.swift",
"RESTTransport.swift",
"SameOriginRedirectDelegate.swift",
"URLSessionTransport.swift"
],
"type" : "library"
}
],
"tools_version" : "6.2"
}
✅ Doc result (pending) reported
========================================
GenerateDocs
========================================
Generating docs at path: $PWD/.docs/adamtheturtle/paginatedrestclient/main
Repository: adamtheturtle/PaginatedRESTClient
Swift version used: 6.4
.package(url: "https://github.com/swiftlang/swift-docc-plugin", from: "1.4.3")
Target: PaginatedRESTClient
Extracting symbol information for 'PaginatedRESTClient'...
Finished extracting symbol information for 'PaginatedRESTClient'. (1.48s)
Building documentation for 'PaginatedRESTClient'...
warning: 'authorizedGET(_:)' doesn't exist at '/PaginatedRESTClient/PaginatedRESTClient'
--> CustomTransports.md:37:23-37:40
35 | ## Redirect credential safety
36 |
37 + ``PaginatedRESTClient/authorizedGET(_:)`` and the other authenticated builders validate only the *initial* URL.
| ╰─suggestion: Replace 'authorizedGET(_:)' with 'authorizedGET(_:headers:)'
38 | Once a ``RESTRequest`` is handed to your transport, **redirect handling is entirely yours.**
39 |
warning: 'SameOriginRedirectDelegate' doesn't exist at '/PaginatedRESTClient/CustomTransports'
--> CustomTransports.md:45:44-45:70
43 | 2. Strip credential headers before following a cross-origin redirect.
44 |
45 + ``URLSessionTransport`` does (1) through ``SameOriginRedirectDelegate``.
46 | A literal adapter that blindly replays the original ``RESTRequest/headers`` on every hop can reintroduce a credential leak.
47 | Treat same-origin redirect policy as part of the ``RESTTransport`` contract, not an optional URLSession detail.
warning: 'init(apiKey:baseURL:transport:decoderFactory:encoderFactory:errors:log:maxSequentialPages:maxParallelPages:maxRetryDelay:maxAttempts:)' doesn't exist at '/PaginatedRESTClient/PaginatedRESTClient'
--> PaginatedRESTClient.md:27:45-27:179
25 |
26 | Idempotent requests retry up to three times by default.
27 + Pass `maxAttempts` to ``PaginatedRESTClient/init(apiKey:baseURL:transport:decoderFactory:encoderFactory:errors:log:maxSequentialPages:maxParallelPages:maxRetryDelay:maxAttempts:)`` to change that default for ``PaginatedRESTClient/fetch(_:path:)``, pagination, and ``PaginatedRESTClient/performWithRetry(_:request:maxAttempts:)``.
| ╰─suggestion: Replace 'init(apiKey:baseURL:transport:decoderFactory:encoderFactory:errors:log:maxSequentialPages:maxParallelPages:maxRetryDelay:maxAttempts:)' with 'init(apiKey:baseURL:transport:decoderFactory:encoderFactory:errors:log:maxSequentialPages:maxParallelPages:maxRetryDelay:maxAttempts:maxPaginationHTTPAttempts:)'
28 | Retry delays cap at 60 seconds by default.
29 | Configure `maxRetryDelay` when an API's `Retry-After` requires a longer cooldown.
warning: 'fetch(_:path:)' doesn't exist at '/PaginatedRESTClient/PaginatedRESTClient'
--> PaginatedRESTClient.md:27:231-27:245
25 |
26 | Idempotent requests retry up to three times by default.
27 + Pass `maxAttempts` to ``PaginatedRESTClient/init(apiKey:baseURL:transport:decoderFactory:encoderFactory:errors:log:maxSequentialPages:maxParallelPages:maxRetryDelay:maxAttempts:)`` to change that default for ``PaginatedRESTClient/fetch(_:path:)``, pagination, and ``PaginatedRESTClient/performWithRetry(_:request:maxAttempts:)``.
| ├─suggestion: Replace 'fetch(_:path:)' with 'fetch(_:path:headers:)'
| ╰─suggestion: Replace 'fetch(_:path:)' with 'fetchAllPages(_:path:sort:)'
28 | Retry delays cap at 60 seconds by default.
29 | Configure `maxRetryDelay` when an API's `Retry-After` requires a longer cooldown.
warning: 'init(apiKey:baseURL:transport:decoderFactory:encoderFactory:errors:log:maxSequentialPages:maxParallelPages:)' doesn't exist at '/PaginatedRESTClient/PaginatedRESTClient'
--> PaginatedRESTClient.md:34:75-34:183
32 |
33 | ``PaginatedRESTClient/defaultMaxSequentialPages`` and ``PaginatedRESTClient/defaultMaxParallelPages`` both default to `1000`.
34 + Pass `maxSequentialPages` and `maxParallelPages` to ``PaginatedRESTClient/init(apiKey:baseURL:transport:decoderFactory:encoderFactory:errors:log:maxSequentialPages:maxParallelPages:)`` to tune them per client.
| ╰─suggestion: Replace 'init(apiKey:baseURL:transport:decoderFactory:encoderFactory:errors:log:maxSequentialPages:maxParallelPages:)' with 'init(apiKey:baseURL:transport:decoderFactory:encoderFactory:errors:log:maxSequentialPages:maxParallelPages:maxRetryDelay:maxAttempts:maxPaginationHTTPAttempts:)'
35 | Hitting either cap throws through ``RESTTransportErrorMapping/invalidRequest(_:)`` rather than truncating the list.
36 | The sequential walk counts the initial page toward `maxSequentialPages`.
warning: 'Hashable' doesn't exist at '/PaginatedRESTClient/RESTItemIdentity'
--> ../PaginatedRESTClient.swift:35:9-35:17
33 | /// rather than walking `next_page` one blocking round-trip at a time.
34 |
35 + /// A ``Hashable`` & ``Sendable`` item identity for pagination de-duplication (#122).
36 | ///
37 | /// Swift 6 marks `AnyHashable`'s `Sendable` conformance unavailable, so the public
warning: 'Sendable' doesn't exist at '/PaginatedRESTClient/RESTItemIdentity'
--> ../PaginatedRESTClient.swift:35:24-35:32
33 | /// rather than walking `next_page` one blocking round-trip at a time.
34 |
35 + /// A ``Hashable`` & ``Sendable`` item identity for pagination de-duplication (#122).
36 | ///
37 | /// Swift 6 marks `AnyHashable`'s `Sendable` conformance unavailable, so the public
warning: 'maxSequentialPages' doesn't exist at '/PaginatedRESTClient/PaginatedRESTClient/maxPaginationHTTPAttempts'
--> ../PaginatedRESTClient.swift:339:23-339:41
337 |
338 | /// Upper bound on HTTP attempts across one paginated list (retries included) (#123).
339 + /// Defaults to ``maxSequentialPages`` × ``maxAttempts``. Parallel fetches also count
340 | /// toward ``maxSequentialPages``, so that valve (not ``maxParallelPages`` alone) is
341 | /// the page budget the retry multiplier must cover.
warning: 'maxAttempts' doesn't exist at '/PaginatedRESTClient/PaginatedRESTClient/maxPaginationHTTPAttempts'
--> ../PaginatedRESTClient.swift:339:49-339:60
337 |
338 | /// Upper bound on HTTP attempts across one paginated list (retries included) (#123).
339 + /// Defaults to ``maxSequentialPages`` × ``maxAttempts``. Parallel fetches also count
340 | /// toward ``maxSequentialPages``, so that valve (not ``maxParallelPages`` alone) is
341 | /// the page budget the retry multiplier must cover.
warning: 'maxSequentialPages' doesn't exist at '/PaginatedRESTClient/PaginatedRESTClient/maxPaginationHTTPAttempts'
--> ../PaginatedRESTClient.swift:340:18-340:36
338 | /// Upper bound on HTTP attempts across one paginated list (retries included) (#123).
339 | /// Defaults to ``maxSequentialPages`` × ``maxAttempts``. Parallel fetches also count
340 + /// toward ``maxSequentialPages``, so that valve (not ``maxParallelPages`` alone) is
341 | /// the page budget the retry multiplier must cover.
342 | public nonisolated let maxPaginationHTTPAttempts: Int
warning: 'maxParallelPages' doesn't exist at '/PaginatedRESTClient/PaginatedRESTClient/maxPaginationHTTPAttempts'
--> ../PaginatedRESTClient.swift:340:61-340:77
338 | /// Upper bound on HTTP attempts across one paginated list (retries included) (#123).
339 | /// Defaults to ``maxSequentialPages`` × ``maxAttempts``. Parallel fetches also count
340 + /// toward ``maxSequentialPages``, so that valve (not ``maxParallelPages`` alone) is
341 | /// the page budget the retry multiplier must cover.
342 | public nonisolated let maxPaginationHTTPAttempts: Int
warning: 'fetch(_:path:)' doesn't exist at '/PaginatedRESTClient/PaginatedRESTClient/validatedAuthenticatedURL(_:)'
--> ../PaginatedRESTClient.swift:1309:56-1309:70
1307 |
1308 | /// Validates that `url` stays on the configured HTTP(S) origin without URL userinfo,
1309 + /// matching the credential-safety rules used by ``fetch(_:path:)``.
1310 | nonisolated func validatedAuthenticatedURL(_ url: URL) throws -> URL {
1311 | guard SameOriginRedirectDelegate.hasSameOrigin(baseURL, url),
Finished building documentation for 'PaginatedRESTClient' (0.18s)
Generated documentation archive at:
/Users/admin/builder/spi-builder-workspace/.docs/adamtheturtle/paginatedrestclient/main
Building for debugging...
[Planning deferred tasks]
[18 / 41]
[20 / 43] Snippets
[30 / 92]
[35 / 92]
[38 / 92]
[39 / 92]
[43 / 92]
[45 / 92]
[48 / 92]
[51 / 92]
[53 / 92]
[54 / 92]
[65 / 92] SymbolKit
[66 / 92] Snippets
[84 / 93] SymbolKit
[86 / 93] Snippets
[92 / 97] snippet-extract-product
[93 / 97] snippet-extract-product
[95 / 97] snippet-extract-product
Build complete! (4.41 sec)
Building for debugging...
[Planning deferred tasks]
[3 / 11] PaginatedRESTClient
[8 / 16] PaginatedRESTClient
[10 / 12] PaginatedRESTClient
Build complete! (1.28 sec)
370
4 /Users/admin/builder/spi-builder-workspace/.docs/adamtheturtle/paginatedrestclient/main
✅ Doc result (uploading) reported
========================================
SyncDocs
========================================
Doc archive source directory: $PWD/.docs/adamtheturtle/paginatedrestclient/main
File count: 370
Doc size: 4.0MB
Preparing doc bundle ...
Using presigned URL upload - AWS credentials not required
Uploading -adamtheturtle-paginatedrestclient-main-a2c6e2a8.zip to presigned URL
Starting upload of 809129 bytes...
Upload completed successfully
Done.