Build Information
Successful build of CoderPadKit, reference 0.6.0 (e6ff75), with Swift 6.4 for macOS (SPM) on 9 Oct 2026 21:51:45 UTC.
Swift 6 data race errors: 0
Build Command
env DEVELOPER_DIR=/Applications/Xcode-27.0.0-Release.Candidate.app xcrun swift build --arch arm64Build Log
========================================
RunAll
========================================
Builder version: 5.1.1
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/adamtheturtle/CoderPadKit.git
Reference: 0.6.0
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/adamtheturtle/CoderPadKit
* tag 0.6.0 -> FETCH_HEAD
HEAD is now at e6ff75c Prepare CoderPadKit 0.6.0 release notes (#338)
Cloned https://github.com/adamtheturtle/CoderPadKit.git
Revision (git rev-parse @):
e6ff75c54ade58ffbda32df4fd81ac04deef534a
SPI manifest file found: $PWD/.spi.yml
SUCCESS checkout https://github.com/adamtheturtle/CoderPadKit.git at 0.6.0
========================================
Build
========================================
Selected platform: macosSpm
Swift version: 6.4
Building package at path: $PWD
https://github.com/adamtheturtle/CoderPadKit.git
Running build ...
env DEVELOPER_DIR=/Applications/Xcode-27.0.0-Release.Candidate.app xcrun swift build --arch arm64
Building for debugging...
[Computing dependencies]
[Pre-planning 1 / 184]
[Planning deferred tasks]
[38 / 72]
[40 / 74] PaginatedRESTClient
[59 / 158]
[64 / 158]
[74 / 158]
[77 / 158]
[78 / 158]
[85 / 158]
[89 / 158]
[94 / 158]
[99 / 158]
[102 / 158]
[104 / 158]
[106 / 158]
[108 / 158]
[119 / 158] SafeURLKit
[132 / 158] SafeURLKit-product
[137 / 159] PaginatedRESTClient
[137 / 159] SafeURLKit
[143 / 174] SafeURLKit
[145 / 174]
[156 / 174] CoderPadKit
[163 / 175] CoderPadKit
[163 / 175] CoderPadKitMock
[165 / 188]
[176 / 188] CoderPadKitMock
[180 / 188] CoderPadKitMock
[185 / 188] CoderPadKitMock
Build complete! (13.71 sec)
Fetching https://github.com/adamtheturtle/PaginatedRESTClient.git
Fetching https://github.com/adamtheturtle/SafeURLKit.git
[1/767] Fetching paginatedrestclient
[2/1756] Fetching paginatedrestclient, safeurlkit
Fetched https://github.com/adamtheturtle/SafeURLKit.git (1.00s)
Fetched https://github.com/adamtheturtle/PaginatedRESTClient.git (1.00s)
Computing version for https://github.com/adamtheturtle/SafeURLKit.git
Computed https://github.com/adamtheturtle/SafeURLKit.git at 0.2.0 (1.59s)
Computing version for https://github.com/adamtheturtle/PaginatedRESTClient.git
Computed https://github.com/adamtheturtle/PaginatedRESTClient.git at 0.5.0 (0.56s)
Creating working copy for https://github.com/adamtheturtle/SafeURLKit.git
Working copy of https://github.com/adamtheturtle/SafeURLKit.git resolved at 0.2.0
Creating working copy for https://github.com/adamtheturtle/PaginatedRESTClient.git
Working copy of https://github.com/adamtheturtle/PaginatedRESTClient.git resolved at 0.5.0
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/CoderPadClient+BaseURL.swift:27:5: [1;33mwarning: [1;39m'public' modifier is redundant for static method declared in a public extension[0;0m
[0;36m25 |[0;0m
[0;36m26 |[0;0m /// Validates a response-body ceiling for callers that prefer an error over clamping (#206).
[0;36m27 |[0;0m public nonisolated static func validatedResponseBodyLimit(_ bytes: Int) throws -> Int {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier is redundant for static method declared in a public extension[0;0m
[0;36m28 |[0;0m try validateNonNegativeResponseBodyLimit(bytes)
[0;36m29 |[0;0m }
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenAPI.swift:315:5: [1;33mwarning: [1;39m'public' modifier conflicts with extension's default access of 'private'[0;0m
[0;36m313 |[0;0m
[0;36m314 |[0;0m private extension KeyedDecodingContainer {
[0;36m315 |[0;0m public nonisolated func decodeLenientScreenDictionary<Value: Decodable>(
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier conflicts with extension's default access of 'private'[0;0m
[0;36m316 |[0;0m of _: Value.Type,
[0;36m317 |[0;0m forKey key: Key
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenAPI+Dates.swift:36:5: [1;33mwarning: [1;39m'public' modifier is redundant for property declared in a public extension[0;0m
[0;36m34 |[0;0m
[0;36m35 |[0;0m public extension ScreenTestSession {
[0;36m36 |[0;0m public var sendDate: Date? {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier is redundant for property declared in a public extension[0;0m
[0;36m37 |[0;0m ScreenEpochMilliseconds.date(from: sendTime)
[0;36m38 |[0;0m }
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenAPI+Dates.swift:40:5: [1;33mwarning: [1;39m'public' modifier is redundant for property declared in a public extension[0;0m
[0;36m38 |[0;0m }
[0;36m39 |[0;0m
[0;36m40 |[0;0m public var startDate: Date? {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier is redundant for property declared in a public extension[0;0m
[0;36m41 |[0;0m ScreenEpochMilliseconds.date(from: startTime)
[0;36m42 |[0;0m }
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenAPI+Dates.swift:44:5: [1;33mwarning: [1;39m'public' modifier is redundant for property declared in a public extension[0;0m
[0;36m42 |[0;0m }
[0;36m43 |[0;0m
[0;36m44 |[0;0m public var endDate: Date? {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier is redundant for property declared in a public extension[0;0m
[0;36m45 |[0;0m ScreenEpochMilliseconds.date(from: endTime)
[0;36m46 |[0;0m }
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenAPI+Dates.swift:48:5: [1;33mwarning: [1;39m'public' modifier is redundant for property declared in a public extension[0;0m
[0;36m46 |[0;0m }
[0;36m47 |[0;0m
[0;36m48 |[0;0m public var lastActivityDate: Date? {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier is redundant for property declared in a public extension[0;0m
[0;36m49 |[0;0m ScreenEpochMilliseconds.date(from: lastActivityTime)
[0;36m50 |[0;0m }
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenAPI+Dates.swift:54:5: [1;33mwarning: [1;39m'public' modifier is redundant for property declared in a public extension[0;0m
[0;36m52 |[0;0m /// Recruiter dashboard URL when the API value is absolute HTTPS without
[0;36m53 |[0;0m /// credentials (#167).
[0;36m54 |[0;0m public var openableURL: URL? {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier is redundant for property declared in a public extension[0;0m
[0;36m55 |[0;0m OpenableHTTPSURL.parse(url)
[0;36m56 |[0;0m }
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenAPI+Dates.swift:60:5: [1;33mwarning: [1;39m'public' modifier is redundant for property declared in a public extension[0;0m
[0;36m58 |[0;0m /// Candidate test URL when the API value is absolute HTTPS without
[0;36m59 |[0;0m /// credentials (#167).
[0;36m60 |[0;0m public var openableTestURL: URL? {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier is redundant for property declared in a public extension[0;0m
[0;36m61 |[0;0m OpenableHTTPSURL.parse(testURL)
[0;36m62 |[0;0m }
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenAPI+Dates.swift:68:5: [1;33mwarning: [1;39m'public' modifier is redundant for property declared in a public extension[0;0m
[0;36m66 |[0;0m /// Candidate invitation URL when the API value is absolute HTTPS without
[0;36m67 |[0;0m /// credentials (#167).
[0;36m68 |[0;0m public var openableTestURL: URL? {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier is redundant for property declared in a public extension[0;0m
[0;36m69 |[0;0m OpenableHTTPSURL.parse(testURL)
[0;36m70 |[0;0m }
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenClient+BaseURL.swift:14:5: [1;33mwarning: [1;39m'public' modifier is redundant for static method declared in a public extension[0;0m
[0;36m12 |[0;0m /// mock host is intentionally excluded so a live session cannot send a real API key
[0;36m13 |[0;0m /// to `screen.mock.coderpad.io` (#202).
[0;36m14 |[0;0m public nonisolated static func isAllowedProductionBaseURL(_ url: URL) -> Bool {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier is redundant for static method declared in a public extension[0;0m
[0;36m15 |[0;0m isAllowedOrigin(url, hosts: [defaultBaseURL.host, euBaseURL.host])
[0;36m16 |[0;0m }
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenClient+BaseURL.swift:20:5: [1;33mwarning: [1;39m'public' modifier is redundant for static method declared in a public extension[0;0m
[0;36m18 |[0;0m /// Origins accepted for any Screen request, including the in-process mock transport.
[0;36m19 |[0;0m /// Prefer ``isAllowedProductionBaseURL(_:)`` when constructing a live client.
[0;36m20 |[0;0m public nonisolated static func isAllowedBaseURL(_ url: URL) -> Bool {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier is redundant for static method declared in a public extension[0;0m
[0;36m21 |[0;0m isAllowedProductionBaseURL(url)
[0;36m22 |[0;0m || isAllowedOrigin(url, hosts: [mockBaseURL.host])
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/CoderPadClient+BaseURL.swift:27:5: [1;33mwarning: [1;39m'public' modifier is redundant for static method declared in a public extension[0;0m
[0;36m25 |[0;0m
[0;36m26 |[0;0m /// Validates a response-body ceiling for callers that prefer an error over clamping (#206).
[0;36m27 |[0;0m public nonisolated static func validatedResponseBodyLimit(_ bytes: Int) throws -> Int {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier is redundant for static method declared in a public extension[0;0m
[0;36m28 |[0;0m try validateNonNegativeResponseBodyLimit(bytes)
[0;36m29 |[0;0m }
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenAPI+Dates.swift:36:5: [1;33mwarning: [1;39m'public' modifier is redundant for property declared in a public extension[0;0m
[0;36m34 |[0;0m
[0;36m35 |[0;0m public extension ScreenTestSession {
[0;36m36 |[0;0m public var sendDate: Date? {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier is redundant for property declared in a public extension[0;0m
[0;36m37 |[0;0m ScreenEpochMilliseconds.date(from: sendTime)
[0;36m38 |[0;0m }
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenAPI+Dates.swift:40:5: [1;33mwarning: [1;39m'public' modifier is redundant for property declared in a public extension[0;0m
[0;36m38 |[0;0m }
[0;36m39 |[0;0m
[0;36m40 |[0;0m public var startDate: Date? {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier is redundant for property declared in a public extension[0;0m
[0;36m41 |[0;0m ScreenEpochMilliseconds.date(from: startTime)
[0;36m42 |[0;0m }
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenAPI+Dates.swift:44:5: [1;33mwarning: [1;39m'public' modifier is redundant for property declared in a public extension[0;0m
[0;36m42 |[0;0m }
[0;36m43 |[0;0m
[0;36m44 |[0;0m public var endDate: Date? {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier is redundant for property declared in a public extension[0;0m
[0;36m45 |[0;0m ScreenEpochMilliseconds.date(from: endTime)
[0;36m46 |[0;0m }
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenAPI+Dates.swift:48:5: [1;33mwarning: [1;39m'public' modifier is redundant for property declared in a public extension[0;0m
[0;36m46 |[0;0m }
[0;36m47 |[0;0m
[0;36m48 |[0;0m public var lastActivityDate: Date? {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier is redundant for property declared in a public extension[0;0m
[0;36m49 |[0;0m ScreenEpochMilliseconds.date(from: lastActivityTime)
[0;36m50 |[0;0m }
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenAPI+Dates.swift:54:5: [1;33mwarning: [1;39m'public' modifier is redundant for property declared in a public extension[0;0m
[0;36m52 |[0;0m /// Recruiter dashboard URL when the API value is absolute HTTPS without
[0;36m53 |[0;0m /// credentials (#167).
[0;36m54 |[0;0m public var openableURL: URL? {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier is redundant for property declared in a public extension[0;0m
[0;36m55 |[0;0m OpenableHTTPSURL.parse(url)
[0;36m56 |[0;0m }
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenAPI+Dates.swift:60:5: [1;33mwarning: [1;39m'public' modifier is redundant for property declared in a public extension[0;0m
[0;36m58 |[0;0m /// Candidate test URL when the API value is absolute HTTPS without
[0;36m59 |[0;0m /// credentials (#167).
[0;36m60 |[0;0m public var openableTestURL: URL? {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier is redundant for property declared in a public extension[0;0m
[0;36m61 |[0;0m OpenableHTTPSURL.parse(testURL)
[0;36m62 |[0;0m }
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenAPI+Dates.swift:68:5: [1;33mwarning: [1;39m'public' modifier is redundant for property declared in a public extension[0;0m
[0;36m66 |[0;0m /// Candidate invitation URL when the API value is absolute HTTPS without
[0;36m67 |[0;0m /// credentials (#167).
[0;36m68 |[0;0m public var openableTestURL: URL? {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier is redundant for property declared in a public extension[0;0m
[0;36m69 |[0;0m OpenableHTTPSURL.parse(testURL)
[0;36m70 |[0;0m }
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenAPI.swift:315:5: [1;33mwarning: [1;39m'public' modifier conflicts with extension's default access of 'private'[0;0m
[0;36m313 |[0;0m
[0;36m314 |[0;0m private extension KeyedDecodingContainer {
[0;36m315 |[0;0m public nonisolated func decodeLenientScreenDictionary<Value: Decodable>(
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier conflicts with extension's default access of 'private'[0;0m
[0;36m316 |[0;0m of _: Value.Type,
[0;36m317 |[0;0m forKey key: Key
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenClient+BaseURL.swift:14:5: [1;33mwarning: [1;39m'public' modifier is redundant for static method declared in a public extension[0;0m
[0;36m12 |[0;0m /// mock host is intentionally excluded so a live session cannot send a real API key
[0;36m13 |[0;0m /// to `screen.mock.coderpad.io` (#202).
[0;36m14 |[0;0m public nonisolated static func isAllowedProductionBaseURL(_ url: URL) -> Bool {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier is redundant for static method declared in a public extension[0;0m
[0;36m15 |[0;0m isAllowedOrigin(url, hosts: [defaultBaseURL.host, euBaseURL.host])
[0;36m16 |[0;0m }
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenClient+BaseURL.swift:20:5: [1;33mwarning: [1;39m'public' modifier is redundant for static method declared in a public extension[0;0m
[0;36m18 |[0;0m /// Origins accepted for any Screen request, including the in-process mock transport.
[0;36m19 |[0;0m /// Prefer ``isAllowedProductionBaseURL(_:)`` when constructing a live client.
[0;36m20 |[0;0m public nonisolated static func isAllowedBaseURL(_ url: URL) -> Bool {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier is redundant for static method declared in a public extension[0;0m
[0;36m21 |[0;0m isAllowedProductionBaseURL(url)
[0;36m22 |[0;0m || isAllowedOrigin(url, hosts: [mockBaseURL.host])
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenClient+Webhook.swift:25:5: [1;33mwarning: [1;39m'public' modifier is redundant for instance method declared in a public extension[0;0m
[0;36m23 |[0;0m /// as successful "no URL" outcomes; those map to `nil` rather than an HTTP or decode
[0;36m24 |[0;0m /// error so the optional return type matches the endpoint contract (#213, #214).
[0;36m25 |[0;0m public nonisolated func webhookURL() async throws -> String? {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier is redundant for instance method declared in a public extension[0;0m
[0;36m26 |[0;0m let request = try authorizedRequest(path: "/webhook", method: "GET")
[0;36m27 |[0;0m let data: Data
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenClient+Webhook.swift:50:5: [1;33mwarning: [1;39m'public' modifier is redundant for instance method declared in a public extension[0;0m
[0;36m48 |[0;0m /// Sets (replacing any existing) the webhook callback URL. `POST /webhook`.
[0;36m49 |[0;0m /// The request body is the URL as a bare JSON string, per the API contract.
[0;36m50 |[0;0m public nonisolated func setWebhookURL(_ url: String) async throws {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier is redundant for instance method declared in a public extension[0;0m
[0;36m51 |[0;0m guard let url = Self.normalizedWebhookURL(url) else {
[0;36m52 |[0;0m throw CoderPadError.decode("Screen webhook callback must be a public HTTPS URL.")
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenClient+Webhook.swift:59:5: [1;33mwarning: [1;39m'public' modifier is redundant for instance method declared in a public extension[0;0m
[0;36m57 |[0;0m
[0;36m58 |[0;0m /// Removes the configured webhook. `DELETE /webhook`.
[0;36m59 |[0;0m public nonisolated func deleteWebhook() async throws {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier is redundant for instance method declared in a public extension[0;0m
[0;36m60 |[0;0m try await sendNoContent(method: "DELETE", path: "/webhook")
[0;36m61 |[0;0m }
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenClient+Webhook.swift:65:5: [1;33mwarning: [1;39m'public' modifier is redundant for static method declared in a public extension[0;0m
[0;36m63 |[0;0m private nonisolated struct WebhookConfig: Decodable { let url: String? }
[0;36m64 |[0;0m
[0;36m65 |[0;0m public nonisolated static func normalizedWebhookURL(_ raw: String) -> String? {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier is redundant for static method declared in a public extension[0;0m
[0;36m66 |[0;0m let trimmed = raw.trimmingCharacters(in: .whitespacesAndNewlines)
[0;36m67 |[0;0m return webhookPolicy.allows(trimmed) ? trimmed : nil
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenClient+Webhook.swift:70:5: [1;33mwarning: [1;39m'public' modifier is redundant for static method declared in a public extension[0;0m
[0;36m68 |[0;0m }
[0;36m69 |[0;0m
[0;36m70 |[0;0m public nonisolated static func validatedWebhookURL(_ raw: String?) throws -> String? {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier is redundant for static method declared in a public extension[0;0m
[0;36m71 |[0;0m guard let raw else { return nil }
[0;36m72 |[0;0m guard let normalized = normalizedWebhookURL(raw) else {
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenClient.swift:324:5: [1;33mwarning: [1;39m'public' modifier conflicts with extension's default access of 'private'[0;0m
[0;36m322 |[0;0m
[0;36m323 |[0;0m private extension ScreenClient {
[0;36m324 |[0;0m public nonisolated static func validateTimeRange(from: Int?, until: Int?) throws {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier conflicts with extension's default access of 'private'[0;0m
[0;36m325 |[0;0m if let from {
[0;36m326 |[0;0m guard (ScreenEpochMilliseconds.earliest ... ScreenEpochMilliseconds.latest).contains(from) else {
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenClient.swift:344:5: [1;33mwarning: [1;39m'public' modifier conflicts with extension's default access of 'private'[0;0m
[0;36m342 |[0;0m }
[0;36m343 |[0;0m
[0;36m344 |[0;0m public nonisolated static func requirePositiveID(_ id: Int, kind: String) throws {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier conflicts with extension's default access of 'private'[0;0m
[0;36m345 |[0;0m guard (1 ... maximumScreenID).contains(id) else {
[0;36m346 |[0;0m throw CoderPadError.decode("Screen \(kind) ID must be a positive int32.")
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenClient.swift:350:5: [1;33mwarning: [1;39m'public' modifier conflicts with extension's default access of 'private'[0;0m
[0;36m348 |[0;0m }
[0;36m349 |[0;0m
[0;36m350 |[0;0m public nonisolated static func requirePaginationStart(_ start: Int) throws {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier conflicts with extension's default access of 'private'[0;0m
[0;36m351 |[0;0m guard start >= 0 else {
[0;36m352 |[0;0m throw CoderPadError.decode("Screen pagination start must not be negative.")
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenClient.swift:360:5: [1;33mwarning: [1;39m'public' modifier conflicts with extension's default access of 'private'[0;0m
[0;36m358 |[0;0m }
[0;36m359 |[0;0m
[0;36m360 |[0;0m public nonisolated static func normalizedFilter(
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier conflicts with extension's default access of 'private'[0;0m
[0;36m361 |[0;0m _ raw: String?,
[0;36m362 |[0;0m name: String,
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenClient.swift:380:5: [1;33mwarning: [1;39m'public' modifier conflicts with extension's default access of 'private'[0;0m
[0;36m378 |[0;0m }
[0;36m379 |[0;0m
[0;36m380 |[0;0m public nonisolated static func normalizedListFilters(product: String?, candidateEmail: String?) throws
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier conflicts with extension's default access of 'private'[0;0m
[0;36m381 |[0;0m -> (product: String?, candidateEmail: String?) {
[0;36m382 |[0;0m let product = try normalizedProductFilter(product)
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenClient.swift:394:5: [1;33mwarning: [1;39m'public' modifier conflicts with extension's default access of 'private'[0;0m
[0;36m392 |[0;0m /// Trims and lowercases a product filter, then requires one of the documented
[0;36m393 |[0;0m /// wire values (`screen`, `map`). `nil` means "no product filter" (#104).
[0;36m394 |[0;0m public nonisolated static func normalizedProductFilter(_ raw: String?) throws -> String? {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier conflicts with extension's default access of 'private'[0;0m
[0;36m395 |[0;0m guard let product = try normalizedFilter(
[0;36m396 |[0;0m raw, name: "product", maximumLength: maximumProductFilterLength
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenClient.swift:412:5: [1;33mwarning: [1;39m'public' modifier conflicts with extension's default access of 'private'[0;0m
[0;36m410 |[0;0m /// Normalizes invitation emails, enforces the candidate-name length limit, and
[0;36m411 |[0;0m /// rejects contradictory delivery options before transport (#105, #108, #197).
[0;36m412 |[0;0m public nonisolated static func validatedInvitation(_ invitation: ScreenInvitation) throws -> ScreenInvitation {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier conflicts with extension's default access of 'private'[0;0m
[0;36m413 |[0;0m var invitation = invitation
[0;36m414 |[0;0m invitation.candidateEmail = try validatedInvitationEmail(
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenClient+Webhook.swift:25:5: [1;33mwarning: [1;39m'public' modifier is redundant for instance method declared in a public extension[0;0m
[0;36m23 |[0;0m /// as successful "no URL" outcomes; those map to `nil` rather than an HTTP or decode
[0;36m24 |[0;0m /// error so the optional return type matches the endpoint contract (#213, #214).
[0;36m25 |[0;0m public nonisolated func webhookURL() async throws -> String? {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier is redundant for instance method declared in a public extension[0;0m
[0;36m26 |[0;0m let request = try authorizedRequest(path: "/webhook", method: "GET")
[0;36m27 |[0;0m let data: Data
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenClient+Webhook.swift:50:5: [1;33mwarning: [1;39m'public' modifier is redundant for instance method declared in a public extension[0;0m
[0;36m48 |[0;0m /// Sets (replacing any existing) the webhook callback URL. `POST /webhook`.
[0;36m49 |[0;0m /// The request body is the URL as a bare JSON string, per the API contract.
[0;36m50 |[0;0m public nonisolated func setWebhookURL(_ url: String) async throws {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier is redundant for instance method declared in a public extension[0;0m
[0;36m51 |[0;0m guard let url = Self.normalizedWebhookURL(url) else {
[0;36m52 |[0;0m throw CoderPadError.decode("Screen webhook callback must be a public HTTPS URL.")
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenClient+Webhook.swift:59:5: [1;33mwarning: [1;39m'public' modifier is redundant for instance method declared in a public extension[0;0m
[0;36m57 |[0;0m
[0;36m58 |[0;0m /// Removes the configured webhook. `DELETE /webhook`.
[0;36m59 |[0;0m public nonisolated func deleteWebhook() async throws {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier is redundant for instance method declared in a public extension[0;0m
[0;36m60 |[0;0m try await sendNoContent(method: "DELETE", path: "/webhook")
[0;36m61 |[0;0m }
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenClient+Webhook.swift:65:5: [1;33mwarning: [1;39m'public' modifier is redundant for static method declared in a public extension[0;0m
[0;36m63 |[0;0m private nonisolated struct WebhookConfig: Decodable { let url: String? }
[0;36m64 |[0;0m
[0;36m65 |[0;0m public nonisolated static func normalizedWebhookURL(_ raw: String) -> String? {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier is redundant for static method declared in a public extension[0;0m
[0;36m66 |[0;0m let trimmed = raw.trimmingCharacters(in: .whitespacesAndNewlines)
[0;36m67 |[0;0m return webhookPolicy.allows(trimmed) ? trimmed : nil
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenClient+Webhook.swift:70:5: [1;33mwarning: [1;39m'public' modifier is redundant for static method declared in a public extension[0;0m
[0;36m68 |[0;0m }
[0;36m69 |[0;0m
[0;36m70 |[0;0m public nonisolated static func validatedWebhookURL(_ raw: String?) throws -> String? {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier is redundant for static method declared in a public extension[0;0m
[0;36m71 |[0;0m guard let raw else { return nil }
[0;36m72 |[0;0m guard let normalized = normalizedWebhookURL(raw) else {
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenClient.swift:324:5: [1;33mwarning: [1;39m'public' modifier conflicts with extension's default access of 'private'[0;0m
[0;36m322 |[0;0m
[0;36m323 |[0;0m private extension ScreenClient {
[0;36m324 |[0;0m public nonisolated static func validateTimeRange(from: Int?, until: Int?) throws {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier conflicts with extension's default access of 'private'[0;0m
[0;36m325 |[0;0m if let from {
[0;36m326 |[0;0m guard (ScreenEpochMilliseconds.earliest ... ScreenEpochMilliseconds.latest).contains(from) else {
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenClient.swift:344:5: [1;33mwarning: [1;39m'public' modifier conflicts with extension's default access of 'private'[0;0m
[0;36m342 |[0;0m }
[0;36m343 |[0;0m
[0;36m344 |[0;0m public nonisolated static func requirePositiveID(_ id: Int, kind: String) throws {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier conflicts with extension's default access of 'private'[0;0m
[0;36m345 |[0;0m guard (1 ... maximumScreenID).contains(id) else {
[0;36m346 |[0;0m throw CoderPadError.decode("Screen \(kind) ID must be a positive int32.")
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenClient.swift:350:5: [1;33mwarning: [1;39m'public' modifier conflicts with extension's default access of 'private'[0;0m
[0;36m348 |[0;0m }
[0;36m349 |[0;0m
[0;36m350 |[0;0m public nonisolated static func requirePaginationStart(_ start: Int) throws {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier conflicts with extension's default access of 'private'[0;0m
[0;36m351 |[0;0m guard start >= 0 else {
[0;36m352 |[0;0m throw CoderPadError.decode("Screen pagination start must not be negative.")
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenClient.swift:360:5: [1;33mwarning: [1;39m'public' modifier conflicts with extension's default access of 'private'[0;0m
[0;36m358 |[0;0m }
[0;36m359 |[0;0m
[0;36m360 |[0;0m public nonisolated static func normalizedFilter(
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier conflicts with extension's default access of 'private'[0;0m
[0;36m361 |[0;0m _ raw: String?,
[0;36m362 |[0;0m name: String,
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenClient.swift:380:5: [1;33mwarning: [1;39m'public' modifier conflicts with extension's default access of 'private'[0;0m
[0;36m378 |[0;0m }
[0;36m379 |[0;0m
[0;36m380 |[0;0m public nonisolated static func normalizedListFilters(product: String?, candidateEmail: String?) throws
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier conflicts with extension's default access of 'private'[0;0m
[0;36m381 |[0;0m -> (product: String?, candidateEmail: String?) {
[0;36m382 |[0;0m let product = try normalizedProductFilter(product)
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenClient.swift:394:5: [1;33mwarning: [1;39m'public' modifier conflicts with extension's default access of 'private'[0;0m
[0;36m392 |[0;0m /// Trims and lowercases a product filter, then requires one of the documented
[0;36m393 |[0;0m /// wire values (`screen`, `map`). `nil` means "no product filter" (#104).
[0;36m394 |[0;0m public nonisolated static func normalizedProductFilter(_ raw: String?) throws -> String? {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier conflicts with extension's default access of 'private'[0;0m
[0;36m395 |[0;0m guard let product = try normalizedFilter(
[0;36m396 |[0;0m raw, name: "product", maximumLength: maximumProductFilterLength
/Users/admin/builder/spi-builder-workspace/Sources/CoderPadKit/ScreenClient.swift:412:5: [1;33mwarning: [1;39m'public' modifier conflicts with extension's default access of 'private'[0;0m
[0;36m410 |[0;0m /// Normalizes invitation emails, enforces the candidate-name length limit, and
[0;36m411 |[0;0m /// rejects contradictory delivery options before transport (#105, #108, #197).
[0;36m412 |[0;0m public nonisolated static func validatedInvitation(_ invitation: ScreenInvitation) throws -> ScreenInvitation {
[0;36m|[0;0m `- [1;33mwarning: [1;39m'public' modifier conflicts with extension's default access of 'private'[0;0m
[0;36m413 |[0;0m var invitation = invitation
[0;36m414 |[0;0m invitation.candidateEmail = try validatedInvitationEmail(
Build complete.
{
"dependencies" : [
{
"identity" : "paginatedrestclient",
"requirement" : {
"range" : [
{
"lower_bound" : "0.5.0",
"upper_bound" : "1.0.0"
}
]
},
"type" : "sourceControl",
"url" : "https://github.com/adamtheturtle/PaginatedRESTClient.git"
},
{
"identity" : "safeurlkit",
"requirement" : {
"range" : [
{
"lower_bound" : "0.2.0",
"upper_bound" : "1.0.0"
}
]
},
"type" : "sourceControl",
"url" : "https://github.com/adamtheturtle/SafeURLKit.git"
}
],
"manifest_display_name" : "CoderPadKit",
"name" : "CoderPadKit",
"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" : "CoderPadKit",
"targets" : [
"CoderPadKit"
],
"type" : {
"library" : [
"automatic"
]
}
},
{
"name" : "CoderPadKitMock",
"targets" : [
"CoderPadKitMock"
],
"type" : {
"library" : [
"automatic"
]
}
}
],
"targets" : [
{
"c99name" : "CoderPadKitTests",
"module_type" : "SwiftTarget",
"name" : "CoderPadKitTests",
"path" : "Tests/CoderPadKitTests",
"sources" : [
"AccountIntrospectionTests.swift",
"ClientHardeningTests.swift",
"DecodeToleranceTests.swift",
"DeleteQuestionTests.swift",
"InstructionStepNameTests.swift",
"InterviewBaseURLValidationTests.swift",
"InterviewPositiveIDValidationTests.swift",
"MockFidelityBatch186199Tests.swift",
"MockFidelityTests.swift",
"MockInterviewFidelityTests.swift",
"MockMultipartValidationTests.swift",
"MockRouteValidationTests.swift",
"MockScreenFidelityTests.swift",
"MockScreenMalformedJSONTests.swift",
"MockServerTests.swift",
"ModelTests.swift",
"ModelValidationDecodeTests.swift",
"ModelsMutationsValidationTests.swift",
"MultipartFormDataStagingTests.swift",
"MutationRefreshTests.swift",
"OpenableHTTPSURLTests.swift",
"OrganizationStatsRangeTests.swift",
"OrganizationUserEmailFilterTests.swift",
"PadAnalyticsTests.swift",
"PadControlTests.swift",
"PadEnvironmentDecodeTests.swift",
"PadEventIdentityTests.swift",
"PadEventsSortTests.swift",
"PadHistoryTests.swift",
"PadHistoryURLPolicyTests.swift",
"PadIDValidationTests.swift",
"PadMutationValidationTests.swift",
"PaginationIdentityTests.swift",
"QuestionArrayWireTests.swift",
"QuestionFilterTests.swift",
"QuestionInstructionSchemaDecodeTests.swift",
"QuestionProjectMetadataTests.swift",
"QuestionSharingDatabaseTests.swift",
"QuestionVariantNullableTests.swift",
"QuestionVariantTests.swift",
"QuestionZIPUploadArchiveStructureTests.swift",
"QuestionZIPUploadTests.swift",
"RawAPITests.swift",
"RawHTTPMethodValidationTests.swift",
"ResponseLimitConfigurationTests.swift",
"ScreenAIConversationTests.swift",
"ScreenBoundedDownloadTests.swift",
"ScreenCampaignCreationTests.swift",
"ScreenCampaignCreationTransportTests.swift",
"ScreenDetailedResultsTests.swift",
"ScreenDetailedResultsTransportTests.swift",
"ScreenDuplicateInvitationTests.swift",
"ScreenErrorBodyDecodingTests.swift",
"ScreenProjectArchiveTests.swift",
"ScreenQuestionBankTests.swift",
"ScreenQuestionBankTransportTests.swift",
"ScreenQuestionCodePayloadTests.swift",
"ScreenQuestionInsightsTests.swift",
"ScreenRedirectTests.swift",
"ScreenReportDownloadErrorTests.swift",
"ScreenReportFilesTests.swift",
"ScreenReportOperationLimiterTests.swift",
"ScreenResponseLimitTests.swift",
"ScreenTemporaryFileTests.swift",
"ScreenWarningSanitizationTests.swift",
"coderpadTests+Screen+Mock.swift",
"coderpadTests+Screen+UnstablePaginationMock.swift",
"coderpadTests+Screen.swift",
"coderpadTests+ScreenDates.swift",
"coderpadTests+ScreenInvitationValidation.swift",
"coderpadTests+ScreenMetrics.swift",
"coderpadTests+ScreenPaginationValidation.swift",
"coderpadTests+ScreenProductFilter.swift",
"coderpadTests+ScreenRequestBounds.swift",
"coderpadTests+ScreenSessionValidation.swift",
"coderpadTests+ScreenTolerantDecode.swift",
"coderpadTests+ScreenWebhook.swift"
],
"target_dependencies" : [
"CoderPadKit",
"CoderPadKitMock"
],
"type" : "test"
},
{
"c99name" : "CoderPadKitMock",
"module_type" : "SwiftTarget",
"name" : "CoderPadKitMock",
"path" : "Sources/CoderPadKitMock",
"product_memberships" : [
"CoderPadKitMock"
],
"sources" : [
"CoderPadClient+Mock.swift",
"MockRequestBody.swift",
"MockScreen+AIConversations.swift",
"MockScreen+CampaignCreation.swift",
"MockScreen+DetailedResults.swift",
"MockScreen+Fixtures.swift",
"MockScreen+ProjectArchive.swift",
"MockScreen+QuestionBank.swift",
"MockScreen+QuestionBankFixtures.swift",
"MockScreen+QuestionBankPagination.swift",
"MockScreen+QuestionInsights.swift",
"MockScreen+ReportPDF.swift",
"MockScreen+Responses.swift",
"MockScreen+State.swift",
"MockScreen+TemporaryFiles.swift",
"MockScreen+TestRoutes.swift",
"MockScreen.swift",
"MockServer+Environments.swift",
"MockServer+Fixtures.swift",
"MockServer+History.swift",
"MockServer+List.swift",
"MockServer+Multipart.swift",
"MockServer+Organization.swift",
"MockServer+OrganizationResponses.swift",
"MockServer+PadAnalytics.swift",
"MockServer+ParentQuestionFiles.swift",
"MockServer+QuestionFilters.swift",
"MockServer+QuestionResponses.swift",
"MockServer+QuestionVariants.swift",
"MockServer+Questions.swift",
"MockServer+RealisticHistory.swift",
"MockServer+Responses.swift",
"MockServer+State.swift",
"MockServer.swift"
],
"target_dependencies" : [
"CoderPadKit"
],
"type" : "library"
},
{
"c99name" : "CoderPadKit",
"module_type" : "SwiftTarget",
"name" : "CoderPadKit",
"path" : "Sources/CoderPadKit",
"product_dependencies" : [
"PaginatedRESTClient",
"SafeURLKit"
],
"product_memberships" : [
"CoderPadKit",
"CoderPadKitMock"
],
"sources" : [
"APIKeyNormalization.swift",
"AccountIntrospection.swift",
"CoderPadClient+BaseURL.swift",
"CoderPadClient+Identity.swift",
"CoderPadClient+Multipart.swift",
"CoderPadClient+Organization.swift",
"CoderPadClient+PadHistory.swift",
"CoderPadClient+QuestionVariants.swift",
"CoderPadClient.swift",
"CoderPadError.swift",
"CoderPadMutationRefreshError.swift",
"CoderPadRetryPolicy.swift",
"EmailValidation.swift",
"InterviewLanguage.swift",
"LifecycleConsistency.swift",
"Logging.swift",
"MultipartFormData.swift",
"OpenableHTTPSURL.swift",
"OptimisticEdit.swift",
"Organization.swift",
"Pad.swift",
"PadAnalytics.swift",
"PadEnvironment.swift",
"PadHistoryURLPolicy.swift",
"Question.swift",
"QuestionArrayEncoding.swift",
"QuestionFilters.swift",
"QuestionProjectMetadata.swift",
"QuestionVariant.swift",
"QuestionZIPUpload.swift",
"RawAPI.swift",
"RequestValidation.swift",
"Requests.swift",
"ScreenAIConversation.swift",
"ScreenAPI+Dates.swift",
"ScreenAPI+Identity.swift",
"ScreenAPI+Invitation.swift",
"ScreenAPI+Metrics.swift",
"ScreenAPI+Pagination.swift",
"ScreenAPI+ReportBounds.swift",
"ScreenAPI.swift",
"ScreenCampaignCreation.swift",
"ScreenCampaignSettings.swift",
"ScreenClient+BaseURL.swift",
"ScreenClient+Pagination.swift",
"ScreenClient+ProjectArchive.swift",
"ScreenClient+QuestionBank.swift",
"ScreenClient+QuestionInsights.swift",
"ScreenClient+ReportDownload.swift",
"ScreenClient+ResponseData.swift",
"ScreenClient+TemporaryFiles.swift",
"ScreenClient+Webhook.swift",
"ScreenClient.swift",
"ScreenDetailedQuestion.swift",
"ScreenDictionaryKey.swift",
"ScreenQuestionContentInputs.swift",
"ScreenQuestionEvaluationInputs.swift",
"ScreenQuestionFilters+Query.swift",
"ScreenQuestionInsights.swift",
"ScreenQuestionPagination.swift",
"ScreenQuestionResponses.swift",
"ScreenRedirectDelegate.swift",
"ScreenReportFiles.swift",
"ScreenReportOperationLimiter.swift",
"ScreenSessionQuestion.swift",
"TolerantJSON.swift"
],
"type" : "library"
}
],
"tools_version" : "6.2"
}
Done.