The Swift Package Index logo.Swift Package Index

Build Information

Failed to build JelloSwift, reference 0.16.0 (ce1dac), with Swift 6.4 for Wasm on 21 Sep 2026 04:10:34 UTC.

Build Command

bash -c docker run --pull=always --rm -v "checkouts-54344844-0":/host -w "$PWD" -e JAVA_HOME="/root/.sdkman/candidates/java/current" -e SPI_BUILD="1" -e SPI_PROCESSING="1" registry.gitlab.com/saguaro1/spi-images:wasm-6.4-latest swift build --swift-sdk swift-6.4.x-DEVELOPMENT-SNAPSHOT-2026-09-04-a_wasm 2>&1

Build Log

========================================
RunAll
========================================
Builder version: 5.1.0
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/LuizZak/JelloSwift.git
Reference: 0.16.0
Initialized empty Git repository in /host/spi-builder-workspace/.git/
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: 	git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint: 	git branch -m <name>
From https://github.com/LuizZak/JelloSwift
 * tag               0.16.0     -> FETCH_HEAD
HEAD is now at ce1dac7 Updating Changelog
Cloned https://github.com/LuizZak/JelloSwift.git
Revision (git rev-parse @):
ce1dac711d77572141236816d898695361f9e06d
SUCCESS checkout https://github.com/LuizZak/JelloSwift.git at 0.16.0
========================================
Build
========================================
Selected platform:         wasm
Swift version:             6.4
Building package at path:  $PWD
https://github.com/LuizZak/JelloSwift.git
Running build ...
bash -c docker run --pull=always --rm -v "checkouts-54344844-0":/host -w "$PWD" -e JAVA_HOME="/root/.sdkman/candidates/java/current" -e SPI_BUILD="1" -e SPI_PROCESSING="1" registry.gitlab.com/saguaro1/spi-images:wasm-6.4-latest swift build --swift-sdk swift-6.4.x-DEVELOPMENT-SNAPSHOT-2026-09-04-a_wasm 2>&1
wasm-6.4-latest: Pulling from saguaro1/spi-images
Digest: sha256:4328fdb43c680d205c1d6761b1e3267aa38277eefdda9ddfb17b6a0f1a77857a
Status: Image is up to date for registry.gitlab.com/saguaro1/spi-images:wasm-6.4-latest
Building for debugging...
[Planning deferred tasks]
error: SwiftCompile normal wasm32 failed with a nonzero exit code. Command line:     cd /host

/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:269:45: error: cannot find type 'JFloat' in scope
267 |
268 |     @inlinable
269 |     static public func -(lhs: Vector2, rhs: JFloat) -> Vector2 {
    |                                             `- error: cannot find type 'JFloat' in scope
270 |         return Vector2(x: lhs.x - rhs, y: lhs.y - rhs)
271 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:259:46: error: cannot find type 'JFloat' in scope
257 |
258 |     @inlinable
259 |     static public func - (lhs: Vector3, rhs: JFloat) -> Vector3 {
    |                                              `- error: cannot find type 'JFloat' in scope
260 |         return Vector3(x: lhs.x - rhs, y: lhs.y - rhs, z: lhs.z - rhs)
261 |     }
/host/spi-builder-workspace/Sources/Geometry/Matrix3x3.swift:5:31: error: cannot find type 'JFloat' in scope
  3 | /// Plain 3-row 3-column Matrix with real components.
  4 | public struct Matrix3x3: CustomStringConvertible {
  5 |     public typealias Scalar = JFloat
    |                               `- error: cannot find type 'JFloat' in scope
  6 |
  7 |     /// Returns a 3x3 [identity matrix].
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:28:19: error: cannot find type 'JFloat' in scope
 26 |
 27 |     /// The JFloat representation of this vector's x axis
 28 |     public var x: JFloat
    |                   `- error: cannot find type 'JFloat' in scope
 29 |
 30 |     /// The JFloat representation of this vector's y axis
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:31:19: error: cannot find type 'JFloat' in scope
 29 |
 30 |     /// The JFloat representation of this vector's y axis
 31 |     public var y: JFloat
    |                   `- error: cannot find type 'JFloat' in scope
 32 |
 33 |     /// Returns the angle in radians of this Vector2
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:12:15: error: type 'Vector2' does not conform to protocol 'Decodable'
 10 |
 11 | /// Represents a 2D vector
 12 | public struct Vector2: VectorRepresentable, Equatable, CustomStringConvertible, Codable {
    |               `- error: type 'Vector2' does not conform to protocol 'Decodable'
 13 |
 14 |     /// A zeroed-value Vector2
    :
 26 |
 27 |     /// The JFloat representation of this vector's x axis
 28 |     public var x: JFloat
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
 29 |
 30 |     /// The JFloat representation of this vector's y axis
 31 |     public var y: JFloat
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
 32 |
 33 |     /// Returns the angle in radians of this Vector2
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:12:15: error: type 'Vector2' does not conform to protocol 'Decodable'
 10 |
 11 | /// Represents a 2D vector
 12 | public struct Vector2: VectorRepresentable, Equatable, CustomStringConvertible, Codable {
    |               `- error: type 'Vector2' does not conform to protocol 'Decodable'
 13 |
 14 |     /// A zeroed-value Vector2
    :
 26 |
 27 |     /// The JFloat representation of this vector's x axis
 28 |     public var x: JFloat
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
 29 |
 30 |     /// The JFloat representation of this vector's y axis
 31 |     public var y: JFloat
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
 32 |
 33 |     /// Returns the angle in radians of this Vector2
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:93:24: error: cannot find type 'JFloat' in scope
 91 |     /// Inits a vector 2 with X and Y defined as a given float
 92 |     @inlinable
 93 |     public init(value: JFloat) {
    |                        `- error: cannot find type 'JFloat' in scope
 94 |         x = value
 95 |         y = value
/host/spi-builder-workspace/Sources/Body.swift:50:28: error: cannot find type 'JFloat' in scope
  48 |     /// 1 never decelerates. Values outside the range [0, 1] inclusive may
  49 |     /// introduce instability
  50 |     public var velDamping: JFloat = 0.999
     |                            `- error: cannot find type 'JFloat' in scope
  51 |
  52 |     /// The array of body components for this body object
/host/spi-builder-workspace/Sources/Body.swift:63:47: error: cannot find type 'JFloat' in scope
  61 |
  62 |     /// The derived rotation of the body, in radians
  63 |     public fileprivate(set) var derivedAngle: JFloat = 0
     |                                               `- error: cannot find type 'JFloat' in scope
  64 |
  65 |     /// Omega (ω) is the relative angular speed of the body, in radians/s
/host/spi-builder-workspace/Sources/Body.swift:66:47: error: cannot find type 'JFloat' in scope
  64 |
  65 |     /// Omega (ω) is the relative angular speed of the body, in radians/s
  66 |     public fileprivate(set) var derivedOmega: JFloat = 0
     |                                               `- error: cannot find type 'JFloat' in scope
  67 |
  68 |     // Utilize to calculate the omega for the body
/host/spi-builder-workspace/Sources/Body.swift:69:32: error: cannot find type 'JFloat' in scope
  67 |
  68 |     // Utilize to calculate the omega for the body
  69 |     fileprivate var lastAngle: JFloat = 0
     |                                `- error: cannot find type 'JFloat' in scope
  70 |
  71 |     /// Gets a list of vertices that represents the current position of each
/host/spi-builder-workspace/Sources/Body.swift:143:23: error: cannot find type 'JFloat' in scope
 141 |         world: World? = nil,
 142 |         shape: ClosedShape,
 143 |         pointMasses: [JFloat] = [1],
     |                       `- error: cannot find type 'JFloat' in scope
 144 |         position: Vector2 = Vector2.zero,
 145 |         angle: JFloat = 0,
/host/spi-builder-workspace/Sources/Body.swift:145:16: error: cannot find type 'JFloat' in scope
 143 |         pointMasses: [JFloat] = [1],
 144 |         position: Vector2 = Vector2.zero,
 145 |         angle: JFloat = 0,
     |                `- error: cannot find type 'JFloat' in scope
 146 |         scale: Vector2 = Vector2.unit,
 147 |         kinematic: Bool = false,
/host/spi-builder-workspace/Sources/Body.swift:305:39: error: cannot find type 'JFloat' in scope
 303 |     /// - parameter forceUpdate:
 304 |     ///     Whether to force the update of the body, even if it's a static body.
 305 |     public func updateAABB(_ elapsed: JFloat, forceUpdate: Bool) {
     |                                       `- error: cannot find type 'JFloat' in scope
 306 |         guard !isStatic || forceUpdate else {
 307 |             return
/host/spi-builder-workspace/Sources/Body.swift:361:36: error: cannot find type 'JFloat' in scope
 359 |
 360 |     /// Sets the mass for all the PointMass objects in this body.
 361 |     public func setMassAll(_ mass: JFloat) {
     |                                    `- error: cannot find type 'JFloat' in scope
 362 |         for i in 0..<pointMasses.count {
 363 |             pointMasses[i].mass = mass
/host/spi-builder-workspace/Sources/Body.swift:370:63: error: cannot find type 'JFloat' in scope
 368 |
 369 |     /// Sets the mass for a single PointMass individually.
 370 |     public func setMassForPointMass(atIndex index: Int, mass: JFloat) {
     |                                                               `- error: cannot find type 'JFloat' in scope
 371 |         pointMasses[index].mass = mass
 372 |
/host/spi-builder-workspace/Sources/Body.swift:381:43: error: cannot find type 'JFloat' in scope
 379 |     /// sets up to the count of masses in the array, if larger, it sets the
 380 |     /// matching masses for all point masses, and ignores the rest of the array.
 381 |     public func setMass(fromList masses: [JFloat]) {
     |                                           `- error: cannot find type 'JFloat' in scope
 382 |         for (mass, i) in zip(masses, 0..<pointMasses.count) {
 383 |             pointMasses[i].mass = mass
/host/spi-builder-workspace/Sources/Body.swift:394:57: error: cannot find type 'JFloat' in scope
 392 |     /// Setting the position and angle resets the current shape to the original
 393 |     /// base shape of the object.
 394 |     public func setPositionAngle(_ pos: Vector2, angle: JFloat, scale: Vector2) {
     |                                                         `- error: cannot find type 'JFloat' in scope
 395 |         let matrix = Vector2.matrix(scalingBy: scale, rotatingBy: angle, translatingBy: pos)
 396 |
/host/spi-builder-workspace/Sources/Body.swift:424:51: error: cannot find type 'JFloat' in scope
 422 |     /// call this. Instead you can just access the `derivedPosition`, `DerivedAngle`,
 423 |     /// `derivedVelocity`, and `derivedOmega` properties.
 424 |     public func derivePositionAndAngle(_ elapsed: JFloat) {
     |                                                   `- error: cannot find type 'JFloat' in scope
 425 |         // No need if this is a static body, or kinematically controlled.
 426 |         if isStatic || isKinematic {
/host/spi-builder-workspace/Sources/Body.swift:522:38: error: cannot find type 'JFloat' in scope
 520 |     /// Integrates the point masses for this Body.
 521 |     /// Ignored, if body is static.
 522 |     public func integrate(_ elapsed: JFloat) {
     |                                      `- error: cannot find type 'JFloat' in scope
 523 |         if isStatic {
 524 |             return
/host/spi-builder-workspace/Sources/Body.swift:536:43: error: cannot find type 'JFloat' in scope
 534 |     /// Applies the velocity damping to the point masses.
 535 |     /// Ignored, if body is static.
 536 |     public func dampenVelocity(_ elapsed: JFloat) {
     |                                           `- error: cannot find type 'JFloat' in scope
 537 |         if isStatic {
 538 |             return
/host/spi-builder-workspace/Sources/Body.swift:550:39: error: cannot find type 'JFloat' in scope
 548 |     /// Applies a rotational clockwise torque of a given force on this body.
 549 |     /// Ignored, if body is static.
 550 |     public func applyTorque(of force: JFloat) {
     |                                       `- error: cannot find type 'JFloat' in scope
 551 |         if isStatic {
 552 |             return
/host/spi-builder-workspace/Sources/Body.swift:569:43: error: cannot find type 'JFloat' in scope
 567 |     /// The method keeps the average velocity of the point masses the same during
 568 |     /// the procedure.
 569 |     public func setAngularVelocity(_ vel: JFloat) {
     |                                           `- error: cannot find type 'JFloat' in scope
 570 |         if isStatic {
 571 |             return
/host/spi-builder-workspace/Sources/Body.swift:583:43: error: cannot find type 'JFloat' in scope
 581 |
 582 |     /// Accumulates the angular velocity for this body
 583 |     public func addAngularVelocity(_ vel: JFloat) {
     |                                           `- error: cannot find type 'JFloat' in scope
 584 |         if isStatic {
 585 |             return
/host/spi-builder-workspace/Sources/Body.swift:743:54: error: cannot find type 'JFloat' in scope
 741 |         to pt: Vector2,
 742 |         onEdge edgeNum: Int
 743 |     ) -> (hitPoint: Vector2, normal: Vector2, edgeD: JFloat, distance: JFloat) {
     |                                                      `- error: cannot find type 'JFloat' in scope
 744 |         assert(pointMasses.count > 0)
 745 |
/host/spi-builder-workspace/Sources/Body.swift:743:72: error: cannot find type 'JFloat' in scope
 741 |         to pt: Vector2,
 742 |         onEdge edgeNum: Int
 743 |     ) -> (hitPoint: Vector2, normal: Vector2, edgeD: JFloat, distance: JFloat) {
     |                                                                        `- error: cannot find type 'JFloat' in scope
 744 |         assert(pointMasses.count > 0)
 745 |
/host/spi-builder-workspace/Sources/Body.swift:810:54: error: cannot find type 'JFloat' in scope
 808 |         to pt: Vector2,
 809 |         onEdge edgeNum: Int
 810 |     ) -> (hitPoint: Vector2, normal: Vector2, edgeD: JFloat, distance: JFloat) {
     |                                                      `- error: cannot find type 'JFloat' in scope
 811 |         let result = closestPointSquared(to: pt, onEdge: edgeNum)
 812 |
/host/spi-builder-workspace/Sources/Body.swift:810:72: error: cannot find type 'JFloat' in scope
 808 |         to pt: Vector2,
 809 |         onEdge edgeNum: Int
 810 |     ) -> (hitPoint: Vector2, normal: Vector2, edgeD: JFloat, distance: JFloat) {
     |                                                                        `- error: cannot find type 'JFloat' in scope
 811 |         let result = closestPointSquared(to: pt, onEdge: edgeNum)
 812 |
/host/spi-builder-workspace/Sources/Body.swift:835:80: error: cannot find type 'JFloat' in scope
 833 |     public func closestPoint(
 834 |         to pt: Vector2
 835 |     ) -> (hitPoint: Vector2, normal: Vector2, pointA: Int, pointB: Int, edgeD: JFloat, distance: JFloat) {
     |                                                                                `- error: cannot find type 'JFloat' in scope
 836 |         assert(pointMasses.count > 0)
 837 |
/host/spi-builder-workspace/Sources/Body.swift:835:98: error: cannot find type 'JFloat' in scope
 833 |     public func closestPoint(
 834 |         to pt: Vector2
 835 |     ) -> (hitPoint: Vector2, normal: Vector2, pointA: Int, pointB: Int, edgeD: JFloat, distance: JFloat) {
     |                                                                                                  `- error: cannot find type 'JFloat' in scope
 836 |         assert(pointMasses.count > 0)
 837 |
/host/spi-builder-workspace/Sources/Body.swift:891:45: error: cannot find type 'JFloat' in scope
 889 |         to pt: Vector2,
 890 |         withTolerance tolerance: JFloat = JFloat.infinity
 891 |     ) -> (edgePosition: Vector2, edgeRatio: JFloat, edgePoint1: Int, edgePoint2: Int)? {
     |                                             `- error: cannot find type 'JFloat' in scope
 892 |         if edges.count == 0 || pointMasses.count == 0 {
 893 |             return nil
/host/spi-builder-workspace/Sources/Body.swift:890:34: error: cannot find type 'JFloat' in scope
 888 |     public func closestEdge(
 889 |         to pt: Vector2,
 890 |         withTolerance tolerance: JFloat = JFloat.infinity
     |                                  `- error: cannot find type 'JFloat' in scope
 891 |     ) -> (edgePosition: Vector2, edgeRatio: JFloat, edgePoint1: Int, edgePoint2: Int)? {
 892 |         if edges.count == 0 || pointMasses.count == 0 {
/host/spi-builder-workspace/Sources/Body.swift:936:77: error: cannot find type 'JFloat' in scope
 934 |     /// Find the closest PointMass index in this body, given a global point
 935 |     /// - precondition: There is at least one point mass in this body
 936 |     public func closestPointMass(to pos: Vector2) -> (point: Int, distance: JFloat) {
     |                                                                             `- error: cannot find type 'JFloat' in scope
 937 |         assert(pointMasses.count > 0)
 938 |
/host/spi-builder-workspace/Sources/BodyCollisionInformation.swift:29:23: error: cannot find type 'JFloat' in scope
27 |     /// A value from 0 - 1 specifying at which point in the edge
28 |     /// bodyBpmA - bodyBpmB is the penetration occurring.
29 |     public var edgeD: JFloat = 0
   |                       `- error: cannot find type 'JFloat' in scope
30 |     /// Global normal for the collision. Always the penetrated edge's normal.
31 |     public var normal = Vector2.zero
/host/spi-builder-workspace/Sources/BodyCollisionInformation.swift:34:29: error: cannot find type 'JFloat' in scope
32 |     /// Penetration distance.
33 |     /// Is the distance required to move bodyApm in order to solve the collision
34 |     public var penetration: JFloat = 0
   |                             `- error: cannot find type 'JFloat' in scope
35 |
36 |     /// Inits this collision information with no edge information.
/host/spi-builder-workspace/Sources/BodyEdge.swift:36:24: error: cannot find type 'JFloat' in scope
34 |
35 |     /// The edge's length
36 |     public var length: JFloat = 0
   |                        `- error: cannot find type 'JFloat' in scope
37 |
38 |     /// The edge's length, squared
/host/spi-builder-workspace/Sources/BodyEdge.swift:39:31: error: cannot find type 'JFloat' in scope
37 |
38 |     /// The edge's length, squared
39 |     public var lengthSquared: JFloat = 0
   |                               `- error: cannot find type 'JFloat' in scope
40 |
41 |     public init() {
/host/spi-builder-workspace/Sources/BodyEdge.swift:10:15: error: type 'BodyEdge' does not conform to protocol 'Decodable'
 8 |
 9 | /// Contains information about the edge of a body
10 | public struct BodyEdge: Codable {
   |               `- error: type 'BodyEdge' does not conform to protocol 'Decodable'
11 |
12 |     /// The index of the edge on the body
   :
34 |
35 |     /// The edge's length
36 |     public var length: JFloat = 0
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
37 |
38 |     /// The edge's length, squared
39 |     public var lengthSquared: JFloat = 0
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
40 |
41 |     public init() {
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/BodyEdge.swift:10:15: error: type 'BodyEdge' does not conform to protocol 'Encodable'
 8 |
 9 | /// Contains information about the edge of a body
10 | public struct BodyEdge: Codable {
   |               `- error: type 'BodyEdge' does not conform to protocol 'Encodable'
11 |
12 |     /// The index of the edge on the body
   :
34 |
35 |     /// The edge's length
36 |     public var length: JFloat = 0
   |                `- note: cannot automatically synthesize 'Encodable' because 'JFloat' does not conform to 'Encodable'
37 |
38 |     /// The edge's length, squared
39 |     public var lengthSquared: JFloat = 0
   |                `- note: cannot automatically synthesize 'Encodable' because 'JFloat' does not conform to 'Encodable'
40 |
41 |     public init() {
Swift.Encodable.encode:2:6: note: protocol requires function 'encode(to:)' with type 'Encodable'
1 | protocol Encodable {
2 | func encode(to encoder: any Encoder) throws}
  |      `- note: protocol requires function 'encode(to:)' with type 'Encodable'
3 |
/host/spi-builder-workspace/Sources/JointLink.swift:20:15: error: cannot find type 'JFloat' in scope
18 |
19 |     /// Gets the total mass of the subject of this joint link
20 |     var mass: JFloat { get }
   |               `- error: cannot find type 'JFloat' in scope
21 |
22 |     /// Gets a value specifying whether the object referenced by this
/host/spi-builder-workspace/Sources/BodyJoint.swift:40:29: error: cannot find type 'JFloat' in scope
38 |     ///
39 |     /// - Parameter dt: The delta time to update the resolve on
40 |     open func resolve(_ dt: JFloat) {
   |                             `- error: cannot find type 'JFloat' in scope
41 |
42 |     }
/host/spi-builder-workspace/Sources/CollisionObserver.swift:22:110: error: cannot find type 'JFloat' in scope
20 |     /// When this happens, the collision is ignored and dropped from the resolve
21 |     /// list, and this delegate notifier is called.
22 |     func bodyCollision(_ info: BodyCollisionInformation, didExceedPenetrationThreshold penetrationThreshold: JFloat)
   |                                                                                                              `- error: cannot find type 'JFloat' in scope
23 | }
24 |
/host/spi-builder-workspace/Sources/CollisionObserver.swift:31:110: error: cannot find type 'JFloat' in scope
29 |     }
30 |
31 |     func bodyCollision(_ info: BodyCollisionInformation, didExceedPenetrationThreshold penetrationThreshold: JFloat) {
   |                                                                                                              `- error: cannot find type 'JFloat' in scope
32 |
33 |     }
/host/spi-builder-workspace/Sources/Components/PressureComponent.swift:20:41: error: cannot find type 'JFloat' in scope
18 |     /// Equal the polygonal area of the body's point masses.
19 |     /// Is clamped to always be be >= 0.5
20 |     fileprivate(set) public var volume: JFloat = 0
   |                                         `- error: cannot find type 'JFloat' in scope
21 |
22 |     /// The gas pressure coefficient for the pressure component.
/host/spi-builder-workspace/Sources/Components/PressureComponent.swift:24:29: error: cannot find type 'JFloat' in scope
22 |     /// The gas pressure coefficient for the pressure component.
23 |     /// Higher values result in higher expansion and resistance to compression.
24 |     public var gasPressure: JFloat = 0
   |                             `- error: cannot find type 'JFloat' in scope
25 |
26 |     public init() {
/host/spi-builder-workspace/Sources/Components/PressureComponent.swift:62:29: error: cannot find type 'JFloat' in scope
60 |     /// Higher values result in higher resistance to compression and higher
61 |     /// expansion.
62 |     public var gasPressure: JFloat
   |                             `- error: cannot find type 'JFloat' in scope
63 |
64 |     public init(gasPressure: JFloat = 0) {
/host/spi-builder-workspace/Sources/Components/PressureComponent.swift:55:15: error: type 'PressureComponentCreator' does not conform to protocol 'Decodable'
53 |
54 | // Creator for the Spring component
55 | public struct PressureComponentCreator: BodyComponentCreator, Codable {
   |               `- error: type 'PressureComponentCreator' does not conform to protocol 'Decodable'
56 |
57 |     public static var bodyComponentClass: BodyComponent.Type = PressureComponent.self
   :
60 |     /// Higher values result in higher resistance to compression and higher
61 |     /// expansion.
62 |     public var gasPressure: JFloat
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
63 |
64 |     public init(gasPressure: JFloat = 0) {
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/Components/PressureComponent.swift:64:30: error: cannot find type 'JFloat' in scope
62 |     public var gasPressure: JFloat
63 |
64 |     public init(gasPressure: JFloat = 0) {
   |                              `- error: cannot find type 'JFloat' in scope
65 |         self.gasPressure = gasPressure
66 |     }
/host/spi-builder-workspace/Sources/Components/PressureComponent.swift:55:15: error: type 'PressureComponentCreator' does not conform to protocol 'Encodable'
53 |
54 | // Creator for the Spring component
55 | public struct PressureComponentCreator: BodyComponentCreator, Codable {
   |               `- error: type 'PressureComponentCreator' does not conform to protocol 'Encodable'
56 |
57 |     public static var bodyComponentClass: BodyComponent.Type = PressureComponent.self
   :
60 |     /// Higher values result in higher resistance to compression and higher
61 |     /// expansion.
62 |     public var gasPressure: JFloat
   |                `- note: cannot automatically synthesize 'Encodable' because 'JFloat' does not conform to 'Encodable'
63 |
64 |     public init(gasPressure: JFloat = 0) {
Swift.Encodable.encode:2:6: note: protocol requires function 'encode(to:)' with type 'Encodable'
1 | protocol Encodable {
2 | func encode(to encoder: any Encoder) throws}
  |      `- note: protocol requires function 'encode(to:)' with type 'Encodable'
3 |
/host/spi-builder-workspace/Sources/Components/ShapeMatchComponent.swift:16:35: error: cannot find type 'JFloat' in scope
 14 |     /// The spring constant for the shape matching of the body - ignored if
 15 |     /// shape matching is off
 16 |     fileprivate var shapeSpringK: JFloat = 200
    |                                   `- error: cannot find type 'JFloat' in scope
 17 |     /// The spring damping for the shape matching of the body - ignored if the
 18 |     /// shape matching is off
/host/spi-builder-workspace/Sources/Components/ShapeMatchComponent.swift:19:38: error: cannot find type 'JFloat' in scope
 17 |     /// The spring damping for the shape matching of the body - ignored if the
 18 |     /// shape matching is off
 19 |     fileprivate var shapeSpringDamp: JFloat = 10
    |                                      `- error: cannot find type 'JFloat' in scope
 20 |
 21 |     public init() {
/host/spi-builder-workspace/Sources/Components/ShapeMatchComponent.swift:30:54: error: cannot find type 'JFloat' in scope
 28 |
 29 |     /// Sets the shape-matching spring constants
 30 |     public func setShapeMatchingConstants(_ springK: JFloat, _ damping: JFloat) {
    |                                                      `- error: cannot find type 'JFloat' in scope
 31 |         shapeSpringK = springK
 32 |         shapeSpringDamp = damping
/host/spi-builder-workspace/Sources/Components/ShapeMatchComponent.swift:30:73: error: cannot find type 'JFloat' in scope
 28 |
 29 |     /// Sets the shape-matching spring constants
 30 |     public func setShapeMatchingConstants(_ springK: JFloat, _ damping: JFloat) {
    |                                                                         `- error: cannot find type 'JFloat' in scope
 31 |         shapeSpringK = springK
 32 |         shapeSpringDamp = damping
/host/spi-builder-workspace/Sources/Components/ShapeMatchComponent.swift:102:109: error: cannot find type 'JFloat' in scope
100 |     }
101 |
102 |     fileprivate func deriveSubsetPositionAngle(on body: Body, indices: [Int]) -> (position: Vector2, angle: JFloat) {
    |                                                                                                             `- error: cannot find type 'JFloat' in scope
103 |         let meanPos = body.isPined ? PointMass.averagePosition(of: body.pointMasses) : body.derivedPos
104 |
/host/spi-builder-workspace/Sources/Components/ShapeMatchComponent.swift:176:30: error: cannot find type 'JFloat' in scope
174 |     /// The spring constant for the shape matching of the body - ignored if
175 |     /// shape matching is off
176 |     public var shapeSpringK: JFloat = 200
    |                              `- error: cannot find type 'JFloat' in scope
177 |     /// The spring damping for the shape matching of the body - ignored if the
178 |     /// shape matching is off
/host/spi-builder-workspace/Sources/Components/ShapeMatchComponent.swift:179:33: error: cannot find type 'JFloat' in scope
177 |     /// The spring damping for the shape matching of the body - ignored if the
178 |     /// shape matching is off
179 |     public var shapeSpringDamp: JFloat = 10
    |                                 `- error: cannot find type 'JFloat' in scope
180 |
181 |     public init(
/host/spi-builder-workspace/Sources/Components/ShapeMatchComponent.swift:161:15: error: type 'ShapeMatchComponentCreator' does not conform to protocol 'Decodable'
159 |
160 | /// Creator for the Shape Match component
161 | public struct ShapeMatchComponentCreator: BodyComponentCreator, Codable {
    |               `- error: type 'ShapeMatchComponentCreator' does not conform to protocol 'Decodable'
162 |
163 |     public static var bodyComponentClass: BodyComponent.Type = ShapeMatchComponent.self
    :
174 |     /// The spring constant for the shape matching of the body - ignored if
175 |     /// shape matching is off
176 |     public var shapeSpringK: JFloat = 200
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
177 |     /// The spring damping for the shape matching of the body - ignored if the
178 |     /// shape matching is off
179 |     public var shapeSpringDamp: JFloat = 10
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
180 |
181 |     public init(
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/Components/ShapeMatchComponent.swift:184:23: error: cannot find type 'JFloat' in scope
182 |         shapeMatchingOn: Bool = true,
183 |         target: ShapeMatchComponent.Target = .fullShape,
184 |         shapeSpringK: JFloat = 200,
    |                       `- error: cannot find type 'JFloat' in scope
185 |         shapeSpringDamp: JFloat = 10
186 |     ) {
/host/spi-builder-workspace/Sources/Components/ShapeMatchComponent.swift:185:26: error: cannot find type 'JFloat' in scope
183 |         target: ShapeMatchComponent.Target = .fullShape,
184 |         shapeSpringK: JFloat = 200,
185 |         shapeSpringDamp: JFloat = 10
    |                          `- error: cannot find type 'JFloat' in scope
186 |     ) {
187 |         self.shapeMatchingOn = shapeMatchingOn
/host/spi-builder-workspace/Sources/Components/ShapeMatchComponent.swift:161:15: error: type 'ShapeMatchComponentCreator' does not conform to protocol 'Encodable'
159 |
160 | /// Creator for the Shape Match component
161 | public struct ShapeMatchComponentCreator: BodyComponentCreator, Codable {
    |               `- error: type 'ShapeMatchComponentCreator' does not conform to protocol 'Encodable'
162 |
163 |     public static var bodyComponentClass: BodyComponent.Type = ShapeMatchComponent.self
    :
174 |     /// The spring constant for the shape matching of the body - ignored if
175 |     /// shape matching is off
176 |     public var shapeSpringK: JFloat = 200
    |                `- note: cannot automatically synthesize 'Encodable' because 'JFloat' does not conform to 'Encodable'
177 |     /// The spring damping for the shape matching of the body - ignored if the
178 |     /// shape matching is off
179 |     public var shapeSpringDamp: JFloat = 10
    |                `- note: cannot automatically synthesize 'Encodable' because 'JFloat' does not conform to 'Encodable'
180 |
181 |     public init(
Swift.Encodable.encode:2:6: note: protocol requires function 'encode(to:)' with type 'Encodable'
1 | protocol Encodable {
2 | func encode(to encoder: any Encoder) throws}
  |      `- note: protocol requires function 'encode(to:)' with type 'Encodable'
3 |
/host/spi-builder-workspace/Sources/Components/SpringComponent.swift:33:34: error: cannot find type 'JFloat' in scope
 31 |
 32 |     /// The spring constant for the edges of the spring body
 33 |     fileprivate var edgeSpringK: JFloat = 50
    |                                  `- error: cannot find type 'JFloat' in scope
 34 |     /// The spring damping for the edges of the spring body
 35 |     fileprivate var edgeSpringDamp: JFloat = 2
/host/spi-builder-workspace/Sources/Components/SpringComponent.swift:35:37: error: cannot find type 'JFloat' in scope
 33 |     fileprivate var edgeSpringK: JFloat = 50
 34 |     /// The spring damping for the edges of the spring body
 35 |     fileprivate var edgeSpringDamp: JFloat = 2
    |                                     `- error: cannot find type 'JFloat' in scope
 36 |
 37 |     /// The spring constant for the shape matching of the body - ignored if
/host/spi-builder-workspace/Sources/Components/SpringComponent.swift:39:35: error: cannot find type 'JFloat' in scope
 37 |     /// The spring constant for the shape matching of the body - ignored if
 38 |     /// shape matching is off
 39 |     fileprivate var shapeSpringK: JFloat = 200
    |                                   `- error: cannot find type 'JFloat' in scope
 40 |     /// The spring damping for the shape matching of the body - ignored if the
 41 |     /// shape matching is off
/host/spi-builder-workspace/Sources/Components/SpringComponent.swift:42:38: error: cannot find type 'JFloat' in scope
 40 |     /// The spring damping for the shape matching of the body - ignored if the
 41 |     /// shape matching is off
 42 |     fileprivate var shapeSpringDamp: JFloat = 10
    |                                      `- error: cannot find type 'JFloat' in scope
 43 |
 44 |     public init() {
/host/spi-builder-workspace/Sources/Components/SpringComponent.swift:58:18: error: cannot find type 'JFloat' in scope
 56 |         pointA: Int,
 57 |         pointB: Int,
 58 |         springK: JFloat,
    |                  `- error: cannot find type 'JFloat' in scope
 59 |         damping: JFloat,
 60 |         plasticity: SpringPlasticity? = nil
/host/spi-builder-workspace/Sources/Components/SpringComponent.swift:59:18: error: cannot find type 'JFloat' in scope
 57 |         pointB: Int,
 58 |         springK: JFloat,
 59 |         damping: JFloat,
    |                  `- error: cannot find type 'JFloat' in scope
 60 |         plasticity: SpringPlasticity? = nil
 61 |     ) -> InternalSpring {
/host/spi-builder-workspace/Sources/Components/SpringComponent.swift:85:18: error: cannot find type 'JFloat' in scope
 83 |         pointA: Int,
 84 |         pointB: Int,
 85 |         springK: JFloat,
    |                  `- error: cannot find type 'JFloat' in scope
 86 |         damping: JFloat,
 87 |         dist: RestDistance,
/host/spi-builder-workspace/Sources/Components/SpringComponent.swift:86:18: error: cannot find type 'JFloat' in scope
 84 |         pointB: Int,
 85 |         springK: JFloat,
 86 |         damping: JFloat,
    |                  `- error: cannot find type 'JFloat' in scope
 87 |         dist: RestDistance,
 88 |         plasticity: SpringPlasticity? = nil
/host/spi-builder-workspace/Sources/Components/SpringComponent.swift:121:54: error: cannot find type 'JFloat' in scope
119 |
120 |     /// Sets the shape-matching spring constants
121 |     public func setShapeMatchingConstants(_ springK: JFloat, _ damping: JFloat) {
    |                                                      `- error: cannot find type 'JFloat' in scope
122 |         shapeSpringK = springK
123 |         shapeSpringDamp = damping
/host/spi-builder-workspace/Sources/Components/SpringComponent.swift:121:73: error: cannot find type 'JFloat' in scope
119 |
120 |     /// Sets the shape-matching spring constants
121 |     public func setShapeMatchingConstants(_ springK: JFloat, _ damping: JFloat) {
    |                                                                         `- error: cannot find type 'JFloat' in scope
122 |         shapeSpringK = springK
123 |         shapeSpringDamp = damping
/host/spi-builder-workspace/Sources/Components/SpringComponent.swift:129:22: error: cannot find type 'JFloat' in scope
127 |     /// (edge springs)
128 |     public func setEdgeSpringConstants(
129 |         edgeSpringK: JFloat,
    |                      `- error: cannot find type 'JFloat' in scope
130 |         _ edgeSpringDamp: JFloat
131 |     ) {
/host/spi-builder-workspace/Sources/Components/SpringComponent.swift:130:27: error: cannot find type 'JFloat' in scope
128 |     public func setEdgeSpringConstants(
129 |         edgeSpringK: JFloat,
130 |         _ edgeSpringDamp: JFloat
    |                           `- error: cannot find type 'JFloat' in scope
131 |     ) {
132 |         // we know that the first n springs in the list are the edge springs.
/host/spi-builder-workspace/Sources/Components/SpringComponent.swift:144:20: error: cannot find type 'JFloat' in scope
142 |     public func setSpringConstants(
143 |         forSpringIndex springID: Int,
144 |         _ springK: JFloat,
    |                    `- error: cannot find type 'JFloat' in scope
145 |         _ springDamp: JFloat
146 |     ) {
/host/spi-builder-workspace/Sources/Components/SpringComponent.swift:145:23: error: cannot find type 'JFloat' in scope
143 |         forSpringIndex springID: Int,
144 |         _ springK: JFloat,
145 |         _ springDamp: JFloat
    |                       `- error: cannot find type 'JFloat' in scope
146 |     ) {
147 |         // index is for all internal springs, AFTER the default edge springs.
/host/spi-builder-workspace/Sources/Components/SpringComponent.swift:174:68: error: cannot find type 'JFloat' in scope
172 |     /// This ignores the default edge springs, so the index is always
173 |     /// `+ body.pointMasses.count`
174 |     public func springCoefficient(forSpringIndex springID: Int) -> JFloat {
    |                                                                    `- error: cannot find type 'JFloat' in scope
175 |         return springs[edgeSpringsCount + springID].coefficient
176 |     }
/host/spi-builder-workspace/Sources/Components/SpringComponent.swift:181:64: error: cannot find type 'JFloat' in scope
179 |     /// This ignores the default edge springs, so the index is always
180 |     /// `+ body.pointMasses.count`
181 |     public func springDamping(forSpringIndex springID: Int) -> JFloat {
    |                                                                `- error: cannot find type 'JFloat' in scope
182 |         return springs[edgeSpringsCount + springID].damping
183 |     }
/host/spi-builder-workspace/Sources/Components/SpringComponent.swift:281:29: error: cannot find type 'JFloat' in scope
279 |
280 |     /// The spring constant for the edges of the spring body
281 |     public var edgeSpringK: JFloat = 50
    |                             `- error: cannot find type 'JFloat' in scope
282 |     /// The spring damping for the edges of the spring body
283 |     public var edgeSpringDamp: JFloat = 2
/host/spi-builder-workspace/Sources/Components/SpringComponent.swift:283:32: error: cannot find type 'JFloat' in scope
281 |     public var edgeSpringK: JFloat = 50
282 |     /// The spring damping for the edges of the spring body
283 |     public var edgeSpringDamp: JFloat = 2
    |                                `- error: cannot find type 'JFloat' in scope
284 |
285 |     /// The spring constant for the shape matching of the body - ignored if
/host/spi-builder-workspace/Sources/Components/SpringComponent.swift:287:30: error: cannot find type 'JFloat' in scope
285 |     /// The spring constant for the shape matching of the body - ignored if
286 |     /// shape matching is off
287 |     public var shapeSpringK: JFloat = 200
    |                              `- error: cannot find type 'JFloat' in scope
288 |     /// The spring damping for the shape matching of the body - ignored if the
289 |     /// shape matching is off
/host/spi-builder-workspace/Sources/Components/SpringComponent.swift:290:33: error: cannot find type 'JFloat' in scope
288 |     /// The spring damping for the shape matching of the body - ignored if the
289 |     /// shape matching is off
290 |     public var shapeSpringDamp: JFloat = 10
    |                                 `- error: cannot find type 'JFloat' in scope
291 |
292 |     /// An array of inner springs for a body
/host/spi-builder-workspace/Sources/Components/SpringComponent.swift:271:15: error: type 'SpringComponentCreator' does not conform to protocol 'Decodable'
269 |
270 | /// Creator for the Spring component
271 | public struct SpringComponentCreator: BodyComponentCreator, Codable {
    |               `- error: type 'SpringComponentCreator' does not conform to protocol 'Decodable'
272 |
273 |     public static var bodyComponentClass: BodyComponent.Type = SpringComponent.self
    :
279 |
280 |     /// The spring constant for the edges of the spring body
281 |     public var edgeSpringK: JFloat = 50
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
282 |     /// The spring damping for the edges of the spring body
283 |     public var edgeSpringDamp: JFloat = 2
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
284 |
285 |     /// The spring constant for the shape matching of the body - ignored if
286 |     /// shape matching is off
287 |     public var shapeSpringK: JFloat = 200
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
288 |     /// The spring damping for the shape matching of the body - ignored if the
289 |     /// shape matching is off
290 |     public var shapeSpringDamp: JFloat = 10
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
291 |
292 |     /// An array of inner springs for a body
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/Components/SpringComponent.swift:297:22: error: cannot find type 'JFloat' in scope
295 |     public init(
296 |         shapeMatchingOn: Bool = true,
297 |         edgeSpringK: JFloat = 50, edgeSpringDamp: JFloat = 2,
    |                      `- error: cannot find type 'JFloat' in scope
298 |         shapeSpringK: JFloat = 200, shapeSpringDamp: JFloat = 10,
299 |         innerSprings: [InternalSpring] = []
/host/spi-builder-workspace/Sources/Components/SpringComponent.swift:297:51: error: cannot find type 'JFloat' in scope
295 |     public init(
296 |         shapeMatchingOn: Bool = true,
297 |         edgeSpringK: JFloat = 50, edgeSpringDamp: JFloat = 2,
    |                                                   `- error: cannot find type 'JFloat' in scope
298 |         shapeSpringK: JFloat = 200, shapeSpringDamp: JFloat = 10,
299 |         innerSprings: [InternalSpring] = []
/host/spi-builder-workspace/Sources/Components/SpringComponent.swift:298:23: error: cannot find type 'JFloat' in scope
296 |         shapeMatchingOn: Bool = true,
297 |         edgeSpringK: JFloat = 50, edgeSpringDamp: JFloat = 2,
298 |         shapeSpringK: JFloat = 200, shapeSpringDamp: JFloat = 10,
    |                       `- error: cannot find type 'JFloat' in scope
299 |         innerSprings: [InternalSpring] = []
300 |     ) {
/host/spi-builder-workspace/Sources/Components/SpringComponent.swift:298:54: error: cannot find type 'JFloat' in scope
296 |         shapeMatchingOn: Bool = true,
297 |         edgeSpringK: JFloat = 50, edgeSpringDamp: JFloat = 2,
298 |         shapeSpringK: JFloat = 200, shapeSpringDamp: JFloat = 10,
    |                                                      `- error: cannot find type 'JFloat' in scope
299 |         innerSprings: [InternalSpring] = []
300 |     ) {
/host/spi-builder-workspace/Sources/Components/SpringComponent.swift:271:15: error: type 'SpringComponentCreator' does not conform to protocol 'Encodable'
269 |
270 | /// Creator for the Spring component
271 | public struct SpringComponentCreator: BodyComponentCreator, Codable {
    |               `- error: type 'SpringComponentCreator' does not conform to protocol 'Encodable'
272 |
273 |     public static var bodyComponentClass: BodyComponent.Type = SpringComponent.self
    :
279 |
280 |     /// The spring constant for the edges of the spring body
281 |     public var edgeSpringK: JFloat = 50
    |                `- note: cannot automatically synthesize 'Encodable' because 'JFloat' does not conform to 'Encodable'
282 |     /// The spring damping for the edges of the spring body
283 |     public var edgeSpringDamp: JFloat = 2
    |                `- note: cannot automatically synthesize 'Encodable' because 'JFloat' does not conform to 'Encodable'
284 |
285 |     /// The spring constant for the shape matching of the body - ignored if
286 |     /// shape matching is off
287 |     public var shapeSpringK: JFloat = 200
    |                `- note: cannot automatically synthesize 'Encodable' because 'JFloat' does not conform to 'Encodable'
288 |     /// The spring damping for the shape matching of the body - ignored if the
289 |     /// shape matching is off
290 |     public var shapeSpringDamp: JFloat = 10
    |                `- note: cannot automatically synthesize 'Encodable' because 'JFloat' does not conform to 'Encodable'
291 |
292 |     /// An array of inner springs for a body
Swift.Encodable.encode:2:6: note: protocol requires function 'encode(to:)' with type 'Encodable'
1 | protocol Encodable {
2 | func encode(to encoder: any Encoder) throws}
  |      `- note: protocol requires function 'encode(to:)' with type 'Encodable'
3 |
/host/spi-builder-workspace/Sources/Geometry/AABB.swift:28:19: error: cannot find type 'JFloat' in scope
 26 |     /// Gets the X position of this AABB
 27 |     @inlinable
 28 |     public var x: JFloat {
    |                   `- error: cannot find type 'JFloat' in scope
 29 |         return minimum.x
 30 |     }
/host/spi-builder-workspace/Sources/Geometry/AABB.swift:33:19: error: cannot find type 'JFloat' in scope
 31 |     /// Gets the Y position of this AABB
 32 |     @inlinable
 33 |     public var y: JFloat {
    |                   `- error: cannot find type 'JFloat' in scope
 34 |         return minimum.y
 35 |     }
/host/spi-builder-workspace/Sources/Geometry/AABB.swift:40:23: error: cannot find type 'JFloat' in scope
 38 |     /// This is the same as `maximum.x - minimum.x`
 39 |     @inlinable
 40 |     public var width: JFloat {
    |                       `- error: cannot find type 'JFloat' in scope
 41 |         return maximum.x - minimum.x
 42 |     }
/host/spi-builder-workspace/Sources/Geometry/AABB.swift:47:24: error: cannot find type 'JFloat' in scope
 45 |     /// This is the same as `maximum.y - minimum.y`
 46 |     @inlinable
 47 |     public var height: JFloat {
    |                        `- error: cannot find type 'JFloat' in scope
 48 |         return maximum.y - minimum.y
 49 |     }
/host/spi-builder-workspace/Sources/Geometry/AABB.swift:53:22: error: cannot find type 'JFloat' in scope
 51 |     /// Gets the middle X position of this AABB
 52 |     @inlinable
 53 |     public var midX: JFloat {
    |                      `- error: cannot find type 'JFloat' in scope
 54 |         return (minimum.x + maximum.x) / 2
 55 |     }
/host/spi-builder-workspace/Sources/Geometry/AABB.swift:58:22: error: cannot find type 'JFloat' in scope
 56 |     /// Gets the middle Y position of this AABB
 57 |     @inlinable
 58 |     public var midY: JFloat {
    |                      `- error: cannot find type 'JFloat' in scope
 59 |         return (minimum.y + maximum.y) / 2
 60 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:279:45: error: cannot find type 'JFloat' in scope
277 |
278 |     @inlinable
279 |     static public func /(lhs: Vector2, rhs: JFloat) -> Vector2 {
    |                                             `- error: cannot find type 'JFloat' in scope
280 |         return Vector2(x: lhs.x / rhs, y: lhs.y / rhs)
281 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:290:31: error: cannot find type 'JFloat' in scope
288 |
289 |     @inlinable
290 |     static public func /(lhs: JFloat, rhs: Vector2) -> Vector2 {
    |                               `- error: cannot find type 'JFloat' in scope
291 |         return Vector2(x: lhs / rhs.x, y: lhs / rhs.y)
292 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:269:46: error: cannot find type 'JFloat' in scope
267 |
268 |     @inlinable
269 |     static public func / (lhs: Vector3, rhs: JFloat) -> Vector3 {
    |                                              `- error: cannot find type 'JFloat' in scope
270 |         return Vector3(x: lhs.x / rhs, y: lhs.y / rhs, z: lhs.z / rhs)
271 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:283:32: error: cannot find type 'JFloat' in scope
281 |
282 |     @inlinable
283 |     static public func / (lhs: JFloat, rhs: Vector3) -> Vector3 {
    |                                `- error: cannot find type 'JFloat' in scope
284 |         return Vector3(x: lhs / rhs.x, y: lhs / rhs.y, z: lhs / rhs.z)
285 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:264:45: error: cannot find type 'JFloat' in scope
262 |     // JFloat interaction
263 |     @inlinable
264 |     static public func +(lhs: Vector2, rhs: JFloat) -> Vector2 {
    |                                             `- error: cannot find type 'JFloat' in scope
265 |         return Vector2(x: lhs.x + rhs, y: lhs.y + rhs)
266 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:254:46: error: cannot find type 'JFloat' in scope
252 |     // JFloat interaction
253 |     @inlinable
254 |     static public func + (lhs: Vector3, rhs: JFloat) -> Vector3 {
    |                                              `- error: cannot find type 'JFloat' in scope
255 |         return Vector3(x: lhs.x + rhs, y: lhs.y + rhs, z: lhs.z + rhs)
256 |     }
/host/spi-builder-workspace/Sources/Geometry/AABB.swift:54:40: error: no '/' candidates produce the expected contextual result type '_'
 52 |     @inlinable
 53 |     public var midX: JFloat {
 54 |         return (minimum.x + maximum.x) / 2
    |                                        `- error: no '/' candidates produce the expected contextual result type '_'
 55 |     }
 56 |     /// Gets the middle Y position of this AABB
Swift.DurationProtocol./:2:13: note: '/' produces '_', not the expected contextual result type '_'
1 | protocol DurationProtocol {
2 | static func / (lhs: Self, rhs: Int) -> Self}
  |             |- note: '/' produces '_', not the expected contextual result type '_'
  |             `- note: '/' produces 'Self', not the expected contextual result type '_'
3 |
Swift.BinaryInteger./:2:13: note: '/' produces '_', not the expected contextual result type '_'
1 | protocol BinaryInteger {
2 | static func / (lhs: Self, rhs: Self) -> Self}
  |             |- note: '/' produces '_', not the expected contextual result type '_'
  |             |- note: '/' produces 'Self', not the expected contextual result type '_'
  |             `- note: '/' produces 'Int', not the expected contextual result type '_'
3 |
/host/spi-builder-workspace/Sources/Geometry/AABB.swift:59:40: error: no '/' candidates produce the expected contextual result type '_'
 57 |     @inlinable
 58 |     public var midY: JFloat {
 59 |         return (minimum.y + maximum.y) / 2
    |                                        `- error: no '/' candidates produce the expected contextual result type '_'
 60 |     }
 61 |
Swift.DurationProtocol./:2:13: note: '/' produces '_', not the expected contextual result type '_'
1 | protocol DurationProtocol {
2 | static func / (lhs: Self, rhs: Int) -> Self}
  |             |- note: '/' produces '_', not the expected contextual result type '_'
  |             `- note: '/' produces 'Self', not the expected contextual result type '_'
3 |
Swift.BinaryInteger./:2:13: note: '/' produces '_', not the expected contextual result type '_'
1 | protocol BinaryInteger {
2 | static func / (lhs: Self, rhs: Self) -> Self}
  |             |- note: '/' produces '_', not the expected contextual result type '_'
  |             |- note: '/' produces 'Self', not the expected contextual result type '_'
  |             `- note: '/' produces 'Int', not the expected contextual result type '_'
3 |
/host/spi-builder-workspace/Sources/Geometry/ClosedShape.swift:55:39: error: cannot find type 'JFloat' in scope
 53 |     /// Adds a vertex to this closed shape
 54 |     @inlinable
 55 |     public mutating func addVertex(x: JFloat, y: JFloat) {
    |                                       `- error: cannot find type 'JFloat' in scope
 56 |         addVertex(Vector2(x: x, y: y))
 57 |     }
/host/spi-builder-workspace/Sources/Geometry/ClosedShape.swift:55:50: error: cannot find type 'JFloat' in scope
 53 |     /// Adds a vertex to this closed shape
 54 |     @inlinable
 55 |     public mutating func addVertex(x: JFloat, y: JFloat) {
    |                                                  `- error: cannot find type 'JFloat' in scope
 56 |         addVertex(Vector2(x: x, y: y))
 57 |     }
/host/spi-builder-workspace/Sources/Geometry/ClosedShape.swift:101:36: error: cannot find type 'JFloat' in scope
 99 |     @inlinable
100 |     public mutating func transformOwnBy(
101 |         rotatingBy angleInRadians: JFloat = 0,
    |                                    `- error: cannot find type 'JFloat' in scope
102 |         scalingBy scale: Vector2 = .unit
103 |     ) {
/host/spi-builder-workspace/Sources/Geometry/ClosedShape.swift:128:36: error: cannot find type 'JFloat' in scope
126 |     public func transformedBy(
127 |         translatingBy worldPos: Vector2 = .zero,
128 |         rotatingBy angleInRadians: JFloat = 0,
    |                                    `- error: cannot find type 'JFloat' in scope
129 |         scalingBy localScale: Vector2 = .unit
130 |     ) -> ClosedShape {
/host/spi-builder-workspace/Sources/Geometry/ClosedShape.swift:150:25: error: cannot find type 'JFloat' in scope
148 |         _ target: inout [Vector2],
149 |         worldPos: Vector2,
150 |         angleInRadians: JFloat,
    |                         `- error: cannot find type 'JFloat' in scope
151 |         localScale: Vector2 = Vector2.unit
152 |     ) {
/host/spi-builder-workspace/Sources/Geometry/ClosedShape.swift:200:48: error: cannot find type 'JFloat' in scope
198 |     /// Creates a closed shape that represents a circle of a given radius, with
199 |     /// the specified number of points around its circumference
200 |     public static func circle(ofRadius radius: JFloat, pointCount: Int) -> ClosedShape {
    |                                                `- error: cannot find type 'JFloat' in scope
201 |         return .create { shape in
202 |             for i in 0..<pointCount
/host/spi-builder-workspace/Sources/Geometry/ClosedShape.swift:212:46: error: cannot find type 'JFloat' in scope
210 |     /// Creates a closed shape that represents a square, with side of the
211 |     /// specified length
212 |     public static func square(ofSide length: JFloat) -> ClosedShape {
    |                                              `- error: cannot find type 'JFloat' in scope
213 |         return rectangle(ofSides: Vector2(value: length))
214 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:349:27: error: cannot find type 'JFloat' in scope
347 |     static public func matrix(
348 |         scalingBy scale: Vector2 = Vector2.unit,
349 |         rotatingBy angle: JFloat = 0,
    |                           `- error: cannot find type 'JFloat' in scope
350 |         translatingBy translate: Vector2 = Vector2.zero
351 |     ) -> Matrix3x3 {
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:274:45: error: cannot find type 'JFloat' in scope
272 |
273 |     @inlinable
274 |     static public func *(lhs: Vector2, rhs: JFloat) -> Vector2 {
    |                                             `- error: cannot find type 'JFloat' in scope
275 |         return Vector2(x: lhs.x * rhs, y: lhs.y * rhs)
276 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:264:46: error: cannot find type 'JFloat' in scope
262 |
263 |     @inlinable
264 |     static public func * (lhs: Vector3, rhs: JFloat) -> Vector3 {
    |                                              `- error: cannot find type 'JFloat' in scope
265 |         return Vector3(x: lhs.x * rhs, y: lhs.y * rhs, z: lhs.z * rhs)
266 |     }
/host/spi-builder-workspace/Sources/Geometry/GeomUtils.swift:13:70: error: cannot find type 'JFloat' in scope
11 | @_specialize(where T == Array<Vector2>)
12 | @_specialize(where T == ContiguousArray<PointMass>)
13 | public func polygonArea<T: BidirectionalCollection>(of points: T) -> JFloat where T.Iterator.Element: VectorRepresentable {
   |                                                                      `- error: cannot find type 'JFloat' in scope
14 |     guard var v2 = points.last else {
15 |         return 0
/host/spi-builder-workspace/Sources/Geometry/GeomUtils.swift:35:27: error: cannot find type 'JFloat' in scope
33 |     lineA: (start: Vector2, end: Vector2),
34 |     lineB: (start: Vector2, end: Vector2)
35 | ) -> (hitPt: Vector2, Ua: JFloat, Ub: JFloat)? {
   |                           `- error: cannot find type 'JFloat' in scope
36 |     let denom = ((lineB.end.y - lineB.start.y) * (lineA.end.x - lineA.start.x)) - ((lineB.end.x - lineB.start.x) * (lineA.end.y - lineA.start.y))
37 |
/host/spi-builder-workspace/Sources/Geometry/GeomUtils.swift:35:39: error: cannot find type 'JFloat' in scope
33 |     lineA: (start: Vector2, end: Vector2),
34 |     lineB: (start: Vector2, end: Vector2)
35 | ) -> (hitPt: Vector2, Ua: JFloat, Ub: JFloat)? {
   |                                       `- error: cannot find type 'JFloat' in scope
36 |     let denom = ((lineB.end.y - lineB.start.y) * (lineA.end.x - lineA.start.x)) - ((lineB.end.x - lineB.start.x) * (lineA.end.y - lineA.start.y))
37 |
/host/spi-builder-workspace/Sources/Geometry/GeomUtils.swift:62:73: error: cannot find type 'JFloat' in scope
60 | /// given ratio specified
61 | @inlinable
62 | public func calculateVectorRatio(_ vec1: Vector2, vec2: Vector2, ratio: JFloat) -> Vector2 {
   |                                                                         `- error: cannot find type 'JFloat' in scope
63 |     return vec1 + (vec2 - vec1) * ratio
64 | }
/host/spi-builder-workspace/Sources/Geometry/GeomUtils.swift:39:22: error: reference to member 'leastNonzeroMagnitude' cannot be resolved without a contextual type
37 |
38 |     // if denom == 0, lines are parallel - being a bit generous on this one..
39 |     if abs(denom) < .leastNonzeroMagnitude {
   |                      `- error: reference to member 'leastNonzeroMagnitude' cannot be resolved without a contextual type
40 |         return nil
41 |     }
/host/spi-builder-workspace/Sources/Geometry/Matrix3x3.swift:12:25: error: cannot convert value of type '((Int, Int, Int), (Int, Int, Int), (Int, Int, Int))' to expected argument type '(Vector3, Vector3, Vector3)'
 10 |     @inlinable
 11 |     public static var identity: Self {
 12 |         Self.init(rows: (
    |                         `- error: cannot convert value of type '((Int, Int, Int), (Int, Int, Int), (Int, Int, Int))' to expected argument type '(Vector3, Vector3, Vector3)'
 13 |             (1, 0, 0),
 14 |             (0, 1, 0),
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:17:19: error: cannot find type 'JFloat' in scope
 15 |
 16 |     /// The JFloat representation of this vector's x axis
 17 |     public var x: JFloat
    |                   `- error: cannot find type 'JFloat' in scope
 18 |
 19 |     /// The JFloat representation of this vector's y axis
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:20:19: error: cannot find type 'JFloat' in scope
 18 |
 19 |     /// The JFloat representation of this vector's y axis
 20 |     public var y: JFloat
    |                   `- error: cannot find type 'JFloat' in scope
 21 |
 22 |     /// The JFloat representation of this vector's z axis
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:23:19: error: cannot find type 'JFloat' in scope
 21 |
 22 |     /// The JFloat representation of this vector's z axis
 23 |     public var z: JFloat
    |                   `- error: cannot find type 'JFloat' in scope
 24 |
 25 |     /// Returns the squared length of this Vector3
/host/spi-builder-workspace/Sources/Geometry/Matrix3x3.swift:216:25: error: cannot convert value of type '((_, _, _), (_, _, _), (_, _, _))' to expected argument type '(Vector3, Vector3, Vector3)'
214 |     public init(rows: (Vector3, Vector3, Vector3)) {
215 |
216 |         self.init(rows: (
    |                         `- error: cannot convert value of type '((_, _, _), (_, _, _), (_, _, _))' to expected argument type '(Vector3, Vector3, Vector3)'
217 |             (rows.0.x, rows.0.y, rows.0.z),
218 |             (rows.1.x, rows.1.y, rows.1.z),
/host/spi-builder-workspace/Sources/Geometry/Matrix3x3.swift:228:25: error: cannot convert value of type '((_, _, _), (_, _, _), (_, _, _))' to expected argument type '(Vector3, Vector3, Vector3)'
226 |     public init(columns: (Vector3, Vector3, Vector3)) {
227 |
228 |         self.init(rows: (
    |                         `- error: cannot convert value of type '((_, _, _), (_, _, _), (_, _, _))' to expected argument type '(Vector3, Vector3, Vector3)'
229 |             (columns.0.x, columns.1.x, columns.2.x),
230 |             (columns.0.y, columns.1.y, columns.2.y),
/host/spi-builder-workspace/Sources/Geometry/Matrix3x3.swift:260:14: error: no exact matches in call to initializer 
212 |     /// values for each row.
213 |     @inlinable
214 |     public init(rows: (Vector3, Vector3, Vector3)) {
    |            `- note: incorrect labels for candidate (have: '(diagonal:)', expected: '(rows:)')
215 |
216 |         self.init(rows: (
    :
224 |     /// values for each column.
225 |     @inlinable
226 |     public init(columns: (Vector3, Vector3, Vector3)) {
    |            `- note: incorrect labels for candidate (have: '(diagonal:)', expected: '(columns:)')
227 |
228 |         self.init(rows: (
    :
258 |     @inlinable
259 |     public init(diagonal: Scalar) {
260 |         self.init(diagonal: (diagonal, diagonal, diagonal))
    |              `- error: no exact matches in call to initializer 
261 |     }
262 |
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:140:42: error: cannot find type 'JFloat' in scope
138 |     /// Calculates the dot product between this and another provided Vector3
139 |     @inlinable
140 |     public func dot(_ other: Vector3) -> JFloat {
    |                                          `- error: cannot find type 'JFloat' in scope
141 |         return (x * other.x) + (y * other.y) + (z * other.z)
142 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:4:15: error: type 'Vector3' does not conform to protocol 'Decodable'
  2 |
  3 | /// Represents a 2D vector
  4 | public struct Vector3: Equatable, CustomStringConvertible, Codable {
    |               `- error: type 'Vector3' does not conform to protocol 'Decodable'
  5 |
  6 |     /// A zeroed-value Vector3
    :
 15 |
 16 |     /// The JFloat representation of this vector's x axis
 17 |     public var x: JFloat
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
 18 |
 19 |     /// The JFloat representation of this vector's y axis
 20 |     public var y: JFloat
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
 21 |
 22 |     /// The JFloat representation of this vector's z axis
 23 |     public var z: JFloat
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
 24 |
 25 |     /// Returns the squared length of this Vector3
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:4:15: error: type 'Vector3' does not conform to protocol 'Decodable'
  2 |
  3 | /// Represents a 2D vector
  4 | public struct Vector3: Equatable, CustomStringConvertible, Codable {
    |               `- error: type 'Vector3' does not conform to protocol 'Decodable'
  5 |
  6 |     /// A zeroed-value Vector3
    :
 15 |
 16 |     /// The JFloat representation of this vector's x axis
 17 |     public var x: JFloat
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
 18 |
 19 |     /// The JFloat representation of this vector's y axis
 20 |     public var y: JFloat
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
 21 |
 22 |     /// The JFloat representation of this vector's z axis
 23 |     public var z: JFloat
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
 24 |
 25 |     /// Returns the squared length of this Vector3
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:83:24: error: cannot find type 'JFloat' in scope
 81 |     /// Inits a vector 3 with X, Y, and Z defined as a given float
 82 |     @inlinable
 83 |     public init(value: JFloat) {
    |                        `- error: cannot find type 'JFloat' in scope
 84 |         x = value
 85 |         y = value
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:92:36: error: cannot find type 'JFloat' in scope
 90 |     /// the specified value for the Z component.
 91 |     @inlinable
 92 |     public init(_ vec: Vector2, z: JFloat) {
    |                                    `- error: cannot find type 'JFloat' in scope
 93 |         (self.x, self.y) = (vec.x, vec.y)
 94 |         self.z = z
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:99:27: error: cannot find type 'JFloat' in scope
 97 |     /// Inits a vector 3 with X, Y, and Z defined as a given tuple
 98 |     @inlinable
 99 |     public init(_ value: (JFloat, JFloat, JFloat)) {
    |                           `- error: cannot find type 'JFloat' in scope
100 |         (x, y, z) = value
101 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:99:35: error: cannot find type 'JFloat' in scope
 97 |     /// Inits a vector 3 with X, Y, and Z defined as a given tuple
 98 |     @inlinable
 99 |     public init(_ value: (JFloat, JFloat, JFloat)) {
    |                                   `- error: cannot find type 'JFloat' in scope
100 |         (x, y, z) = value
101 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:99:43: error: cannot find type 'JFloat' in scope
 97 |     /// Inits a vector 3 with X, Y, and Z defined as a given tuple
 98 |     @inlinable
 99 |     public init(_ value: (JFloat, JFloat, JFloat)) {
    |                                           `- error: cannot find type 'JFloat' in scope
100 |         (x, y, z) = value
101 |     }
/host/spi-builder-workspace/Sources/Geometry/Matrix3x3.swift:310:27: error: missing argument label 'x:' in call
308 |     @inlinable
309 |     public func transformPoint(_ vec: Vector2) -> Vector2 {
310 |         let vec3 = Vector3(vec, z: 1)
    |                           `- error: missing argument label 'x:' in call
311 |
312 |         let result = transformPoint(vec3)
/host/spi-builder-workspace/Sources/Geometry/Matrix3x3.swift:310:31: error: missing argument for parameter 'y' in call
308 |     @inlinable
309 |     public func transformPoint(_ vec: Vector2) -> Vector2 {
310 |         let vec3 = Vector3(vec, z: 1)
    |                               `- error: missing argument for parameter 'y' in call
311 |
312 |         let result = transformPoint(vec3)
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:59:12: note: 'init(x:y:z:)' declared here
 57 |     /// Inits a vector 3 with three integer components
 58 |     @inlinable
 59 |     public init(x: Int, y: Int, z: Int) {
    |            `- note: 'init(x:y:z:)' declared here
 60 |         self.x = JFloat(x)
 61 |         self.y = JFloat(y)
/host/spi-builder-workspace/Sources/Geometry/Matrix3x3.swift:310:28: error: cannot convert value of type 'Vector2' to expected argument type 'Int'
308 |     @inlinable
309 |     public func transformPoint(_ vec: Vector2) -> Vector2 {
310 |         let vec3 = Vector3(vec, z: 1)
    |                            `- error: cannot convert value of type 'Vector2' to expected argument type 'Int'
311 |
312 |         let result = transformPoint(vec3)
/host/spi-builder-workspace/Sources/Geometry/Matrix3x3.swift:329:27: error: missing argument label 'x:' in call
327 |     @inlinable
328 |     public func transformVector(_ vec: Vector2) -> Vector2 {
329 |         let vec3 = Vector3(vec, z: 1)
    |                           `- error: missing argument label 'x:' in call
330 |
331 |         let result = transformPoint(vec3)
/host/spi-builder-workspace/Sources/Geometry/Matrix3x3.swift:329:31: error: missing argument for parameter 'y' in call
327 |     @inlinable
328 |     public func transformVector(_ vec: Vector2) -> Vector2 {
329 |         let vec3 = Vector3(vec, z: 1)
    |                               `- error: missing argument for parameter 'y' in call
330 |
331 |         let result = transformPoint(vec3)
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:59:12: note: 'init(x:y:z:)' declared here
 57 |     /// Inits a vector 3 with three integer components
 58 |     @inlinable
 59 |     public init(x: Int, y: Int, z: Int) {
    |            `- note: 'init(x:y:z:)' declared here
 60 |         self.x = JFloat(x)
 61 |         self.y = JFloat(y)
/host/spi-builder-workspace/Sources/Geometry/Matrix3x3.swift:329:28: error: cannot convert value of type 'Vector2' to expected argument type 'Int'
327 |     @inlinable
328 |     public func transformVector(_ vec: Vector2) -> Vector2 {
329 |         let vec3 = Vector3(vec, z: 1)
    |                            `- error: cannot convert value of type 'Vector2' to expected argument type 'Int'
330 |
331 |         let result = transformPoint(vec3)
/host/spi-builder-workspace/Sources/Geometry/Matrix3x3.swift:387:20: error: cannot convert value of type '((_, Int, Int), (Int, _, Int), (Int, Int, Int))' to expected argument type '(Vector3, Vector3, Vector3)'
385 |     @inlinable
386 |     public static func make2DScale(x: Scalar, y: Scalar) -> Self {
387 |         Self(rows: (
    |                    `- error: cannot convert value of type '((_, Int, Int), (Int, _, Int), (Int, Int, Int))' to expected argument type '(Vector3, Vector3, Vector3)'
388 |             (x, 0, 0),
389 |             (0, y, 0),
/host/spi-builder-workspace/Sources/Geometry/Matrix3x3.swift:408:27: error: cannot convert value of type '((_, _, Int), (_, _, Int), (Int, Int, Int))' to expected argument type '(Vector3, Vector3, Vector3)'
406 |         let s = sin(angleInRadians)
407 |
408 |         return Self(rows: (
    |                           `- error: cannot convert value of type '((_, _, Int), (_, _, Int), (Int, Int, Int))' to expected argument type '(Vector3, Vector3, Vector3)'
409 |             (c, -s, 0),
410 |             (s,  c, 0),
/host/spi-builder-workspace/Sources/Geometry/Matrix3x3.swift:419:20: error: cannot convert value of type '((Int, Int, _), (Int, Int, _), (Int, Int, Int))' to expected argument type '(Vector3, Vector3, Vector3)'
417 |     @inlinable
418 |     public static func make2DTranslation(x: Scalar, y: Scalar) -> Self {
419 |         Self(rows: (
    |                    `- error: cannot convert value of type '((Int, Int, _), (Int, Int, _), (Int, Int, Int))' to expected argument type '(Vector3, Vector3, Vector3)'
420 |             (1, 0, x),
421 |             (0, 1, y),
/host/spi-builder-workspace/Sources/Geometry/Matrix3x3.swift:509:27: error: cannot convert value of type '((_, _, _), (_, _, _), (_, _, _))' to expected argument type '(Vector3, Vector3, Vector3)'
507 |         let r22 = lhs.r2Vec.dot(rhs.c2Vec)
508 |
509 |         return Self(rows: (
    |                           `- error: cannot convert value of type '((_, _, _), (_, _, _), (_, _, _))' to expected argument type '(Vector3, Vector3, Vector3)'
510 |             (r00, r01, r02),
511 |             (r10, r11, r12),
/host/spi-builder-workspace/Sources/Geometry/Matrix3x3.swift:535:5: error: the compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions
533 | @inlinable
534 | public func == (_ lhs: Matrix3x3.M, _ rhs: Matrix3x3.M) -> Bool {
535 |     lhs.0 == rhs.0 && lhs.1 == rhs.1 && lhs.2 == rhs.2
    |     `- error: the compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions
536 | }
537 |
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:35:23: error: cannot find type 'JFloat' in scope
 33 |     /// Returns the angle in radians of this Vector2
 34 |     @inlinable
 35 |     public var angle: JFloat {
    |                       `- error: cannot find type 'JFloat' in scope
 36 |         return atan2(y, x)
 37 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:41:24: error: cannot find type 'JFloat' in scope
 39 |     /// Returns the squared length of this Vector2
 40 |     @inlinable
 41 |     public var length: JFloat {
    |                        `- error: cannot find type 'JFloat' in scope
 42 |         return x * x + y * y
 43 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:48:27: error: cannot find type 'JFloat' in scope
 46 |     /// Vector2
 47 |     @inlinable
 48 |     public var magnitude: JFloat {
    |                           `- error: cannot find type 'JFloat' in scope
 49 |         return sqrt(length)
 50 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:100:46: error: cannot find type 'JFloat' in scope
 98 |     /// Returns the distance between this Vector2 and another Vector2
 99 |     @inlinable
100 |     public func distance(to vec: Vector2) -> JFloat {
    |                                              `- error: cannot find type 'JFloat' in scope
101 |         let d = self - vec
102 |
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:108:53: error: cannot find type 'JFloat' in scope
106 |     /// Returns the distance squared between this Vector2 and another Vector2
107 |     @inlinable
108 |     public func distanceSquared(to vec: Vector2) -> JFloat {
    |                                                     `- error: cannot find type 'JFloat' in scope
109 |         let d = self - vec
110 |
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:12:15: error: type 'Vector2' does not conform to protocol 'Encodable'
 10 |
 11 | /// Represents a 2D vector
 12 | public struct Vector2: VectorRepresentable, Equatable, CustomStringConvertible, Codable {
    |               `- error: type 'Vector2' does not conform to protocol 'Encodable'
 13 |
 14 |     /// A zeroed-value Vector2
    :
 26 |
 27 |     /// The JFloat representation of this vector's x axis
 28 |     public var x: JFloat
    |                `- note: cannot automatically synthesize 'Encodable' because 'JFloat' does not conform to 'Encodable'
 29 |
 30 |     /// The JFloat representation of this vector's y axis
 31 |     public var y: JFloat
    |                `- note: cannot automatically synthesize 'Encodable' because 'JFloat' does not conform to 'Encodable'
 32 |
 33 |     /// Returns the angle in radians of this Vector2
Swift.Encodable.encode:2:6: note: protocol requires function 'encode(to:)' with type 'Encodable'
1 | protocol Encodable {
2 | func encode(to encoder: any Encoder) throws}
  |      `- note: protocol requires function 'encode(to:)' with type 'Encodable'
3 |
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:154:42: error: cannot find type 'JFloat' in scope
152 |     /// Calculates the dot product between this and another provided Vector2
153 |     @inlinable
154 |     public func dot(_ other: Vector2) -> JFloat {
    |                                          `- error: cannot find type 'JFloat' in scope
155 |         return (x * other.x) + (y * other.y)
156 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:163:44: error: cannot find type 'JFloat' in scope
161 |     /// the 'z' coordinate being 0.
162 |     @inlinable
163 |     public func cross(_ other: Vector2) -> JFloat {
    |                                            `- error: cannot find type 'JFloat' in scope
164 |         return (x * other.y) - (other.x * y)
165 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:221:59: error: cannot find type 'JFloat' in scope
219 |     /// See `Vector2.dot`
220 |     @inlinable
221 |     static public func •(lhs: Vector2, rhs: Vector2) -> JFloat {
    |                                                         `- error: cannot find type 'JFloat' in scope
222 |         return lhs.dot(rhs)
223 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:229:58: error: cannot find type 'JFloat' in scope
227 |     /// See `Vector2.cross`
228 |     @inlinable
229 |     static public func =/(lhs: Vector2, rhs: Vector2) -> JFloat {
    |                                                          `- error: cannot find type 'JFloat' in scope
230 |         return lhs.cross(rhs)
231 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:284:45: error: cannot find type 'JFloat' in scope
282 |
283 |     @inlinable
284 |     static public func %(lhs: Vector2, rhs: JFloat) -> Vector2 {
    |                                             `- error: cannot find type 'JFloat' in scope
285 |         return Vector2(x: lhs.x.truncatingRemainder(dividingBy: rhs),
286 |                        y: lhs.y.truncatingRemainder(dividingBy: rhs))
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:316:52: error: cannot find type 'JFloat' in scope
314 |     // JFloat interaction
315 |     @inlinable
316 |     static public func +=(lhs: inout Vector2, rhs: JFloat) {
    |                                                    `- error: cannot find type 'JFloat' in scope
317 |         lhs = lhs + rhs
318 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:320:52: error: cannot find type 'JFloat' in scope
318 |     }
319 |     @inlinable
320 |     static public func -=(lhs: inout Vector2, rhs: JFloat) {
    |                                                    `- error: cannot find type 'JFloat' in scope
321 |         lhs = lhs - rhs
322 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:324:52: error: cannot find type 'JFloat' in scope
322 |     }
323 |     @inlinable
324 |     static public func *=(lhs: inout Vector2, rhs: JFloat) {
    |                                                    `- error: cannot find type 'JFloat' in scope
325 |         lhs = lhs * rhs
326 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:328:52: error: cannot find type 'JFloat' in scope
326 |     }
327 |     @inlinable
328 |     static public func /=(lhs: inout Vector2, rhs: JFloat) {
    |                                                    `- error: cannot find type 'JFloat' in scope
329 |         lhs = lhs / rhs
330 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:334:43: error: argument passed to call that takes no arguments
332 |
333 | @usableFromInline
334 | let _identityMatrix = Matrix3x3(diagonal: 1)
    |                                           `- error: argument passed to call that takes no arguments
335 |
336 | // MARK: Matrix-transformation
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:405:44: error: cannot find type 'JFloat' in scope
403 |     /// angle in radians
404 |     @inlinable
405 |     public func rotated(by angleInRadians: JFloat) -> Vector2 {
    |                                            `- error: cannot find type 'JFloat' in scope
406 |         return Vector2.rotate(self, by: angleInRadians)
407 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:411:52: error: cannot find type 'JFloat' in scope
409 |     /// Rotates this vector around by a given angle in radians
410 |     @inlinable
411 |     public mutating func rotate(by angleInRadians: JFloat) -> Vector2 {
    |                                                    `- error: cannot find type 'JFloat' in scope
412 |         self = rotated(by: angleInRadians)
413 |         return self
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:418:66: error: cannot find type 'JFloat' in scope
416 |     /// Rotates a given vector by an angle in radians
417 |     @inlinable
418 |     public static func rotate(_ vec: Vector2, by angleInRadians: JFloat) -> Vector2 {
    |                                                                  `- error: cannot find type 'JFloat' in scope
419 |         // Check if we have a 0º or 180º rotation - these we can figure out
420 |         // using conditionals to speedup common paths.
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:458:32: error: cannot find type 'JFloat' in scope
456 |     /// - Returns: A vector that lies within the line created by the two vectors.
457 |     @inlinable
458 |     public func ratio(_ ratio: JFloat, to other: Vector2) -> Vector2 {
    |                                `- error: cannot find type 'JFloat' in scope
459 |         return self + (other - self) * ratio
460 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:73:18: error: cannot find 'JFloat' in scope
 71 |     @inlinable
 72 |     public init(x: Int, y: Int) {
 73 |         self.x = JFloat(x)
    |                  `- error: cannot find 'JFloat' in scope
 74 |         self.y = JFloat(y)
 75 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:74:18: error: cannot find 'JFloat' in scope
 72 |     public init(x: Int, y: Int) {
 73 |         self.x = JFloat(x)
 74 |         self.y = JFloat(y)
    |                  `- error: cannot find 'JFloat' in scope
 75 |     }
 76 |
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:80:18: error: cannot find 'JFloat' in scope
 78 |     @inlinable
 79 |     public init(x: Float, y: Float) {
 80 |         self.x = JFloat(x)
    |                  `- error: cannot find 'JFloat' in scope
 81 |         self.y = JFloat(y)
 82 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:81:18: error: cannot find 'JFloat' in scope
 79 |     public init(x: Float, y: Float) {
 80 |         self.x = JFloat(x)
 81 |         self.y = JFloat(y)
    |                  `- error: cannot find 'JFloat' in scope
 82 |     }
 83 |
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:87:18: error: cannot find 'JFloat' in scope
 85 |     @inlinable
 86 |     public init(x: Double, y: Double) {
 87 |         self.x = JFloat(x)
    |                  `- error: cannot find 'JFloat' in scope
 88 |         self.y = JFloat(y)
 89 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:88:18: error: cannot find 'JFloat' in scope
 86 |     public init(x: Double, y: Double) {
 87 |         self.x = JFloat(x)
 88 |         self.y = JFloat(y)
    |                  `- error: cannot find 'JFloat' in scope
 89 |     }
 90 |
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:317:53: error: cannot find type 'JFloat' in scope
315 |     }
316 |     @inlinable
317 |     static public func *= (lhs: inout Vector3, rhs: JFloat) {
    |                                                     `- error: cannot find type 'JFloat' in scope
318 |         lhs = lhs * rhs
319 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:374:24: error: reference to member 'make2DRotation' cannot be resolved without a contextual type
372 |
373 |         if angle != 0 {
374 |             matrix *= .make2DRotation(angle)
    |                        `- error: reference to member 'make2DRotation' cannot be resolved without a contextual type
375 |         }
376 |
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:392:33: error: missing argument label 'x:' in call
390 |     @inlinable
391 |     static public func * (lhs: Vector2, rhs: Matrix3x3) -> Vector2 {
392 |         let homogenous = Vector3(lhs, z: 1)
    |                                 `- error: missing argument label 'x:' in call
393 |
394 |         let transformed = rhs.transformPoint(homogenous)
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:392:37: error: missing argument for parameter 'y' in call
390 |     @inlinable
391 |     static public func * (lhs: Vector2, rhs: Matrix3x3) -> Vector2 {
392 |         let homogenous = Vector3(lhs, z: 1)
    |                                     `- error: missing argument for parameter 'y' in call
393 |
394 |         let transformed = rhs.transformPoint(homogenous)
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:59:12: note: 'init(x:y:z:)' declared here
 57 |     /// Inits a vector 3 with three integer components
 58 |     @inlinable
 59 |     public init(x: Int, y: Int, z: Int) {
    |            `- note: 'init(x:y:z:)' declared here
 60 |         self.x = JFloat(x)
 61 |         self.y = JFloat(y)
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:392:34: error: cannot convert value of type 'Vector2' to expected argument type 'Int'
390 |     @inlinable
391 |     static public func * (lhs: Vector2, rhs: Matrix3x3) -> Vector2 {
392 |         let homogenous = Vector3(lhs, z: 1)
    |                                  `- error: cannot convert value of type 'Vector2' to expected argument type 'Int'
393 |
394 |         let transformed = rhs.transformPoint(homogenous)
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:309:53: error: cannot find type 'JFloat' in scope
307 |     // JFloat interaction
308 |     @inlinable
309 |     static public func += (lhs: inout Vector3, rhs: JFloat) {
    |                                                     `- error: cannot find type 'JFloat' in scope
310 |         lhs = lhs + rhs
311 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:474:58: error: cannot find 'JFloat' in scope
472 |         }
473 |
474 |         return reduce(into: .zero) { $0 += $1.vector } / JFloat(count)
    |                                                          `- error: cannot find 'JFloat' in scope
475 |     }
476 | }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:208:60: error: cannot find type 'JFloat' in scope
206 |     /// See `Vector3.dot`
207 |     @inlinable
208 |     static public func • (lhs: Vector3, rhs: Vector3) -> JFloat {
    |                                                          `- error: cannot find type 'JFloat' in scope
209 |         return lhs.dot(rhs)
210 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:27:24: error: cannot find type 'JFloat' in scope
 25 |     /// Returns the squared length of this Vector3
 26 |     @inlinable
 27 |     public var length: JFloat {
    |                        `- error: cannot find type 'JFloat' in scope
 28 |         return x * x + y * y + z * z
 29 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:34:27: error: cannot find type 'JFloat' in scope
 32 |     /// Vector3
 33 |     @inlinable
 34 |     public var magnitude: JFloat {
    |                           `- error: cannot find type 'JFloat' in scope
 35 |         return sqrt(length)
 36 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:105:46: error: cannot find type 'JFloat' in scope
103 |     /// Returns the distance between this Vector3 and another Vector3
104 |     @inlinable
105 |     public func distance(to vec: Vector3) -> JFloat {
    |                                              `- error: cannot find type 'JFloat' in scope
106 |         let d = self - vec
107 |
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:113:53: error: cannot find type 'JFloat' in scope
111 |     /// Returns the distance squared between this Vector3 and another Vector3
112 |     @inlinable
113 |     public func distanceSquared(to vec: Vector3) -> JFloat {
    |                                                     `- error: cannot find type 'JFloat' in scope
114 |         let d = self - vec
115 |
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:4:15: error: type 'Vector3' does not conform to protocol 'Encodable'
  2 |
  3 | /// Represents a 2D vector
  4 | public struct Vector3: Equatable, CustomStringConvertible, Codable {
    |               `- error: type 'Vector3' does not conform to protocol 'Encodable'
  5 |
  6 |     /// A zeroed-value Vector3
    :
 15 |
 16 |     /// The JFloat representation of this vector's x axis
 17 |     public var x: JFloat
    |                `- note: cannot automatically synthesize 'Encodable' because 'JFloat' does not conform to 'Encodable'
 18 |
 19 |     /// The JFloat representation of this vector's y axis
 20 |     public var y: JFloat
    |                `- note: cannot automatically synthesize 'Encodable' because 'JFloat' does not conform to 'Encodable'
 21 |
 22 |     /// The JFloat representation of this vector's z axis
 23 |     public var z: JFloat
    |                `- note: cannot automatically synthesize 'Encodable' because 'JFloat' does not conform to 'Encodable'
 24 |
 25 |     /// Returns the squared length of this Vector3
Swift.Encodable.encode:2:6: note: protocol requires function 'encode(to:)' with type 'Encodable'
1 | protocol Encodable {
2 | func encode(to encoder: any Encoder) throws}
  |      `- note: protocol requires function 'encode(to:)' with type 'Encodable'
3 |
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:274:46: error: cannot find type 'JFloat' in scope
272 |
273 |     @inlinable
274 |     static public func % (lhs: Vector3, rhs: JFloat) -> Vector3 {
    |                                              `- error: cannot find type 'JFloat' in scope
275 |         return Vector3(
276 |             x: lhs.x.truncatingRemainder(dividingBy: rhs),
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:313:53: error: cannot find type 'JFloat' in scope
311 |     }
312 |     @inlinable
313 |     static public func -= (lhs: inout Vector3, rhs: JFloat) {
    |                                                     `- error: cannot find type 'JFloat' in scope
314 |         lhs = lhs - rhs
315 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:321:53: error: cannot find type 'JFloat' in scope
319 |     }
320 |     @inlinable
321 |     static public func /= (lhs: inout Vector3, rhs: JFloat) {
    |                                                     `- error: cannot find type 'JFloat' in scope
322 |         lhs = lhs / rhs
323 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:343:32: error: cannot find type 'JFloat' in scope
341 |     /// - Returns: A vector that lies within the line created by the two vectors.
342 |     @inlinable
343 |     public func ratio(_ ratio: JFloat, to other: Vector3) -> Vector3 {
    |                                `- error: cannot find type 'JFloat' in scope
344 |         return self + (other - self) * ratio
345 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:60:18: error: cannot find 'JFloat' in scope
 58 |     @inlinable
 59 |     public init(x: Int, y: Int, z: Int) {
 60 |         self.x = JFloat(x)
    |                  `- error: cannot find 'JFloat' in scope
 61 |         self.y = JFloat(y)
 62 |         self.z = JFloat(z)
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:61:18: error: cannot find 'JFloat' in scope
 59 |     public init(x: Int, y: Int, z: Int) {
 60 |         self.x = JFloat(x)
 61 |         self.y = JFloat(y)
    |                  `- error: cannot find 'JFloat' in scope
 62 |         self.z = JFloat(z)
 63 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:62:18: error: cannot find 'JFloat' in scope
 60 |         self.x = JFloat(x)
 61 |         self.y = JFloat(y)
 62 |         self.z = JFloat(z)
    |                  `- error: cannot find 'JFloat' in scope
 63 |     }
 64 |
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:68:18: error: cannot find 'JFloat' in scope
 66 |     @inlinable
 67 |     public init(x: Float, y: Float, z: Float) {
 68 |         self.x = JFloat(x)
    |                  `- error: cannot find 'JFloat' in scope
 69 |         self.y = JFloat(y)
 70 |         self.z = JFloat(z)
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:69:18: error: cannot find 'JFloat' in scope
 67 |     public init(x: Float, y: Float, z: Float) {
 68 |         self.x = JFloat(x)
 69 |         self.y = JFloat(y)
    |                  `- error: cannot find 'JFloat' in scope
 70 |         self.z = JFloat(z)
 71 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:70:18: error: cannot find 'JFloat' in scope
 68 |         self.x = JFloat(x)
 69 |         self.y = JFloat(y)
 70 |         self.z = JFloat(z)
    |                  `- error: cannot find 'JFloat' in scope
 71 |     }
 72 |
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:76:18: error: cannot find 'JFloat' in scope
 74 |     @inlinable
 75 |     public init(x: Double, y: Double, z: Double) {
 76 |         self.x = JFloat(x)
    |                  `- error: cannot find 'JFloat' in scope
 77 |         self.y = JFloat(y)
 78 |         self.z = JFloat(z)
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:77:18: error: cannot find 'JFloat' in scope
 75 |     public init(x: Double, y: Double, z: Double) {
 76 |         self.x = JFloat(x)
 77 |         self.y = JFloat(y)
    |                  `- error: cannot find 'JFloat' in scope
 78 |         self.z = JFloat(z)
 79 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:78:18: error: cannot find 'JFloat' in scope
 76 |         self.x = JFloat(x)
 77 |         self.y = JFloat(y)
 78 |         self.z = JFloat(z)
    |                  `- error: cannot find 'JFloat' in scope
 79 |     }
 80 |
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:359:51: error: cannot find 'JFloat' in scope
357 |         }
358 |
359 |         return reduce(into: .zero) { $0 += $1 } / JFloat(count)
    |                                                   `- error: cannot find 'JFloat' in scope
360 |     }
361 | }
/host/spi-builder-workspace/Sources/InternalSpring.swift:44:26: error: cannot find type 'JFloat' in scope
 42 |     /// Rest distance of the spring, or the distance the spring tries to
 43 |     /// maintain
 44 |     public var distance: JFloat {
    |                          `- error: cannot find type 'JFloat' in scope
 45 |         get {
 46 |             return restDistance.maximumDistance
/host/spi-builder-workspace/Sources/InternalSpring.swift:65:29: error: cannot find type 'JFloat' in scope
 63 |
 64 |     /// The spring coefficient
 65 |     public var coefficient: JFloat = 0
    |                             `- error: cannot find type 'JFloat' in scope
 66 |
 67 |     /// The spring damping
/host/spi-builder-workspace/Sources/InternalSpring.swift:68:25: error: cannot find type 'JFloat' in scope
 66 |
 67 |     /// The spring damping
 68 |     public var damping: JFloat = 0
    |                         `- error: cannot find type 'JFloat' in scope
 69 |
 70 |     public init(
/host/spi-builder-workspace/Sources/InternalSpring.swift:74:20: error: cannot find type 'JFloat' in scope
 72 |         _ pmB: Int,
 73 |         _ distance: RestDistance = 0,
 74 |         _ springK: JFloat,
    |                    `- error: cannot find type 'JFloat' in scope
 75 |         _ springD: JFloat,
 76 |         _ plasticity: SpringPlasticity? = nil
/host/spi-builder-workspace/Sources/InternalSpring.swift:75:20: error: cannot find type 'JFloat' in scope
 73 |         _ distance: RestDistance = 0,
 74 |         _ springK: JFloat,
 75 |         _ springD: JFloat,
    |                    `- error: cannot find type 'JFloat' in scope
 76 |         _ plasticity: SpringPlasticity? = nil
 77 |     ) {
/host/spi-builder-workspace/Sources/InternalSpring.swift:107:53: error: cannot find type 'JFloat' in scope
105 |     /// - Parameters:
106 |     ///   - distance: The current distance between the points
107 |     public mutating func updatePlasticity(distance: JFloat) {
    |                                                     `- error: cannot find type 'JFloat' in scope
108 |         guard let plasticity = plasticity else {
109 |             return
/host/spi-builder-workspace/Sources/InternalSpring.swift:137:28: error: cannot find type 'JFloat' in scope
135 |     /// Ratio (of resting distance vs actual length) before plasticity starts
136 |     /// to change the resting length of the spring, deforming it permanently.
137 |     public var yieldRatio: JFloat = 0.3
    |                            `- error: cannot find type 'JFloat' in scope
138 |
139 |     /// Plasticity rate for the spring.
/host/spi-builder-workspace/Sources/InternalSpring.swift:153:22: error: cannot find type 'JFloat' in scope
151 |     /// the resulting `R` would be `R = 10 + (0.5 * (15 - 10 - (0.3 * 10)))` ->
152 |     /// `R = 10 + 1` -> `R = 11`.
153 |     public var rate: JFloat = 0.5
    |                      `- error: cannot find type 'JFloat' in scope
154 |
155 |     /// A factor limit at which the plasticity stops affecting the rest length
/host/spi-builder-workspace/Sources/InternalSpring.swift:161:23: error: cannot find type 'JFloat' in scope
159 |     /// the initial length), or `R < IL / limit`, the plasticity does not
160 |     /// take effect.
161 |     public var limit: JFloat = 2
    |                       `- error: cannot find type 'JFloat' in scope
162 |
163 |     public init(yieldRatio: JFloat = 0.3, rate: JFloat = 0.5, limit: JFloat = 2) {
/host/spi-builder-workspace/Sources/RestDistance.swift:15:16: error: cannot find type 'JFloat' in scope
 13 |
 14 |     /// Fixed distance
 15 |     case fixed(JFloat)
    |                `- error: cannot find type 'JFloat' in scope
 16 |
 17 |     /// Distance is ranged between a minimum and maximum value
/host/spi-builder-workspace/Sources/RestDistance.swift:18:22: error: cannot find type 'JFloat' in scope
 16 |
 17 |     /// Distance is ranged between a minimum and maximum value
 18 |     case ranged(min: JFloat, max: JFloat)
    |                      `- error: cannot find type 'JFloat' in scope
 19 |
 20 |     /// Returns the minimum distance for this rest distance.
/host/spi-builder-workspace/Sources/RestDistance.swift:18:35: error: cannot find type 'JFloat' in scope
 16 |
 17 |     /// Distance is ranged between a minimum and maximum value
 18 |     case ranged(min: JFloat, max: JFloat)
    |                                   `- error: cannot find type 'JFloat' in scope
 19 |
 20 |     /// Returns the minimum distance for this rest distance.
/host/spi-builder-workspace/Sources/InternalSpring.swift:11:15: error: type 'InternalSpring' does not conform to protocol 'Encodable'
  9 | /// Represents an internal spring inside a soft body object, and keeps points
 10 | /// close together
 11 | public struct InternalSpring: Codable {
    |               `- error: type 'InternalSpring' does not conform to protocol 'Encodable'
 12 |
 13 |     /// First point-mass of the spring.
    :
 63 |
 64 |     /// The spring coefficient
 65 |     public var coefficient: JFloat = 0
    |                `- note: cannot automatically synthesize 'Encodable' because 'JFloat' does not conform to 'Encodable'
 66 |
 67 |     /// The spring damping
 68 |     public var damping: JFloat = 0
    |                `- note: cannot automatically synthesize 'Encodable' because 'JFloat' does not conform to 'Encodable'
 69 |
 70 |     public init(
Swift.Encodable.encode:2:6: note: protocol requires function 'encode(to:)' with type 'Encodable'
1 | protocol Encodable {
2 | func encode(to encoder: any Encoder) throws}
  |      `- note: protocol requires function 'encode(to:)' with type 'Encodable'
3 |
/host/spi-builder-workspace/Sources/InternalSpring.swift:134:15: error: type 'SpringPlasticity' does not conform to protocol 'Decodable'
132 | /// Plasticity permanently affects a spring's rest length by modifying it
133 | /// when its length is stretched beyond a certain limit.
134 | public struct SpringPlasticity: Codable {
    |               `- error: type 'SpringPlasticity' does not conform to protocol 'Decodable'
135 |     /// Ratio (of resting distance vs actual length) before plasticity starts
136 |     /// to change the resting length of the spring, deforming it permanently.
137 |     public var yieldRatio: JFloat = 0.3
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
138 |
139 |     /// Plasticity rate for the spring.
    :
151 |     /// the resulting `R` would be `R = 10 + (0.5 * (15 - 10 - (0.3 * 10)))` ->
152 |     /// `R = 10 + 1` -> `R = 11`.
153 |     public var rate: JFloat = 0.5
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
154 |
155 |     /// A factor limit at which the plasticity stops affecting the rest length
    :
159 |     /// the initial length), or `R < IL / limit`, the plasticity does not
160 |     /// take effect.
161 |     public var limit: JFloat = 2
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
162 |
163 |     public init(yieldRatio: JFloat = 0.3, rate: JFloat = 0.5, limit: JFloat = 2) {
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/InternalSpring.swift:163:29: error: cannot find type 'JFloat' in scope
161 |     public var limit: JFloat = 2
162 |
163 |     public init(yieldRatio: JFloat = 0.3, rate: JFloat = 0.5, limit: JFloat = 2) {
    |                             `- error: cannot find type 'JFloat' in scope
164 |         self.yieldRatio = yieldRatio
165 |         self.rate = rate
/host/spi-builder-workspace/Sources/InternalSpring.swift:163:49: error: cannot find type 'JFloat' in scope
161 |     public var limit: JFloat = 2
162 |
163 |     public init(yieldRatio: JFloat = 0.3, rate: JFloat = 0.5, limit: JFloat = 2) {
    |                                                 `- error: cannot find type 'JFloat' in scope
164 |         self.yieldRatio = yieldRatio
165 |         self.rate = rate
/host/spi-builder-workspace/Sources/InternalSpring.swift:163:70: error: cannot find type 'JFloat' in scope
161 |     public var limit: JFloat = 2
162 |
163 |     public init(yieldRatio: JFloat = 0.3, rate: JFloat = 0.5, limit: JFloat = 2) {
    |                                                                      `- error: cannot find type 'JFloat' in scope
164 |         self.yieldRatio = yieldRatio
165 |         self.rate = rate
/host/spi-builder-workspace/Sources/InternalSpring.swift:134:15: error: type 'SpringPlasticity' does not conform to protocol 'Encodable'
132 | /// Plasticity permanently affects a spring's rest length by modifying it
133 | /// when its length is stretched beyond a certain limit.
134 | public struct SpringPlasticity: Codable {
    |               `- error: type 'SpringPlasticity' does not conform to protocol 'Encodable'
135 |     /// Ratio (of resting distance vs actual length) before plasticity starts
136 |     /// to change the resting length of the spring, deforming it permanently.
137 |     public var yieldRatio: JFloat = 0.3
    |                `- note: cannot automatically synthesize 'Encodable' because 'JFloat' does not conform to 'Encodable'
138 |
139 |     /// Plasticity rate for the spring.
    :
151 |     /// the resulting `R` would be `R = 10 + (0.5 * (15 - 10 - (0.3 * 10)))` ->
152 |     /// `R = 10 + 1` -> `R = 11`.
153 |     public var rate: JFloat = 0.5
    |                `- note: cannot automatically synthesize 'Encodable' because 'JFloat' does not conform to 'Encodable'
154 |
155 |     /// A factor limit at which the plasticity stops affecting the rest length
    :
159 |     /// the initial length), or `R < IL / limit`, the plasticity does not
160 |     /// take effect.
161 |     public var limit: JFloat = 2
    |                `- note: cannot automatically synthesize 'Encodable' because 'JFloat' does not conform to 'Encodable'
162 |
163 |     public init(yieldRatio: JFloat = 0.3, rate: JFloat = 0.5, limit: JFloat = 2) {
Swift.Encodable.encode:2:6: note: protocol requires function 'encode(to:)' with type 'Encodable'
1 | protocol Encodable {
2 | func encode(to encoder: any Encoder) throws}
  |      `- note: protocol requires function 'encode(to:)' with type 'Encodable'
3 |
/host/spi-builder-workspace/Sources/JointLinks/BodyJointLink.swift:32:20: error: cannot find type 'JFloat' in scope
30 |
31 |     /// Gets the total mass of the subject of this joint link
32 |     open var mass: JFloat {
   |                    `- error: cannot find type 'JFloat' in scope
33 |         return body.pointMasses.reduce(0) { $0 + $1.mass }
34 |     }
/host/spi-builder-workspace/Sources/JointLinks/EdgeJointLink.swift:21:25: error: cannot find type 'JFloat' in scope
19 |     /// Specifying either 0 or 1 makes this edge joint link behave essentially
20 |     /// like a `PointJointLink`
21 |     open var edgeRatio: JFloat
   |                         `- error: cannot find type 'JFloat' in scope
22 |
23 |     /// Gets the body that this joint link is linked to
/host/spi-builder-workspace/Sources/JointLinks/EdgeJointLink.swift:55:20: error: cannot find type 'JFloat' in scope
53 |
54 |     /// Gets the total mass of the subject of this joint link
55 |     open var mass: JFloat {
   |                    `- error: cannot find type 'JFloat' in scope
56 |         let pm1 = body.pointMasses[_pointMass1]
57 |         let pm2 = body.pointMasses[_pointMass2]
/host/spi-builder-workspace/Sources/JointLinks/EdgeJointLink.swift:72:56: error: cannot find type 'JFloat' in scope
70 |
71 |     /// Inits a new edge joint link with the specified parameters
72 |     public init(body: Body, edgeIndex: Int, edgeRatio: JFloat = 0.5) {
   |                                                        `- error: cannot find type 'JFloat' in scope
73 |         self.body = body
74 |         _pointMass1 = edgeIndex % body.pointMasses.count
/host/spi-builder-workspace/Sources/JointLinks/PointJointLink.swift:35:20: error: cannot find type 'JFloat' in scope
33 |
34 |     /// Gets the total mass of the subject of this joint link
35 |     open var mass: JFloat {
   |                    `- error: cannot find type 'JFloat' in scope
36 |         return body.pointMasses[_pointMass].mass
37 |     }
/host/spi-builder-workspace/Sources/JointLinks/ShapeJointLink.swift:59:20: error: cannot find type 'JFloat' in scope
 57 |
 58 |     /// Gets the total mass of the subject of this joint link
 59 |     open var mass: JFloat {
    |                    `- error: cannot find type 'JFloat' in scope
 60 |         var sum: JFloat = 0
 61 |
/host/spi-builder-workspace/Sources/JointLinks/ShapeJointLink.swift:116:33: error: cannot find type 'JFloat' in scope
114 |     /// Returns the average angle of the vertices of this ShapeJointLink, based
115 |     /// on the body's original shape's vertices
116 |     fileprivate func angle() -> JFloat {
    |                                 `- error: cannot find type 'JFloat' in scope
117 |         var angle: JFloat = 0
118 |
/host/spi-builder-workspace/Sources/JointLinks/WeightedShapeJointLink.swift:63:20: error: cannot find type 'JFloat' in scope
 61 |
 62 |     /// Gets the total mass of the subject of this joint link
 63 |     open var mass: JFloat {
    |                    `- error: cannot find type 'JFloat' in scope
 64 |         var sum: JFloat = 0
 65 |
/host/spi-builder-workspace/Sources/JointLinks/WeightedShapeJointLink.swift:123:33: error: cannot find type 'JFloat' in scope
121 |     /// Returns the average angle of the vertices of this ShapeJointLink, based
122 |     /// on the body's original shape's vertices
123 |     fileprivate func angle() -> JFloat {
    |                                 `- error: cannot find type 'JFloat' in scope
124 |         var angle: JFloat = 0
125 |
/host/spi-builder-workspace/Sources/JointLinks/WeightedShapeJointLink.swift:171:28: error: cannot find type 'JFloat' in scope
169 |         /// A weighted value applied to the averaging function when considering
170 |         /// this point mass.
171 |         public var weight: JFloat
    |                            `- error: cannot find type 'JFloat' in scope
172 |
173 |         public init(index: Int, weight: JFloat) {
/host/spi-builder-workspace/Sources/JointLinks/WeightedShapeJointLink.swift:173:41: error: cannot find type 'JFloat' in scope
171 |         public var weight: JFloat
172 |
173 |         public init(index: Int, weight: JFloat) {
    |                                         `- error: cannot find type 'JFloat' in scope
174 |             self.index = index
175 |             self.weight = weight
/host/spi-builder-workspace/Sources/MaterialPair.swift:17:28: error: cannot find type 'JFloat' in scope
15 |
16 |     /// The elasticity of the point mass when bouncing off the bodies
17 |     public var elasticity: JFloat = 0.0
   |                            `- error: cannot find type 'JFloat' in scope
18 |
19 |     /// The relative friction between the two bodies
/host/spi-builder-workspace/Sources/MaterialPair.swift:20:26: error: cannot find type 'JFloat' in scope
18 |
19 |     /// The relative friction between the two bodies
20 |     public var friction: JFloat = 1.0
   |                          `- error: cannot find type 'JFloat' in scope
21 |
22 |     /// A function to call and utilize as a collision filter when figuring out
/host/spi-builder-workspace/Sources/MaterialPair.swift:24:86: error: cannot find type 'JFloat' in scope
22 |     /// A function to call and utilize as a collision filter when figuring out
23 |     /// whether the two bodies should collide
24 |     public var collisionFilter: (_ info: BodyCollisionInformation, _ normalVelocity: JFloat) -> (Bool)
   |                                                                                      `- error: cannot find type 'JFloat' in scope
25 |
26 |     public init() {
/host/spi-builder-workspace/Sources/MaterialPair.swift:39:21: error: cannot find type 'JFloat' in scope
37 | public func defaultCollisionFilter(
38 |     _ info: BodyCollisionInformation,
39 |     normalVelocity: JFloat
   |                     `- error: cannot find type 'JFloat' in scope
40 | ) -> Bool {
41 |     return true
/host/spi-builder-workspace/Sources/PhysicsUtils.swift:14:15: error: cannot find type 'JFloat' in scope
12 |     posA: Vector2, velA: Vector2,
13 |     posB: Vector2, velB: Vector2,
14 |     distance: JFloat,
   |               `- error: cannot find type 'JFloat' in scope
15 |     springK: JFloat,
16 |     springD: JFloat
/host/spi-builder-workspace/Sources/PhysicsUtils.swift:15:14: error: cannot find type 'JFloat' in scope
13 |     posB: Vector2, velB: Vector2,
14 |     distance: JFloat,
15 |     springK: JFloat,
   |              `- error: cannot find type 'JFloat' in scope
16 |     springD: JFloat
17 | ) -> Vector2 {
/host/spi-builder-workspace/Sources/PhysicsUtils.swift:16:14: error: cannot find type 'JFloat' in scope
14 |     distance: JFloat,
15 |     springK: JFloat,
16 |     springD: JFloat
   |              `- error: cannot find type 'JFloat' in scope
17 | ) -> Vector2 {
18 |
/host/spi-builder-workspace/Sources/PhysicsUtils.swift:47:15: error: cannot find type 'JFloat' in scope
45 | @inlinable
46 | public func calculatePlasticity(
47 |     distance: JFloat,
   |               `- error: cannot find type 'JFloat' in scope
48 |     restDistance: RestDistance,
49 |     initialRestDistance: RestDistance,
/host/spi-builder-workspace/Sources/RestDistance.swift:79:32: error: cannot find type 'JFloat' in scope
 77 |     /// If the current value is .fixed, this does an exact equality
 78 |     /// operation, if .ranged, it performs `value >= min && value <= max`
 79 |     public func inRange(value: JFloat) -> Bool {
    |                                `- error: cannot find type 'JFloat' in scope
 80 |         switch(self) {
 81 |         case .fixed(let d):
/host/spi-builder-workspace/Sources/RestDistance.swift:50:33: error: cannot find type 'JFloat' in scope
 48 |     /// Setting this value updates the `.fixed` value, or in case of `.ranged`
 49 |     /// it updates the maximum distance value.
 50 |     public var maximumDistance: JFloat {
    |                                 `- error: cannot find type 'JFloat' in scope
 51 |         get {
 52 |             switch(self) {
/host/spi-builder-workspace/Sources/RestDistance.swift:26:33: error: cannot find type 'JFloat' in scope
 24 |     /// Setting this value updates the `.fixed` value, or in case of `.ranged`
 25 |     /// it updates the minimum distance value.
 26 |     public var minimumDistance: JFloat {
    |                                 `- error: cannot find type 'JFloat' in scope
 27 |         get {
 28 |             switch(self) {
/host/spi-builder-workspace/Sources/PointMass.swift:16:22: error: cannot find type 'JFloat' in scope
14 |     /// Values `< 0.2` usually cause inconsistency and instability in the
15 |     /// simulation
16 |     public var mass: JFloat = 1
   |                      `- error: cannot find type 'JFloat' in scope
17 |
18 |     /// The global position of the point, in world coordinates
/host/spi-builder-workspace/Sources/PointMass.swift:10:15: error: type 'PointMass' does not conform to protocol 'Decodable'
 8 |
 9 | /// Specifies a point mass that composes a body
10 | public struct PointMass: Codable, VectorRepresentable {
   |               `- error: type 'PointMass' does not conform to protocol 'Decodable'
11 |     /// The mass of this point mass.
12 |     /// Leave this value always `> 0` to maintain consistency on the simulation,
   :
14 |     /// Values `< 0.2` usually cause inconsistency and instability in the
15 |     /// simulation
16 |     public var mass: JFloat = 1
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
17 |
18 |     /// The global position of the point, in world coordinates
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/PointMass.swift:35:23: error: cannot find type 'JFloat' in scope
33 |     }
34 |
35 |     public init(mass: JFloat = 0, position: Vector2 = Vector2.zero) {
   |                       `- error: cannot find type 'JFloat' in scope
36 |         self.mass = mass
37 |         self.position = position
/host/spi-builder-workspace/Sources/PointMass.swift:45:47: error: cannot find type 'JFloat' in scope
43 |     /// seconds
44 |     @inlinable
45 |     public mutating func integrate(_ elapsed: JFloat) {
   |                                               `- error: cannot find type 'JFloat' in scope
46 |         if mass.isFinite {
47 |             let elapsedMass = elapsed / mass
/host/spi-builder-workspace/Sources/PointMass.swift:10:15: error: type 'PointMass' does not conform to protocol 'Encodable'
 8 |
 9 | /// Specifies a point mass that composes a body
10 | public struct PointMass: Codable, VectorRepresentable {
   |               `- error: type 'PointMass' does not conform to protocol 'Encodable'
11 |     /// The mass of this point mass.
12 |     /// Leave this value always `> 0` to maintain consistency on the simulation,
   :
14 |     /// Values `< 0.2` usually cause inconsistency and instability in the
15 |     /// simulation
16 |     public var mass: JFloat = 1
   |                `- note: cannot automatically synthesize 'Encodable' because 'JFloat' does not conform to 'Encodable'
17 |
18 |     /// The global position of the point, in world coordinates
Swift.Encodable.encode:2:6: note: protocol requires function 'encode(to:)' with type 'Encodable'
1 | protocol Encodable {
2 | func encode(to encoder: any Encoder) throws}
  |      `- note: protocol requires function 'encode(to:)' with type 'Encodable'
3 |
/host/spi-builder-workspace/Sources/PointMass.swift:75:72: error: cannot find 'JFloat' in scope
73 |         of pointMasses: T
74 |     ) -> Vector2 where T.Iterator.Element == PointMass {
75 |         return pointMasses.reduce(Vector2.zero) { $0 + $1.velocity } / JFloat(pointMasses.count)
   |                                                                        `- error: cannot find 'JFloat' in scope
76 |     }
77 | }
/host/spi-builder-workspace/Sources/RenderingSettings.swift:51:16: error: cannot find type 'JFloat' in scope
49 | /// Sets the camera position and scale from scalar values
50 | public func setCamera(
51 |     positionX: JFloat,
   |                `- error: cannot find type 'JFloat' in scope
52 |     positionY: JFloat,
53 |     scaleX: JFloat,
/host/spi-builder-workspace/Sources/RenderingSettings.swift:52:16: error: cannot find type 'JFloat' in scope
50 | public func setCamera(
51 |     positionX: JFloat,
52 |     positionY: JFloat,
   |                `- error: cannot find type 'JFloat' in scope
53 |     scaleX: JFloat,
54 |     scaleY: JFloat
/host/spi-builder-workspace/Sources/RenderingSettings.swift:53:13: error: cannot find type 'JFloat' in scope
51 |     positionX: JFloat,
52 |     positionY: JFloat,
53 |     scaleX: JFloat,
   |             `- error: cannot find type 'JFloat' in scope
54 |     scaleY: JFloat
55 | ) {
/host/spi-builder-workspace/Sources/RenderingSettings.swift:54:13: error: cannot find type 'JFloat' in scope
52 |     positionY: JFloat,
53 |     scaleX: JFloat,
54 |     scaleY: JFloat
   |             `- error: cannot find type 'JFloat' in scope
55 | ) {
56 |     renderingOffset.x = positionX
/host/spi-builder-workspace/Sources/RestDistance.swift:92:41: error: cannot find type 'JFloat' in scope
 90 |     /// distance it represents, if .ranged, it performs
 91 |     /// `max(minValue, min(maxValue, value))`
 92 |     public func clamp(value: JFloat) -> JFloat {
    |                                         `- error: cannot find type 'JFloat' in scope
 93 |         switch(self) {
 94 |         case .fixed(let d):
/host/spi-builder-workspace/Sources/RestDistance.swift:92:30: error: cannot find type 'JFloat' in scope
 90 |     /// distance it represents, if .ranged, it performs
 91 |     /// `max(minValue, min(maxValue, value))`
 92 |     public func clamp(value: JFloat) -> JFloat {
    |                              `- error: cannot find type 'JFloat' in scope
 93 |         switch(self) {
 94 |         case .fixed(let d):
/host/spi-builder-workspace/Sources/RestDistance.swift:143:23: error: cannot find type 'JFloat' in scope
141 |
142 | /// Helper operator for creating a rest distance
143 | public func <-> (lhs: JFloat, rhs: JFloat) -> RestDistance {
    |                       `- error: cannot find type 'JFloat' in scope
144 |     return .ranged(min: lhs, max: rhs)
145 | }
/host/spi-builder-workspace/Sources/RestDistance.swift:143:36: error: cannot find type 'JFloat' in scope
141 |
142 | /// Helper operator for creating a rest distance
143 | public func <-> (lhs: JFloat, rhs: JFloat) -> RestDistance {
    |                                    `- error: cannot find type 'JFloat' in scope
144 |     return .ranged(min: lhs, max: rhs)
145 | }
/host/spi-builder-workspace/Sources/SpringBodyJoint.swift:39:22: error: cannot find type 'JFloat' in scope
 37 |         link1: JointLink,
 38 |         link2: JointLink,
 39 |         coefficient: JFloat,
    |                      `- error: cannot find type 'JFloat' in scope
 40 |         damping: JFloat,
 41 |         distance: RestDistance? = nil
/host/spi-builder-workspace/Sources/SpringBodyJoint.swift:40:18: error: cannot find type 'JFloat' in scope
 38 |         link2: JointLink,
 39 |         coefficient: JFloat,
 40 |         damping: JFloat,
    |                  `- error: cannot find type 'JFloat' in scope
 41 |         distance: RestDistance? = nil
 42 |     ) {
/host/spi-builder-workspace/Sources/SpringBodyJoint.swift:13:35: error: cannot find type 'JFloat' in scope
 11 |
 12 |     /// The spring coefficient for this spring body joint
 13 |     public var springCoefficient: JFloat
    |                                   `- error: cannot find type 'JFloat' in scope
 14 |
 15 |     /// The spring damping for this spring body joint
/host/spi-builder-workspace/Sources/SpringBodyJoint.swift:16:31: error: cannot find type 'JFloat' in scope
 14 |
 15 |     /// The spring damping for this spring body joint
 16 |     public var springDamping: JFloat
    |                               `- error: cannot find type 'JFloat' in scope
 17 |
 18 |     /// Optional plasticity information.
/host/spi-builder-workspace/Sources/SpringBodyJoint.swift:59:38: error: cannot find type 'JFloat' in scope
 57 |     ///
 58 |     /// - Parameter dt: The delta time to update the resolve on
 59 |     open override func resolve(_ dt: JFloat) {
    |                                      `- error: cannot find type 'JFloat' in scope
 60 |         if !enabled {
 61 |             return
/host/spi-builder-workspace/Sources/World.swift:22:32: error: cannot convert value of type 'Int' to expected argument type 'Vector2'
 20 |     fileprivate var worldGridStep = Vector2.zero {
 21 |         didSet {
 22 |             invWorldGridStep = 1 / worldGridStep
    |                                `- error: cannot convert value of type 'Int' to expected argument type 'Vector2'
 23 |         }
 24 |     }
/host/spi-builder-workspace/Sources/World.swift:28:20: error: cannot find 'JFloat' in scope
 26 |         didSet {
 27 |             subdivVec = Vector2(
 28 |                 x: JFloat(worldGridSubdivision),
    |                    `- error: cannot find 'JFloat' in scope
 29 |                 y: JFloat(worldGridSubdivision)
 30 |             )
/host/spi-builder-workspace/Sources/World.swift:29:20: error: cannot find 'JFloat' in scope
 27 |             subdivVec = Vector2(
 28 |                 x: JFloat(worldGridSubdivision),
 29 |                 y: JFloat(worldGridSubdivision)
    |                    `- error: cannot find 'JFloat' in scope
 30 |             )
 31 |         }
/host/spi-builder-workspace/Sources/World.swift:45:38: error: cannot find type 'JFloat' in scope
 43 |     /// destabilize the simulation.
 44 |     /// Usually 0.3 is a good default.
 45 |     public var penetrationThreshold: JFloat = 0.3
    |                                      `- error: cannot find type 'JFloat' in scope
 46 |
 47 |     /// Matrix of material pairs used during collision resolving
/host/spi-builder-workspace/Sources/World.swift:143:65: error: cannot find type 'JFloat' in scope
141 |
142 |     /// Sets the collision response variables for a pair of materials.
143 |     public func setMaterialPairData(_ a: Int, b: Int, friction: JFloat, elasticity: JFloat) {
    |                                                                 `- error: cannot find type 'JFloat' in scope
144 |         if a >= 0 && a < materialCount && b >= 0 && b < materialCount {
145 |             materialPairs[a][b].friction = friction
/host/spi-builder-workspace/Sources/World.swift:143:85: error: cannot find type 'JFloat' in scope
141 |
142 |     /// Sets the collision response variables for a pair of materials.
143 |     public func setMaterialPairData(_ a: Int, b: Int, friction: JFloat, elasticity: JFloat) {
    |                                                                                     `- error: cannot find type 'JFloat' in scope
144 |         if a >= 0 && a < materialCount && b >= 0 && b < materialCount {
145 |             materialPairs[a][b].friction = friction
/host/spi-builder-workspace/Sources/World.swift:154:110: error: cannot find type 'JFloat' in scope
152 |
153 |     /// Sets a user function to call when 2 bodies of the given materials collide.
154 |     public func setMaterialPairFilterCallback(_ a: Int, b: Int, filter: @escaping (BodyCollisionInformation, JFloat) -> (Bool)) {
    |                                                                                                              `- error: cannot find type 'JFloat' in scope
155 |         if a >= 0 && a < materialCount && b >= 0 && b < materialCount {
156 |             materialPairs[a][b].collisionFilter = filter
/host/spi-builder-workspace/Sources/World.swift:405:35: error: cannot find type 'JFloat' in scope
403 |     /// - Parameter elapsed: The elapsed time to update by, usually in 1/60ths
404 |     /// of a second.
405 |     public func update(_ elapsed: JFloat) {
    |                                   `- error: cannot find type 'JFloat' in scope
406 |         update(elapsed, withBodies: bodies, joints: joints)
407 |     }
/host/spi-builder-workspace/Sources/World.swift:411:20: error: cannot find type 'JFloat' in scope
409 |     /// Internal updating method
410 |     fileprivate func update(
411 |         _ elapsed: JFloat,
    |                    `- error: cannot find type 'JFloat' in scope
412 |         withBodies bodies: ContiguousArray<Body>,
413 |         joints: ContiguousArray<BodyJoint>
/host/spi-builder-workspace/Sources/World.swift:775:31: error: cannot find type 'JFloat' in scope
773 |     ///
774 |     /// - Precondition: `iterations` > 0
775 |     func relaxWorld(timestep: JFloat, iterations: Int = 100) {
    |                               `- error: cannot find type 'JFloat' in scope
776 |         relaxing = true
777 |
/host/spi-builder-workspace/Sources/World.swift:814:51: error: cannot find type 'JFloat' in scope
812 |     ///
813 |     /// - Precondition: `iterations` > 0
814 |     func relaxBodies(in bodies: [Body], timestep: JFloat, iterations: Int = 100) {
    |                                                   `- error: cannot find type 'JFloat' in scope
815 |         relaxing = true
816 |
Failed frontend command:
/usr/bin/swift-frontend -frontend -emit-module -experimental-skip-non-inlinable-function-bodies-without-types /host/spi-builder-workspace/Sources/Bitmask.swift /host/spi-builder-workspace/Sources/Body.swift /host/spi-builder-workspace/Sources/BodyCollisionInformation.swift /host/spi-builder-workspace/Sources/BodyComponent.swift /host/spi-builder-workspace/Sources/BodyEdge.swift /host/spi-builder-workspace/Sources/BodyJoint.swift /host/spi-builder-workspace/Sources/CollisionObserver.swift /host/spi-builder-workspace/Sources/Components/GravityComponent.swift /host/spi-builder-workspace/Sources/Components/PressureComponent.swift /host/spi-builder-workspace/Sources/Components/ShapeMatchComponent.swift /host/spi-builder-workspace/Sources/Components/SpringComponent.swift /host/spi-builder-workspace/Sources/Geometry/AABB.swift /host/spi-builder-workspace/Sources/Geometry/ClosedShape.swift /host/spi-builder-workspace/Sources/Geometry/GeomUtils.swift /host/spi-builder-workspace/Sources/Geometry/JFloat.swift /host/spi-builder-workspace/Sources/Geometry/Matrix3x3.swift /host/spi-builder-workspace/Sources/Geometry/Vector2.swift /host/spi-builder-workspace/Sources/Geometry/Vector3.swift /host/spi-builder-workspace/Sources/Geometry/VectorRepresentable.swift /host/spi-builder-workspace/Sources/InternalSpring.swift /host/spi-builder-workspace/Sources/JointLink.swift /host/spi-builder-workspace/Sources/JointLinks/BodyJointLink.swift /host/spi-builder-workspace/Sources/JointLinks/EdgeJointLink.swift /host/spi-builder-workspace/Sources/JointLinks/PointJointLink.swift /host/spi-builder-workspace/Sources/JointLinks/ShapeJointLink.swift /host/spi-builder-workspace/Sources/JointLinks/WeightedShapeJointLink.swift /host/spi-builder-workspace/Sources/MaterialPair.swift /host/spi-builder-workspace/Sources/PhysicsUtils.swift /host/spi-builder-workspace/Sources/PointMass.swift /host/spi-builder-workspace/Sources/RenderingSettings.swift /host/spi-builder-workspace/Sources/RestDistance.swift /host/spi-builder-workspace/Sources/SpringBodyJoint.swift /host/spi-builder-workspace/Sources/Utils.swift /host/spi-builder-workspace/Sources/World.swift -target wasm32-unknown-wasip1 -disable-objc-interop -sdk /root/.swiftpm/swift-sdks/swift-6.4.x-DEVELOPMENT-SNAPSHOT-2026-09-04-a_wasm.artifactbundle/swift-6.4.x-DEVELOPMENT-SNAPSHOT-2026-09-04-a_wasm/wasm32-unknown-wasip1/WASI.sdk -sysroot /root/.swiftpm/swift-sdks/swift-6.4.x-DEVELOPMENT-SNAPSHOT-2026-09-04-a_wasm.artifactbundle/swift-6.4.x-DEVELOPMENT-SNAPSHOT-2026-09-04-a_wasm/wasm32-unknown-wasip1/WASI.sdk -I /host/spi-builder-workspace/.build/out/Products/Debug-webassembly-wasm32 -module-cache-path /host/spi-builder-workspace/.build/out/ModuleCache.noindex -color-diagnostics -Xcc -fcolor-diagnostics -enable-testing -g -debug-info-format\=dwarf -dwarf-version\=4 -swift-version 5 -Onone -D SWIFT_PACKAGE -D DEBUG -D SWIFT_MODULE_RESOURCE_BUNDLE_UNAVAILABLE -D Xcode -serialize-debugging-options -enable-experimental-feature DebugDescriptionMacro -empty-abi-descriptor -external-plugin-path /usr/lib/swift/host/plugins/testing\#/usr/bin/swift-plugin-server -validate-clang-modules-once -clang-build-session-file /host/spi-builder-workspace/.build/out/ModuleCache.noindex/Session.modulevalidation -Xcc -working-directory -Xcc /host -resource-dir /root/.swiftpm/swift-sdks/swift-6.4.x-DEVELOPMENT-SNAPSHOT-2026-09-04-a_wasm.artifactbundle/swift-6.4.x-DEVELOPMENT-SNAPSHOT-2026-09-04-a_wasm/wasm32-unknown-wasip1/swift.xctoolchain/usr/lib/swift_static -use-static-resource-dir -enable-anonymous-context-mangled-names -file-compilation-dir /host -Xcc -resource-dir -Xcc /root/.swiftpm/swift-sdks/swift-6.4.x-DEVELOPMENT-SNAPSHOT-2026-09-04-a_wasm.artifactbundle/swift-6.4.x-DEVELOPMENT-SNAPSHOT-2026-09-04-a_wasm/wasm32-unknown-wasip1/swift.xctoolchain/usr/lib/swift_static/clang -Xcc -D_LIBCPP_HARDENING_MODE\=_LIBCPP_HARDENING_MODE_DEBUG -Xcc -fmodules-prune-interval\=86400 -Xcc -fmodules-prune-after\=345600 -Xcc -I/host/spi-builder-workspace/.build/out/Products/Debug-webassembly-wasm32/include -Xcc -I/host/spi-builder-workspace/.build/out/Intermediates.noindex/JelloSwift.build/Debug-webassembly-wasm32/JelloSwift-t.build/DerivedSources-normal/wasm32 -Xcc -I/host/spi-builder-workspace/.build/out/Intermediates.noindex/JelloSwift.build/Debug-webassembly-wasm32/JelloSwift-t.build/DerivedSources/wasm32 -Xcc -I/host/spi-builder-workspace/.build/out/Intermediates.noindex/JelloSwift.build/Debug-webassembly-wasm32/JelloSwift-t.build/DerivedSources -Xcc -DSWIFT_PACKAGE -Xcc -DDEBUG\=1 -no-auto-bridging-header-chaining -module-name JelloSwift -const-gather-protocols-file /host/spi-builder-workspace/.build/out/Intermediates.noindex/JelloSwift.build/Debug-webassembly-wasm32/JelloSwift-t.build/Objects-normal/wasm32/JelloSwift_const_extract_protocols.json -in-process-plugin-server-path /usr/lib/swift/host/libSwiftInProcPluginServer.so -plugin-path /usr/lib/swift/host/plugins -plugin-path /usr/local/lib/swift/host/plugins -emit-module-doc-path /host/spi-builder-workspace/.build/out/Intermediates.noindex/JelloSwift.build/Debug-webassembly-wasm32/JelloSwift-t.build/Objects-normal/wasm32/Modules/JelloSwift.swiftdoc -emit-module-source-info-path /host/spi-builder-workspace/.build/out/Intermediates.noindex/JelloSwift.build/Debug-webassembly-wasm32/JelloSwift-t.build/Objects-normal/wasm32/Modules/JelloSwift.swiftsourceinfo -emit-objc-header-path /host/spi-builder-workspace/.build/out/Intermediates.noindex/JelloSwift.build/Debug-webassembly-wasm32/JelloSwift-t.build/Objects-normal/wasm32/JelloSwift-Swift.h -serialize-diagnostics-path /host/spi-builder-workspace/.build/out/Intermediates.noindex/JelloSwift.build/Debug-webassembly-wasm32/JelloSwift-t.build/Objects-normal/wasm32/JelloSwift-primary-emit-module.dia -emit-dependencies-path /host/spi-builder-workspace/.build/out/Intermediates.noindex/JelloSwift.build/Debug-webassembly-wasm32/JelloSwift-t.build/Objects-normal/wasm32/JelloSwift-primary-emit-module.d -parse-as-library -o /host/spi-builder-workspace/.build/out/Intermediates.noindex/JelloSwift.build/Debug-webassembly-wasm32/JelloSwift-t.build/Objects-normal/wasm32/Modules/JelloSwift.swiftmodule
error: Build failed
BUILD FAILURE 6.4 wasm