Build Information
Successful build of TrainingPlanKit, reference main (892de8), with Swift 6.3 for macOS (SPM) on 21 Jul 2026 04:13:20 UTC.
Swift 6 data race errors: 0
Build Command
env DEVELOPER_DIR=/Applications/Xcode-26.4.0.app xcrun swift build --arch arm64Build Log
========================================
RunAll
========================================
Builder version: undefined version: run 'make version' to update
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/swarog46/training_plan_kit.git
Reference: main
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/swarog46/training_plan_kit
* branch main -> FETCH_HEAD
* [new branch] main -> origin/main
HEAD is now at 892de8a CI: skip catalog-bound checks on sample + track the known peak-LR gap (green on real regressions)
Cloned https://github.com/swarog46/training_plan_kit.git
Revision (git rev-parse @):
892de8a0c87a5f235f846adfeac8afb46bcb8df2
SPI manifest file found: $PWD/.spi.yml
SUCCESS checkout https://github.com/swarog46/training_plan_kit.git at main
========================================
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": "training_plan_kit",
"name": "TrainingPlanKit",
"url": "https://github.com/swarog46/training_plan_kit.git",
"version": "unspecified",
"path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies/.build/checkouts/training_plan_kit",
"traits": [
"default"
],
"dependencies": [
]
}
]
}
Fetching https://github.com/swarog46/training_plan_kit.git
[1/1180] Fetching training_plan_kit
Fetched https://github.com/swarog46/training_plan_kit.git from cache (1.04s)
Creating working copy for https://github.com/swarog46/training_plan_kit.git
Working copy of https://github.com/swarog46/training_plan_kit.git resolved at main (892de8a)
warning: '.resolve-product-dependencies': dependency 'training_plan_kit' is not used by any target
Found 0 product dependencies
========================================
Build
========================================
Selected platform: macosSpm
Swift version: 6.3
Building package at path: $PWD
https://github.com/swarog46/training_plan_kit.git
Running build ...
env DEVELOPER_DIR=/Applications/Xcode-26.4.0.app xcrun swift build --arch arm64
Building for debugging...
[0/3] Copying sample_catalog.json
[0/3] Write sources
[2/3] Write swift-version--6988338F2F200930.txt
[4/31] Compiling TrainingPlanKit IntermediatePlanGenerator.swift
[5/31] Compiling TrainingPlanKit MaintenancePlanGenerator.swift
[6/31] Compiling TrainingPlanKit PlanConfiguration+Accessible.swift
[7/31] Emitting module TrainingPlanKit
[8/31] Compiling TrainingPlanKit C25KPlanGenerator.swift
/Users/admin/builder/spi-builder-workspace/Sources/TrainingPlanKit/Engine/CompetitivePlanGenerator.swift:663:69: warning: will never be executed
661 | } else {
662 | easyTargetLoad = targetLoad * ((isLongRace && isFirstFill) ? mlrLoadMult
663 | : isSecondMLR ? 0.29 : fillLoadMult)
| | `- warning: will never be executed
| `- note: condition always evaluates to false
664 | }
665 | // Hard-cap easy duration when tapering so the selector can't pick a
[9/31] Compiling TrainingPlanKit CompetitivePlanGenerator.swift
/Users/admin/builder/spi-builder-workspace/Sources/TrainingPlanKit/Engine/CompetitivePlanGenerator.swift:663:69: warning: will never be executed
661 | } else {
662 | easyTargetLoad = targetLoad * ((isLongRace && isFirstFill) ? mlrLoadMult
663 | : isSecondMLR ? 0.29 : fillLoadMult)
| | `- warning: will never be executed
| `- note: condition always evaluates to false
664 | }
665 | // Hard-cap easy duration when tapering so the selector can't pick a
[10/31] Compiling TrainingPlanKit DistanceClass.swift
/Users/admin/builder/spi-builder-workspace/Sources/TrainingPlanKit/Engine/CompetitivePlanGenerator.swift:663:69: warning: will never be executed
661 | } else {
662 | easyTargetLoad = targetLoad * ((isLongRace && isFirstFill) ? mlrLoadMult
663 | : isSecondMLR ? 0.29 : fillLoadMult)
| | `- warning: will never be executed
| `- note: condition always evaluates to false
664 | }
665 | // Hard-cap easy duration when tapering so the selector can't pick a
[11/31] Compiling TrainingPlanKit PlanGeneratorV3.swift
[12/31] Compiling TrainingPlanKit PlanProfile.swift
[13/31] Compiling TrainingPlanKit RaceWorkoutFactory.swift
[14/34] Compiling TrainingPlanKit PlanConfiguration+VO2.swift
[15/34] Compiling TrainingPlanKit PlanConfiguration.swift
[16/34] Compiling TrainingPlanKit PlanDistribution.swift
[17/34] Compiling TrainingPlanKit PlanConfiguration+CouchTo5K.swift
[18/34] Compiling TrainingPlanKit PlanConfiguration+Intermediate.swift
[19/34] Compiling TrainingPlanKit PlanConfiguration+Maintenance.swift
[20/34] Compiling TrainingPlanKit PlanConfiguration+Advanced.swift
[21/34] Compiling TrainingPlanKit PlanConfiguration+Beginner.swift
[22/34] Compiling TrainingPlanKit PlanConfiguration+Competitive.swift
[23/34] Compiling TrainingPlanKit API.swift
[24/34] Compiling TrainingPlanKit AdvancedPlanGenerator.swift
[25/34] Compiling TrainingPlanKit BeginnerPlanGenerator.swift
[26/34] Compiling TrainingPlanKit Plan.swift
[27/34] Compiling TrainingPlanKit Workout.swift
[28/34] Compiling TrainingPlanKit WorkoutEvent.swift
[29/34] Compiling TrainingPlanKit WorkoutTypes.swift
[30/34] Compiling TrainingPlanKit CompetitiveGate.swift
[31/34] Compiling TrainingPlanKit PaceZoneConverter.swift
[32/34] Compiling TrainingPlanKit PlanRecalculator.swift
[33/34] Compiling TrainingPlanKit VDOT.swift
[34/34] Compiling TrainingPlanKit resource_bundle_accessor.swift
Build complete! (6.43s)
Build complete.
{
"dependencies" : [
],
"manifest_display_name" : "TrainingPlanKit",
"name" : "TrainingPlanKit",
"path" : "/Users/admin/builder/spi-builder-workspace",
"platforms" : [
{
"name" : "macos",
"version" : "13.0"
},
{
"name" : "ios",
"version" : "16.0"
}
],
"products" : [
{
"name" : "TrainingPlanKit",
"targets" : [
"TrainingPlanKit"
],
"type" : {
"library" : [
"automatic"
]
}
}
],
"targets" : [
{
"c99name" : "TrainingPlanKitTests",
"module_type" : "SwiftTarget",
"name" : "TrainingPlanKitTests",
"path" : "Tests/TrainingPlanKitTests",
"sources" : [
"PaceRenderInvariantTests.swift",
"PaceZoneConverterTests.swift",
"PlanRecalculatorTests.swift",
"TrainingPlanKitTests.swift",
"VDOTTests.swift"
],
"target_dependencies" : [
"TrainingPlanKit"
],
"type" : "test"
},
{
"c99name" : "TrainingPlanKit",
"module_type" : "SwiftTarget",
"name" : "TrainingPlanKit",
"path" : "Sources/TrainingPlanKit",
"product_memberships" : [
"TrainingPlanKit"
],
"resources" : [
{
"path" : "/Users/admin/builder/spi-builder-workspace/Sources/TrainingPlanKit/Catalog/sample_catalog.json",
"rule" : {
"copy" : {
}
}
}
],
"sources" : [
"API.swift",
"Engine/AdvancedPlanGenerator.swift",
"Engine/BeginnerPlanGenerator.swift",
"Engine/C25KPlanGenerator.swift",
"Engine/CompetitivePlanGenerator.swift",
"Engine/DistanceClass.swift",
"Engine/IntermediatePlanGenerator.swift",
"Engine/MaintenancePlanGenerator.swift",
"Engine/PlanConfiguration+Accessible.swift",
"Engine/PlanConfiguration+Advanced.swift",
"Engine/PlanConfiguration+Beginner.swift",
"Engine/PlanConfiguration+Competitive.swift",
"Engine/PlanConfiguration+CouchTo5K.swift",
"Engine/PlanConfiguration+Intermediate.swift",
"Engine/PlanConfiguration+Maintenance.swift",
"Engine/PlanConfiguration+VO2.swift",
"Engine/PlanConfiguration.swift",
"Engine/PlanDistribution.swift",
"Engine/PlanGeneratorV3.swift",
"Engine/PlanProfile.swift",
"Engine/RaceWorkoutFactory.swift",
"Models/Plan.swift",
"Models/Workout.swift",
"Models/WorkoutEvent.swift",
"Models/WorkoutTypes.swift",
"Pacing/CompetitiveGate.swift",
"Pacing/PaceZoneConverter.swift",
"Pacing/PlanRecalculator.swift",
"Pacing/VDOT.swift"
],
"type" : "library"
}
],
"tools_version" : "5.9"
}
✅ Doc result (pending) reported
========================================
GenerateDocs
========================================
Generating docs at path: $PWD/.docs/swarog46/training_plan_kit/main
Repository: swarog46/training_plan_kit
Swift version used: 6.3
Target: TrainingPlanKit
Extracting symbol information for 'TrainingPlanKit'...
Finished extracting symbol information for 'TrainingPlanKit'. (27.28s)
Building documentation for 'TrainingPlanKit'...
warning: Parameter 'vdotAnchored' is missing documentation
--> Sources/TrainingPlanKit/Pacing/PaceZoneConverter.swift:160:62-160:62
158 | /// - conversationalPace: Current easy pace in seconds/km (nil = no adjustment)
159 | /// - progressionFactor: Position in plan (0.0 = start, 1.0 = end)
160 + /// - config: Progression config for the runner's level
| ╰─suggestion: Document 'vdotAnchored' parameter
161 | /// - Returns: Adjusted multiplier
162 | public static func progressiveMultiplier(
warning: Parameter 'speedPace' is missing documentation
--> Sources/TrainingPlanKit/Pacing/PaceZoneConverter.swift:897:47-897:47
895 | /// - config: Progression config for the runner's level
| ╰─suggestion: Document 'speedPace' parameter
896 | /// - startDate: Plan start date
897 + /// - endDate: Plan end date (race date)
898 | /// - Returns: Events with pace-based workouts, progressively adjusted
899 | public static func applyPaceProgression(
warning: Parameter 'isAdvanced' is missing documentation
--> Sources/TrainingPlanKit/Pacing/PaceZoneConverter.swift:897:47-897:47
895 | /// - config: Progression config for the runner's level
896 | /// - startDate: Plan start date
897 + /// - endDate: Plan end date (race date)
| ╰─suggestion: Document 'isAdvanced' parameter
898 | /// - Returns: Events with pace-based workouts, progressively adjusted
899 | public static func applyPaceProgression(
warning: Parameter 'conversationalPaceEnd' is missing documentation
--> Sources/TrainingPlanKit/Pacing/PaceZoneConverter.swift:897:47-897:47
895 | /// - config: Progression config for the runner's level
896 | /// - startDate: Plan start date
897 + /// - endDate: Plan end date (race date)
| ╰─suggestion: Document 'conversationalPaceEnd' parameter
898 | /// - Returns: Events with pace-based workouts, progressively adjusted
899 | public static func applyPaceProgression(
warning: Parameter 'isCompetitive' is missing documentation
--> Sources/TrainingPlanKit/Pacing/PaceZoneConverter.swift:897:47-897:47
895 | /// - config: Progression config for the runner's level
896 | /// - startDate: Plan start date
897 + /// - endDate: Plan end date (race date)
| ╰─suggestion: Document 'isCompetitive' parameter
898 | /// - Returns: Events with pace-based workouts, progressively adjusted
899 | public static func applyPaceProgression(
warning: Parameter 'speedPaceEnd' is missing documentation
--> Sources/TrainingPlanKit/Pacing/PaceZoneConverter.swift:897:47-897:47
895 | /// - config: Progression config for the runner's level
896 | /// - startDate: Plan start date
897 + /// - endDate: Plan end date (race date)
| ╰─suggestion: Document 'speedPaceEnd' parameter
898 | /// - Returns: Events with pace-based workouts, progressively adjusted
899 | public static func applyPaceProgression(
warning: Parameter 'raceDistanceMeters' is missing documentation
--> Sources/TrainingPlanKit/Pacing/PaceZoneConverter.swift:897:47-897:47
895 | /// - config: Progression config for the runner's level
896 | /// - startDate: Plan start date
897 + /// - endDate: Plan end date (race date)
| ╰─suggestion: Document 'raceDistanceMeters' parameter
898 | /// - Returns: Events with pace-based workouts, progressively adjusted
899 | public static func applyPaceProgression(
warning: Parameter 'isBeginner' is missing documentation
--> Sources/TrainingPlanKit/Pacing/PaceZoneConverter.swift:897:47-897:47
895 | /// - config: Progression config for the runner's level
896 | /// - startDate: Plan start date
897 + /// - endDate: Plan end date (race date)
| ╰─suggestion: Document 'isBeginner' parameter
898 | /// - Returns: Events with pace-based workouts, progressively adjusted
899 | public static func applyPaceProgression(
warning: Parameter 'racePaceEnd' is missing documentation
--> Sources/TrainingPlanKit/Pacing/PaceZoneConverter.swift:897:47-897:47
895 | /// - config: Progression config for the runner's level
896 | /// - startDate: Plan start date
897 + /// - endDate: Plan end date (race date)
| ╰─suggestion: Document 'racePaceEnd' parameter
898 | /// - Returns: Events with pace-based workouts, progressively adjusted
899 | public static func applyPaceProgression(
Finished building documentation for 'TrainingPlanKit' (0.74s)
Generated documentation archive at:
/Users/admin/builder/spi-builder-workspace/.docs/swarog46/training_plan_kit/main
Fetching https://github.com/swiftlang/swift-docc-plugin
[1/2325] Fetching swift-docc-plugin
Fetched https://github.com/swiftlang/swift-docc-plugin from cache (1.42s)
Computing version for https://github.com/swiftlang/swift-docc-plugin
Computed https://github.com/swiftlang/swift-docc-plugin at 1.5.0 (3.65s)
Fetching https://github.com/swiftlang/swift-docc-symbolkit
[1/3758] Fetching swift-docc-symbolkit
Fetched https://github.com/swiftlang/swift-docc-symbolkit from cache (1.25s)
Computing version for https://github.com/swiftlang/swift-docc-symbolkit
Computed https://github.com/swiftlang/swift-docc-symbolkit at 1.0.0 (1.97s)
Creating working copy for https://github.com/swiftlang/swift-docc-symbolkit
Working copy of https://github.com/swiftlang/swift-docc-symbolkit resolved at 1.0.0
Creating working copy for https://github.com/swiftlang/swift-docc-plugin
Working copy of https://github.com/swiftlang/swift-docc-plugin resolved at 1.5.0
Building for debugging...
[0/8] Write sources
[1/8] Write snippet-extract-tool-entitlement.plist
[1/8] Write sources
[4/8] Write swift-version--6988338F2F200930.txt
[6/54] Emitting module SymbolKit
[7/58] Compiling Snippets SnippetLanguage.swift
[8/58] Emitting module Snippets
[9/58] Compiling Snippets Snippet.swift
[10/58] Compiling Snippets SnippetParser.swift
[11/58] Compiling SymbolKit Mixin+Equals.swift
[12/58] Compiling SymbolKit Mixin+Hash.swift
[13/58] Compiling SymbolKit Mixin.swift
[14/58] Compiling SymbolKit LineList.swift
[15/58] Compiling SymbolKit Position.swift
[16/58] Compiling SymbolKit GenericConstraint.swift
[17/58] Compiling SymbolKit GenericParameter.swift
[18/58] Compiling SymbolKit Generics.swift
[19/58] Compiling SymbolKit Namespace.swift
[20/58] Compiling SymbolKit SourceRange.swift
[21/58] Compiling SymbolKit Metadata.swift
[22/58] Compiling SymbolKit Module.swift
[23/58] Compiling SymbolKit OperatingSystem.swift
[24/58] Compiling SymbolKit Platform.swift
[25/58] Compiling SymbolKit DeclarationFragments.swift
[26/58] Compiling SymbolKit Fragment.swift
[27/58] Compiling SymbolKit FragmentKind.swift
[28/58] Compiling SymbolKit FunctionParameter.swift
[29/58] Compiling SymbolKit FunctionSignature.swift
[30/58] Compiling SymbolKit Identifier.swift
[31/58] Compiling SymbolKit KindIdentifier.swift
[32/58] Compiling SymbolKit Location.swift
[33/58] Compiling SymbolKit Mutability.swift
[34/58] Compiling SymbolKit SemanticVersion.swift
[35/58] Compiling SymbolKit AccessControl.swift
[36/58] Compiling SymbolKit Availability.swift
[37/58] Compiling SymbolKit AvailabilityItem.swift
[38/58] Compiling SymbolKit Domain.swift
[39/58] Compiling SymbolKit Names.swift
[40/58] Compiling SymbolKit SPI.swift
[41/58] Compiling SymbolKit Snippet.swift
[42/58] Compiling SymbolKit Extension.swift
[43/58] Compiling SymbolKit Symbol.swift
[44/58] Compiling SymbolKit SymbolKind.swift
[45/58] Compiling SymbolKit SymbolGraph.swift
[46/58] Compiling SymbolKit GraphCollector.swift
[47/58] Compiling SymbolKit Relationship.swift
[48/58] Compiling SymbolKit RelationshipKind.swift
[49/58] Compiling SymbolKit SourceOrigin.swift
[50/58] Compiling SymbolKit GenericConstraints.swift
[51/58] Compiling SymbolKit Swift.swift
[52/58] Compiling SymbolKit UnifiedSymbol+Encodable.swift
[53/58] Compiling SymbolKit UnifiedSymbol.swift
[54/58] Compiling SymbolKit UnifiedSymbolGraph+Encodable.swift
[55/58] Compiling SymbolKit UnifiedSymbolGraph.swift
[56/62] Compiling snippet_extract URL+Status.swift
[57/62] Compiling snippet_extract SymbolGraph+Snippet.swift
[58/62] Emitting module snippet_extract
[59/62] Compiling snippet_extract SnippetBuildCommand.swift
[59/62] Write Objects.LinkFileList
[60/62] Linking snippet-extract-tool
[61/62] Applying snippet-extract-tool
Build of product 'snippet-extract' complete! (4.48s)
Building for debugging...
[0/1] Write swift-version--6988338F2F200930.txt
Build of target: 'TrainingPlanKit' complete! (0.19s)
1222
8 /Users/admin/builder/spi-builder-workspace/.docs/swarog46/training_plan_kit/main
✅ Doc result (uploading) reported
========================================
SyncDocs
========================================
Doc archive source directory: $PWD/.docs/swarog46/training_plan_kit/main
File count: 1222
Doc size: 8.0MB
Preparing doc bundle ...
Using presigned URL upload - AWS credentials not required
Uploading -swarog46-training_plan_kit-main-09f2a996.zip to presigned URL
Starting upload of 1680911 bytes...
Upload completed successfully
Done.