The Swift Package Index logo.Swift Package Index

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 arm64

Build 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.