The Swift Package Index logo.Swift Package Index

Build Information

Failed to build SyncField, reference v0.13.0 (40deed), with Swift 6.2 for Android on 10 Aug 2026 20:30:30 UTC.

Build Command

bash -c docker run --pull=always --rm -v "checkouts-53886770-2":/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:android-6.2-latest swift build --swift-sdk aarch64-unknown-linux-android28 2>&1

Build Log

========================================
RunAll
========================================
Builder version: 729ceb5fcd9493dc13ee340bc4f0908bd201f85d
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/OpenGraphLabs/syncfield-swift.git
Reference: v0.13.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/OpenGraphLabs/syncfield-swift
 * tag               v0.13.0    -> FETCH_HEAD
HEAD is now at 40deed1 feat: add atomic long-horizon segment rotation
Cloned https://github.com/OpenGraphLabs/syncfield-swift.git
Revision (git rev-parse @):
40deed1806f5e2b4cf4a4013c0ec6eed679197f3
SUCCESS checkout https://github.com/OpenGraphLabs/syncfield-swift.git at v0.13.0
========================================
Build
========================================
Selected platform:         android
Swift version:             6.2
Building package at path:  $PWD
https://github.com/OpenGraphLabs/syncfield-swift.git
Running build ...
bash -c docker run --pull=always --rm -v "checkouts-53886770-2":/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:android-6.2-latest swift build --swift-sdk aarch64-unknown-linux-android28 2>&1
android-6.2-latest: Pulling from saguaro1/spi-images
Digest: sha256:573917aa137cc6f081a4f3d2a0330bac24553e9cd713cd758adf65046f5c6b90
Status: Image is up to date for registry.gitlab.com/saguaro1/spi-images:android-6.2-latest
warning: 'spi-builder-workspace': found 1 file(s) which are unhandled; explicitly declare them as resources or exclude from the target
    /host/spi-builder-workspace/Sources/SyncField/Streams/Tactile/AGENTS.md
Building for debugging...
[0/6] Write sources
[0/6] Copying PrivacyInfo.xcprivacy
[1/6] Write sources
[4/6] Copying PrivacyInfo.xcprivacy
[5/6] Write swift-version--11D90AFD9DD3AB2.txt
error: emit-module command failed with exit code 1 (use -v to see invocation)
[7/55] Emitting module SyncField
/host/spi-builder-workspace/Sources/SyncField/SessionClock.swift:10:27: error: cannot find type 'mach_timebase_info_data_t' in scope
 8 | /// plus a wall-clock anchor captured once at session start.
 9 | public final class SessionClock: @unchecked Sendable {
10 |     private let timebase: mach_timebase_info_data_t
   |                           `- error: cannot find type 'mach_timebase_info_data_t' in scope
11 |
12 |     public init() {
/host/spi-builder-workspace/Sources/SyncField/Writers/SensorWriter.swift:9:29: warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
 7 |
 8 |     public init(url: URL) throws {
 9 |         FileManager.default.createFile(atPath: url.path, contents: nil)
   |                             `- warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
10 |         self.handle = try FileHandle(forWritingTo: url)
11 |     }
/host/spi-builder-workspace/Sources/SyncField/Writers/SessionLogWriter.swift:11:29: warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
 9 |
10 |     public init(url: URL) throws {
11 |         FileManager.default.createFile(atPath: url.path, contents: nil)
   |                             `- warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
12 |         self.handle = try FileHandle(forWritingTo: url)
13 |         self.isoFormatter = ISO8601DateFormatter()
/host/spi-builder-workspace/Sources/SyncField/Writers/StreamWriter.swift:11:29: warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
 9 |
10 |     public init(url: URL) throws {
11 |         FileManager.default.createFile(atPath: url.path, contents: nil)
   |                             `- warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
12 |         self.handle = try FileHandle(forWritingTo: url)
13 |     }
[8/61] Compiling SyncField SensorWriterPump.swift
/host/spi-builder-workspace/Sources/SyncField/Writers/SessionLogWriter.swift:11:29: warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
 9 |
10 |     public init(url: URL) throws {
11 |         FileManager.default.createFile(atPath: url.path, contents: nil)
   |                             `- warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
12 |         self.handle = try FileHandle(forWritingTo: url)
13 |         self.isoFormatter = ISO8601DateFormatter()
/host/spi-builder-workspace/Sources/SyncField/Writers/StreamWriter.swift:11:29: warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
 9 |
10 |     public init(url: URL) throws {
11 |         FileManager.default.createFile(atPath: url.path, contents: nil)
   |                             `- warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
12 |         self.handle = try FileHandle(forWritingTo: url)
13 |     }
[9/61] Compiling SyncField SessionLogWriter.swift
/host/spi-builder-workspace/Sources/SyncField/Writers/SessionLogWriter.swift:11:29: warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
 9 |
10 |     public init(url: URL) throws {
11 |         FileManager.default.createFile(atPath: url.path, contents: nil)
   |                             `- warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
12 |         self.handle = try FileHandle(forWritingTo: url)
13 |         self.isoFormatter = ISO8601DateFormatter()
/host/spi-builder-workspace/Sources/SyncField/Writers/StreamWriter.swift:11:29: warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
 9 |
10 |     public init(url: URL) throws {
11 |         FileManager.default.createFile(atPath: url.path, contents: nil)
   |                             `- warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
12 |         self.handle = try FileHandle(forWritingTo: url)
13 |     }
[10/61] Compiling SyncField StreamWriter.swift
/host/spi-builder-workspace/Sources/SyncField/Writers/SessionLogWriter.swift:11:29: warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
 9 |
10 |     public init(url: URL) throws {
11 |         FileManager.default.createFile(atPath: url.path, contents: nil)
   |                             `- warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
12 |         self.handle = try FileHandle(forWritingTo: url)
13 |         self.isoFormatter = ISO8601DateFormatter()
/host/spi-builder-workspace/Sources/SyncField/Writers/StreamWriter.swift:11:29: warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
 9 |
10 |     public init(url: URL) throws {
11 |         FileManager.default.createFile(atPath: url.path, contents: nil)
   |                             `- warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
12 |         self.handle = try FileHandle(forWritingTo: url)
13 |     }
[11/61] Compiling SyncField StreamWriterPump.swift
/host/spi-builder-workspace/Sources/SyncField/Writers/SessionLogWriter.swift:11:29: warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
 9 |
10 |     public init(url: URL) throws {
11 |         FileManager.default.createFile(atPath: url.path, contents: nil)
   |                             `- warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
12 |         self.handle = try FileHandle(forWritingTo: url)
13 |         self.isoFormatter = ISO8601DateFormatter()
/host/spi-builder-workspace/Sources/SyncField/Writers/StreamWriter.swift:11:29: warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
 9 |
10 |     public init(url: URL) throws {
11 |         FileManager.default.createFile(atPath: url.path, contents: nil)
   |                             `- warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
12 |         self.handle = try FileHandle(forWritingTo: url)
13 |     }
[12/61] Compiling SyncField WriterFactory.swift
/host/spi-builder-workspace/Sources/SyncField/Writers/SessionLogWriter.swift:11:29: warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
 9 |
10 |     public init(url: URL) throws {
11 |         FileManager.default.createFile(atPath: url.path, contents: nil)
   |                             `- warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
12 |         self.handle = try FileHandle(forWritingTo: url)
13 |         self.isoFormatter = ISO8601DateFormatter()
/host/spi-builder-workspace/Sources/SyncField/Writers/StreamWriter.swift:11:29: warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
 9 |
10 |     public init(url: URL) throws {
11 |         FileManager.default.createFile(atPath: url.path, contents: nil)
   |                             `- warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
12 |         self.handle = try FileHandle(forWritingTo: url)
13 |     }
[13/61] Compiling SyncField resource_bundle_accessor.swift
/host/spi-builder-workspace/Sources/SyncField/Writers/SessionLogWriter.swift:11:29: warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
 9 |
10 |     public init(url: URL) throws {
11 |         FileManager.default.createFile(atPath: url.path, contents: nil)
   |                             `- warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
12 |         self.handle = try FileHandle(forWritingTo: url)
13 |         self.isoFormatter = ISO8601DateFormatter()
/host/spi-builder-workspace/Sources/SyncField/Writers/StreamWriter.swift:11:29: warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
 9 |
10 |     public init(url: URL) throws {
11 |         FileManager.default.createFile(atPath: url.path, contents: nil)
   |                             `- warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
12 |         self.handle = try FileHandle(forWritingTo: url)
13 |     }
[14/61] Compiling SyncField CountdownSpec.swift
[15/61] Compiling SyncField CountdownTickPlayer.swift
[16/61] Compiling SyncField CalibrationScaling.swift
[17/61] Compiling SyncField CameraCalibrationProber.swift
[18/61] Compiling SyncField PhotoCalibrationProbeExecutor.swift
[19/61] Compiling SyncField ProbedCameraCalibration.swift
[20/61] Compiling SyncField StereoExtrinsicsMath.swift
[21/61] Compiling SyncField AVAudioEngineChirpPlayer.swift
/host/spi-builder-workspace/Sources/SyncField/Audio/ChirpPlayer.swift:23:14: error: cannot find 'mach_timebase_info_data_t' in scope
21 | @inline(__always)
22 | func currentMonotonicNs() -> UInt64 {
23 |     var tb = mach_timebase_info_data_t()
   |              `- error: cannot find 'mach_timebase_info_data_t' in scope
24 |     mach_timebase_info(&tb)
25 |     return mach_absolute_time() &* UInt64(tb.numer) / UInt64(tb.denom)
/host/spi-builder-workspace/Sources/SyncField/Audio/ChirpPlayer.swift:24:5: error: cannot find 'mach_timebase_info' in scope
22 | func currentMonotonicNs() -> UInt64 {
23 |     var tb = mach_timebase_info_data_t()
24 |     mach_timebase_info(&tb)
   |     `- error: cannot find 'mach_timebase_info' in scope
25 |     return mach_absolute_time() &* UInt64(tb.numer) / UInt64(tb.denom)
26 | }
/host/spi-builder-workspace/Sources/SyncField/Audio/ChirpPlayer.swift:25:12: error: cannot find 'mach_absolute_time' in scope
23 |     var tb = mach_timebase_info_data_t()
24 |     mach_timebase_info(&tb)
25 |     return mach_absolute_time() &* UInt64(tb.numer) / UInt64(tb.denom)
   |            `- error: cannot find 'mach_absolute_time' in scope
26 | }
27 |
[22/61] Compiling SyncField AudioReattachableStream.swift
/host/spi-builder-workspace/Sources/SyncField/Audio/ChirpPlayer.swift:23:14: error: cannot find 'mach_timebase_info_data_t' in scope
21 | @inline(__always)
22 | func currentMonotonicNs() -> UInt64 {
23 |     var tb = mach_timebase_info_data_t()
   |              `- error: cannot find 'mach_timebase_info_data_t' in scope
24 |     mach_timebase_info(&tb)
25 |     return mach_absolute_time() &* UInt64(tb.numer) / UInt64(tb.denom)
/host/spi-builder-workspace/Sources/SyncField/Audio/ChirpPlayer.swift:24:5: error: cannot find 'mach_timebase_info' in scope
22 | func currentMonotonicNs() -> UInt64 {
23 |     var tb = mach_timebase_info_data_t()
24 |     mach_timebase_info(&tb)
   |     `- error: cannot find 'mach_timebase_info' in scope
25 |     return mach_absolute_time() &* UInt64(tb.numer) / UInt64(tb.denom)
26 | }
/host/spi-builder-workspace/Sources/SyncField/Audio/ChirpPlayer.swift:25:12: error: cannot find 'mach_absolute_time' in scope
23 |     var tb = mach_timebase_info_data_t()
24 |     mach_timebase_info(&tb)
25 |     return mach_absolute_time() &* UInt64(tb.numer) / UInt64(tb.denom)
   |            `- error: cannot find 'mach_absolute_time' in scope
26 | }
27 |
[23/61] Compiling SyncField AudioSessionInterruptionHandler.swift
/host/spi-builder-workspace/Sources/SyncField/Audio/ChirpPlayer.swift:23:14: error: cannot find 'mach_timebase_info_data_t' in scope
21 | @inline(__always)
22 | func currentMonotonicNs() -> UInt64 {
23 |     var tb = mach_timebase_info_data_t()
   |              `- error: cannot find 'mach_timebase_info_data_t' in scope
24 |     mach_timebase_info(&tb)
25 |     return mach_absolute_time() &* UInt64(tb.numer) / UInt64(tb.denom)
/host/spi-builder-workspace/Sources/SyncField/Audio/ChirpPlayer.swift:24:5: error: cannot find 'mach_timebase_info' in scope
22 | func currentMonotonicNs() -> UInt64 {
23 |     var tb = mach_timebase_info_data_t()
24 |     mach_timebase_info(&tb)
   |     `- error: cannot find 'mach_timebase_info' in scope
25 |     return mach_absolute_time() &* UInt64(tb.numer) / UInt64(tb.denom)
26 | }
/host/spi-builder-workspace/Sources/SyncField/Audio/ChirpPlayer.swift:25:12: error: cannot find 'mach_absolute_time' in scope
23 |     var tb = mach_timebase_info_data_t()
24 |     mach_timebase_info(&tb)
25 |     return mach_absolute_time() &* UInt64(tb.numer) / UInt64(tb.denom)
   |            `- error: cannot find 'mach_absolute_time' in scope
26 | }
27 |
[24/61] Compiling SyncField AudioSessionPolicy.swift
/host/spi-builder-workspace/Sources/SyncField/Audio/ChirpPlayer.swift:23:14: error: cannot find 'mach_timebase_info_data_t' in scope
21 | @inline(__always)
22 | func currentMonotonicNs() -> UInt64 {
23 |     var tb = mach_timebase_info_data_t()
   |              `- error: cannot find 'mach_timebase_info_data_t' in scope
24 |     mach_timebase_info(&tb)
25 |     return mach_absolute_time() &* UInt64(tb.numer) / UInt64(tb.denom)
/host/spi-builder-workspace/Sources/SyncField/Audio/ChirpPlayer.swift:24:5: error: cannot find 'mach_timebase_info' in scope
22 | func currentMonotonicNs() -> UInt64 {
23 |     var tb = mach_timebase_info_data_t()
24 |     mach_timebase_info(&tb)
   |     `- error: cannot find 'mach_timebase_info' in scope
25 |     return mach_absolute_time() &* UInt64(tb.numer) / UInt64(tb.denom)
26 | }
/host/spi-builder-workspace/Sources/SyncField/Audio/ChirpPlayer.swift:25:12: error: cannot find 'mach_absolute_time' in scope
23 |     var tb = mach_timebase_info_data_t()
24 |     mach_timebase_info(&tb)
25 |     return mach_absolute_time() &* UInt64(tb.numer) / UInt64(tb.denom)
   |            `- error: cannot find 'mach_absolute_time' in scope
26 | }
27 |
[25/61] Compiling SyncField ChirpPlayer.swift
/host/spi-builder-workspace/Sources/SyncField/Audio/ChirpPlayer.swift:23:14: error: cannot find 'mach_timebase_info_data_t' in scope
21 | @inline(__always)
22 | func currentMonotonicNs() -> UInt64 {
23 |     var tb = mach_timebase_info_data_t()
   |              `- error: cannot find 'mach_timebase_info_data_t' in scope
24 |     mach_timebase_info(&tb)
25 |     return mach_absolute_time() &* UInt64(tb.numer) / UInt64(tb.denom)
/host/spi-builder-workspace/Sources/SyncField/Audio/ChirpPlayer.swift:24:5: error: cannot find 'mach_timebase_info' in scope
22 | func currentMonotonicNs() -> UInt64 {
23 |     var tb = mach_timebase_info_data_t()
24 |     mach_timebase_info(&tb)
   |     `- error: cannot find 'mach_timebase_info' in scope
25 |     return mach_absolute_time() &* UInt64(tb.numer) / UInt64(tb.denom)
26 | }
/host/spi-builder-workspace/Sources/SyncField/Audio/ChirpPlayer.swift:25:12: error: cannot find 'mach_absolute_time' in scope
23 |     var tb = mach_timebase_info_data_t()
24 |     mach_timebase_info(&tb)
25 |     return mach_absolute_time() &* UInt64(tb.numer) / UInt64(tb.denom)
   |            `- error: cannot find 'mach_absolute_time' in scope
26 | }
27 |
[26/61] Compiling SyncField ChirpSynthesis.swift
/host/spi-builder-workspace/Sources/SyncField/Audio/ChirpPlayer.swift:23:14: error: cannot find 'mach_timebase_info_data_t' in scope
21 | @inline(__always)
22 | func currentMonotonicNs() -> UInt64 {
23 |     var tb = mach_timebase_info_data_t()
   |              `- error: cannot find 'mach_timebase_info_data_t' in scope
24 |     mach_timebase_info(&tb)
25 |     return mach_absolute_time() &* UInt64(tb.numer) / UInt64(tb.denom)
/host/spi-builder-workspace/Sources/SyncField/Audio/ChirpPlayer.swift:24:5: error: cannot find 'mach_timebase_info' in scope
22 | func currentMonotonicNs() -> UInt64 {
23 |     var tb = mach_timebase_info_data_t()
24 |     mach_timebase_info(&tb)
   |     `- error: cannot find 'mach_timebase_info' in scope
25 |     return mach_absolute_time() &* UInt64(tb.numer) / UInt64(tb.denom)
26 | }
/host/spi-builder-workspace/Sources/SyncField/Audio/ChirpPlayer.swift:25:12: error: cannot find 'mach_absolute_time' in scope
23 |     var tb = mach_timebase_info_data_t()
24 |     mach_timebase_info(&tb)
25 |     return mach_absolute_time() &* UInt64(tb.numer) / UInt64(tb.denom)
   |            `- error: cannot find 'mach_absolute_time' in scope
26 | }
27 |
[27/61] Compiling SyncField ChirpTypes.swift
/host/spi-builder-workspace/Sources/SyncField/Audio/ChirpPlayer.swift:23:14: error: cannot find 'mach_timebase_info_data_t' in scope
21 | @inline(__always)
22 | func currentMonotonicNs() -> UInt64 {
23 |     var tb = mach_timebase_info_data_t()
   |              `- error: cannot find 'mach_timebase_info_data_t' in scope
24 |     mach_timebase_info(&tb)
25 |     return mach_absolute_time() &* UInt64(tb.numer) / UInt64(tb.denom)
/host/spi-builder-workspace/Sources/SyncField/Audio/ChirpPlayer.swift:24:5: error: cannot find 'mach_timebase_info' in scope
22 | func currentMonotonicNs() -> UInt64 {
23 |     var tb = mach_timebase_info_data_t()
24 |     mach_timebase_info(&tb)
   |     `- error: cannot find 'mach_timebase_info' in scope
25 |     return mach_absolute_time() &* UInt64(tb.numer) / UInt64(tb.denom)
26 | }
/host/spi-builder-workspace/Sources/SyncField/Audio/ChirpPlayer.swift:25:12: error: cannot find 'mach_absolute_time' in scope
23 |     var tb = mach_timebase_info_data_t()
24 |     mach_timebase_info(&tb)
25 |     return mach_absolute_time() &* UInt64(tb.numer) / UInt64(tb.denom)
   |            `- error: cannot find 'mach_absolute_time' in scope
26 | }
27 |
[28/61] Compiling SyncField SyncFieldStream.swift
/host/spi-builder-workspace/Sources/SyncField/Writers/EventWriter.swift:118:33: warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
116 |         guard !pendingLines.isEmpty else { return }
117 |         if fileHandle == nil {
118 |             FileManager.default.createFile(atPath: fileURL.path, contents: nil)
    |                                 `- warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
119 |             fileHandle = try? FileHandle(forWritingTo: fileURL)
120 |         }
/host/spi-builder-workspace/Sources/SyncField/Writers/SensorWriter.swift:9:29: warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
 7 |
 8 |     public init(url: URL) throws {
 9 |         FileManager.default.createFile(atPath: url.path, contents: nil)
   |                             `- warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
10 |         self.handle = try FileHandle(forWritingTo: url)
11 |     }
[29/61] Compiling SyncField SyncPoint.swift
/host/spi-builder-workspace/Sources/SyncField/Writers/EventWriter.swift:118:33: warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
116 |         guard !pendingLines.isEmpty else { return }
117 |         if fileHandle == nil {
118 |             FileManager.default.createFile(atPath: fileURL.path, contents: nil)
    |                                 `- warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
119 |             fileHandle = try? FileHandle(forWritingTo: fileURL)
120 |         }
/host/spi-builder-workspace/Sources/SyncField/Writers/SensorWriter.swift:9:29: warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
 7 |
 8 |     public init(url: URL) throws {
 9 |         FileManager.default.createFile(atPath: url.path, contents: nil)
   |                             `- warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
10 |         self.handle = try FileHandle(forWritingTo: url)
11 |     }
[30/61] Compiling SyncField EventWriter.swift
/host/spi-builder-workspace/Sources/SyncField/Writers/EventWriter.swift:118:33: warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
116 |         guard !pendingLines.isEmpty else { return }
117 |         if fileHandle == nil {
118 |             FileManager.default.createFile(atPath: fileURL.path, contents: nil)
    |                                 `- warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
119 |             fileHandle = try? FileHandle(forWritingTo: fileURL)
120 |         }
/host/spi-builder-workspace/Sources/SyncField/Writers/SensorWriter.swift:9:29: warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
 7 |
 8 |     public init(url: URL) throws {
 9 |         FileManager.default.createFile(atPath: url.path, contents: nil)
   |                             `- warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
10 |         self.handle = try FileHandle(forWritingTo: url)
11 |     }
[31/61] Compiling SyncField ManifestWriter.swift
/host/spi-builder-workspace/Sources/SyncField/Writers/EventWriter.swift:118:33: warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
116 |         guard !pendingLines.isEmpty else { return }
117 |         if fileHandle == nil {
118 |             FileManager.default.createFile(atPath: fileURL.path, contents: nil)
    |                                 `- warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
119 |             fileHandle = try? FileHandle(forWritingTo: fileURL)
120 |         }
/host/spi-builder-workspace/Sources/SyncField/Writers/SensorWriter.swift:9:29: warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
 7 |
 8 |     public init(url: URL) throws {
 9 |         FileManager.default.createFile(atPath: url.path, contents: nil)
   |                             `- warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
10 |         self.handle = try FileHandle(forWritingTo: url)
11 |     }
[32/61] Compiling SyncField RotatingSensorWriter.swift
/host/spi-builder-workspace/Sources/SyncField/Writers/EventWriter.swift:118:33: warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
116 |         guard !pendingLines.isEmpty else { return }
117 |         if fileHandle == nil {
118 |             FileManager.default.createFile(atPath: fileURL.path, contents: nil)
    |                                 `- warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
119 |             fileHandle = try? FileHandle(forWritingTo: fileURL)
120 |         }
/host/spi-builder-workspace/Sources/SyncField/Writers/SensorWriter.swift:9:29: warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
 7 |
 8 |     public init(url: URL) throws {
 9 |         FileManager.default.createFile(atPath: url.path, contents: nil)
   |                             `- warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
10 |         self.handle = try FileHandle(forWritingTo: url)
11 |     }
[33/61] Compiling SyncField SensorWriter.swift
/host/spi-builder-workspace/Sources/SyncField/Writers/EventWriter.swift:118:33: warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
116 |         guard !pendingLines.isEmpty else { return }
117 |         if fileHandle == nil {
118 |             FileManager.default.createFile(atPath: fileURL.path, contents: nil)
    |                                 `- warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
119 |             fileHandle = try? FileHandle(forWritingTo: fileURL)
120 |         }
/host/spi-builder-workspace/Sources/SyncField/Writers/SensorWriter.swift:9:29: warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
 7 |
 8 |     public init(url: URL) throws {
 9 |         FileManager.default.createFile(atPath: url.path, contents: nil)
   |                             `- warning: result of call to 'createFile(atPath:contents:attributes:)' is unused [#no-usage]
10 |         self.handle = try FileHandle(forWritingTo: url)
11 |     }
[34/61] Compiling SyncField StereoProbedCalibration.swift
/host/spi-builder-workspace/Sources/SyncField/HealthBus.swift:26:14: warning: instance method 'lock' is unavailable from asynchronous contexts; Use async-safe scoped locking instead; this is an error in the Swift 6 language mode
24 |
25 |     public func publish(_ event: HealthEvent) async {
26 |         lock.lock()
   |              `- warning: instance method 'lock' is unavailable from asynchronous contexts; Use async-safe scoped locking instead; this is an error in the Swift 6 language mode
27 |         let targets = Array(continuations.values)
28 |         lock.unlock()
/host/spi-builder-workspace/Sources/SyncField/HealthBus.swift:28:14: warning: instance method 'unlock' is unavailable from asynchronous contexts; Use async-safe scoped locking instead; this is an error in the Swift 6 language mode
26 |         lock.lock()
27 |         let targets = Array(continuations.values)
28 |         lock.unlock()
   |              `- warning: instance method 'unlock' is unavailable from asynchronous contexts; Use async-safe scoped locking instead; this is an error in the Swift 6 language mode
29 |         for cont in targets { cont.yield(event) }
30 |     }
[35/61] Compiling SyncField Errors.swift
/host/spi-builder-workspace/Sources/SyncField/HealthBus.swift:26:14: warning: instance method 'lock' is unavailable from asynchronous contexts; Use async-safe scoped locking instead; this is an error in the Swift 6 language mode
24 |
25 |     public func publish(_ event: HealthEvent) async {
26 |         lock.lock()
   |              `- warning: instance method 'lock' is unavailable from asynchronous contexts; Use async-safe scoped locking instead; this is an error in the Swift 6 language mode
27 |         let targets = Array(continuations.values)
28 |         lock.unlock()
/host/spi-builder-workspace/Sources/SyncField/HealthBus.swift:28:14: warning: instance method 'unlock' is unavailable from asynchronous contexts; Use async-safe scoped locking instead; this is an error in the Swift 6 language mode
26 |         lock.lock()
27 |         let targets = Array(continuations.values)
28 |         lock.unlock()
   |              `- warning: instance method 'unlock' is unavailable from asynchronous contexts; Use async-safe scoped locking instead; this is an error in the Swift 6 language mode
29 |         for cont in targets { cont.yield(event) }
30 |     }
[36/61] Compiling SyncField HealthBus.swift
/host/spi-builder-workspace/Sources/SyncField/HealthBus.swift:26:14: warning: instance method 'lock' is unavailable from asynchronous contexts; Use async-safe scoped locking instead; this is an error in the Swift 6 language mode
24 |
25 |     public func publish(_ event: HealthEvent) async {
26 |         lock.lock()
   |              `- warning: instance method 'lock' is unavailable from asynchronous contexts; Use async-safe scoped locking instead; this is an error in the Swift 6 language mode
27 |         let targets = Array(continuations.values)
28 |         lock.unlock()
/host/spi-builder-workspace/Sources/SyncField/HealthBus.swift:28:14: warning: instance method 'unlock' is unavailable from asynchronous contexts; Use async-safe scoped locking instead; this is an error in the Swift 6 language mode
26 |         lock.lock()
27 |         let targets = Array(continuations.values)
28 |         lock.unlock()
   |              `- warning: instance method 'unlock' is unavailable from asynchronous contexts; Use async-safe scoped locking instead; this is an error in the Swift 6 language mode
29 |         for cont in targets { cont.yield(event) }
30 |     }
[37/61] Compiling SyncField HealthEvent.swift
/host/spi-builder-workspace/Sources/SyncField/HealthBus.swift:26:14: warning: instance method 'lock' is unavailable from asynchronous contexts; Use async-safe scoped locking instead; this is an error in the Swift 6 language mode
24 |
25 |     public func publish(_ event: HealthEvent) async {
26 |         lock.lock()
   |              `- warning: instance method 'lock' is unavailable from asynchronous contexts; Use async-safe scoped locking instead; this is an error in the Swift 6 language mode
27 |         let targets = Array(continuations.values)
28 |         lock.unlock()
/host/spi-builder-workspace/Sources/SyncField/HealthBus.swift:28:14: warning: instance method 'unlock' is unavailable from asynchronous contexts; Use async-safe scoped locking instead; this is an error in the Swift 6 language mode
26 |         lock.lock()
27 |         let targets = Array(continuations.values)
28 |         lock.unlock()
   |              `- warning: instance method 'unlock' is unavailable from asynchronous contexts; Use async-safe scoped locking instead; this is an error in the Swift 6 language mode
29 |         for cont in targets { cont.yield(event) }
30 |     }
[38/61] Compiling SyncField HandQualityConfig.swift
/host/spi-builder-workspace/Sources/SyncField/HealthBus.swift:26:14: warning: instance method 'lock' is unavailable from asynchronous contexts; Use async-safe scoped locking instead; this is an error in the Swift 6 language mode
24 |
25 |     public func publish(_ event: HealthEvent) async {
26 |         lock.lock()
   |              `- warning: instance method 'lock' is unavailable from asynchronous contexts; Use async-safe scoped locking instead; this is an error in the Swift 6 language mode
27 |         let targets = Array(continuations.values)
28 |         lock.unlock()
/host/spi-builder-workspace/Sources/SyncField/HealthBus.swift:28:14: warning: instance method 'unlock' is unavailable from asynchronous contexts; Use async-safe scoped locking instead; this is an error in the Swift 6 language mode
26 |         lock.lock()
27 |         let targets = Array(continuations.values)
28 |         lock.unlock()
   |              `- warning: instance method 'unlock' is unavailable from asynchronous contexts; Use async-safe scoped locking instead; this is an error in the Swift 6 language mode
29 |         for cont in targets { cont.yield(event) }
30 |     }
[39/61] Compiling SyncField HandQualityMonitor.swift
/host/spi-builder-workspace/Sources/SyncField/HealthBus.swift:26:14: warning: instance method 'lock' is unavailable from asynchronous contexts; Use async-safe scoped locking instead; this is an error in the Swift 6 language mode
24 |
25 |     public func publish(_ event: HealthEvent) async {
26 |         lock.lock()
   |              `- warning: instance method 'lock' is unavailable from asynchronous contexts; Use async-safe scoped locking instead; this is an error in the Swift 6 language mode
27 |         let targets = Array(continuations.values)
28 |         lock.unlock()
/host/spi-builder-workspace/Sources/SyncField/HealthBus.swift:28:14: warning: instance method 'unlock' is unavailable from asynchronous contexts; Use async-safe scoped locking instead; this is an error in the Swift 6 language mode
26 |         lock.lock()
27 |         let targets = Array(continuations.values)
28 |         lock.unlock()
   |              `- warning: instance method 'unlock' is unavailable from asynchronous contexts; Use async-safe scoped locking instead; this is an error in the Swift 6 language mode
29 |         for cont in targets { cont.yield(event) }
30 |     }
[40/61] Compiling SyncField HandQualitySummary.swift
/host/spi-builder-workspace/Sources/SyncField/HealthBus.swift:26:14: warning: instance method 'lock' is unavailable from asynchronous contexts; Use async-safe scoped locking instead; this is an error in the Swift 6 language mode
24 |
25 |     public func publish(_ event: HealthEvent) async {
26 |         lock.lock()
   |              `- warning: instance method 'lock' is unavailable from asynchronous contexts; Use async-safe scoped locking instead; this is an error in the Swift 6 language mode
27 |         let targets = Array(continuations.values)
28 |         lock.unlock()
/host/spi-builder-workspace/Sources/SyncField/HealthBus.swift:28:14: warning: instance method 'unlock' is unavailable from asynchronous contexts; Use async-safe scoped locking instead; this is an error in the Swift 6 language mode
26 |         lock.lock()
27 |         let targets = Array(continuations.values)
28 |         lock.unlock()
   |              `- warning: instance method 'unlock' is unavailable from asynchronous contexts; Use async-safe scoped locking instead; this is an error in the Swift 6 language mode
29 |         for cont in targets { cont.yield(event) }
30 |     }
[41/61] Compiling SyncField CameraTimestamps.swift
[42/61] Compiling SyncField FrameProcessorGate.swift
[43/61] Compiling SyncField MultiCamCameraStream.swift
[44/61] Compiling SyncField TactileAcquireFailure.swift
[45/61] Compiling SyncField TactileBLEClient.swift
[46/61] Compiling SyncField TactilePacketParser.swift
[47/61] Compiling SyncField TactileRoleRegistry.swift
[48/61] Compiling SyncField HandQualityTypes.swift
/host/spi-builder-workspace/Sources/SyncField/SessionClock.swift:10:27: error: cannot find type 'mach_timebase_info_data_t' in scope
 8 | /// plus a wall-clock anchor captured once at session start.
 9 | public final class SessionClock: @unchecked Sendable {
10 |     private let timebase: mach_timebase_info_data_t
   |                           `- error: cannot find type 'mach_timebase_info_data_t' in scope
11 |
12 |     public init() {
/host/spi-builder-workspace/Sources/SyncField/SessionClock.swift:13:18: error: cannot find 'mach_timebase_info_data_t' in scope
11 |
12 |     public init() {
13 |         var tb = mach_timebase_info_data_t()
   |                  `- error: cannot find 'mach_timebase_info_data_t' in scope
14 |         mach_timebase_info(&tb)
15 |         self.timebase = tb
/host/spi-builder-workspace/Sources/SyncField/SessionClock.swift:14:9: error: cannot find 'mach_timebase_info' in scope
12 |     public init() {
13 |         var tb = mach_timebase_info_data_t()
14 |         mach_timebase_info(&tb)
   |         `- error: cannot find 'mach_timebase_info' in scope
15 |         self.timebase = tb
16 |     }
/host/spi-builder-workspace/Sources/SyncField/SessionClock.swift:20:32: error: cannot find 'mach_absolute_time' in scope
18 |     /// Current monotonic clock in nanoseconds. Never goes backwards.
19 |     public func nowMonotonicNs() -> UInt64 {
20 |         machTicksToMonotonicNs(mach_absolute_time())
   |                                `- error: cannot find 'mach_absolute_time' in scope
21 |     }
22 |
[49/61] Compiling SyncField VisionHandConversion.swift
/host/spi-builder-workspace/Sources/SyncField/SessionClock.swift:10:27: error: cannot find type 'mach_timebase_info_data_t' in scope
 8 | /// plus a wall-clock anchor captured once at session start.
 9 | public final class SessionClock: @unchecked Sendable {
10 |     private let timebase: mach_timebase_info_data_t
   |                           `- error: cannot find type 'mach_timebase_info_data_t' in scope
11 |
12 |     public init() {
/host/spi-builder-workspace/Sources/SyncField/SessionClock.swift:13:18: error: cannot find 'mach_timebase_info_data_t' in scope
11 |
12 |     public init() {
13 |         var tb = mach_timebase_info_data_t()
   |                  `- error: cannot find 'mach_timebase_info_data_t' in scope
14 |         mach_timebase_info(&tb)
15 |         self.timebase = tb
/host/spi-builder-workspace/Sources/SyncField/SessionClock.swift:14:9: error: cannot find 'mach_timebase_info' in scope
12 |     public init() {
13 |         var tb = mach_timebase_info_data_t()
14 |         mach_timebase_info(&tb)
   |         `- error: cannot find 'mach_timebase_info' in scope
15 |         self.timebase = tb
16 |     }
/host/spi-builder-workspace/Sources/SyncField/SessionClock.swift:20:32: error: cannot find 'mach_absolute_time' in scope
18 |     /// Current monotonic clock in nanoseconds. Never goes backwards.
19 |     public func nowMonotonicNs() -> UInt64 {
20 |         machTicksToMonotonicNs(mach_absolute_time())
   |                                `- error: cannot find 'mach_absolute_time' in scope
21 |     }
22 |
[50/61] Compiling SyncField SessionClock.swift
/host/spi-builder-workspace/Sources/SyncField/SessionClock.swift:10:27: error: cannot find type 'mach_timebase_info_data_t' in scope
 8 | /// plus a wall-clock anchor captured once at session start.
 9 | public final class SessionClock: @unchecked Sendable {
10 |     private let timebase: mach_timebase_info_data_t
   |                           `- error: cannot find type 'mach_timebase_info_data_t' in scope
11 |
12 |     public init() {
/host/spi-builder-workspace/Sources/SyncField/SessionClock.swift:13:18: error: cannot find 'mach_timebase_info_data_t' in scope
11 |
12 |     public init() {
13 |         var tb = mach_timebase_info_data_t()
   |                  `- error: cannot find 'mach_timebase_info_data_t' in scope
14 |         mach_timebase_info(&tb)
15 |         self.timebase = tb
/host/spi-builder-workspace/Sources/SyncField/SessionClock.swift:14:9: error: cannot find 'mach_timebase_info' in scope
12 |     public init() {
13 |         var tb = mach_timebase_info_data_t()
14 |         mach_timebase_info(&tb)
   |         `- error: cannot find 'mach_timebase_info' in scope
15 |         self.timebase = tb
16 |     }
/host/spi-builder-workspace/Sources/SyncField/SessionClock.swift:20:32: error: cannot find 'mach_absolute_time' in scope
18 |     /// Current monotonic clock in nanoseconds. Never goes backwards.
19 |     public func nowMonotonicNs() -> UInt64 {
20 |         machTicksToMonotonicNs(mach_absolute_time())
   |                                `- error: cannot find 'mach_absolute_time' in scope
21 |     }
22 |
[51/61] Compiling SyncField SessionOrchestrator.swift
/host/spi-builder-workspace/Sources/SyncField/SessionClock.swift:10:27: error: cannot find type 'mach_timebase_info_data_t' in scope
 8 | /// plus a wall-clock anchor captured once at session start.
 9 | public final class SessionClock: @unchecked Sendable {
10 |     private let timebase: mach_timebase_info_data_t
   |                           `- error: cannot find type 'mach_timebase_info_data_t' in scope
11 |
12 |     public init() {
/host/spi-builder-workspace/Sources/SyncField/SessionClock.swift:13:18: error: cannot find 'mach_timebase_info_data_t' in scope
11 |
12 |     public init() {
13 |         var tb = mach_timebase_info_data_t()
   |                  `- error: cannot find 'mach_timebase_info_data_t' in scope
14 |         mach_timebase_info(&tb)
15 |         self.timebase = tb
/host/spi-builder-workspace/Sources/SyncField/SessionClock.swift:14:9: error: cannot find 'mach_timebase_info' in scope
12 |     public init() {
13 |         var tb = mach_timebase_info_data_t()
14 |         mach_timebase_info(&tb)
   |         `- error: cannot find 'mach_timebase_info' in scope
15 |         self.timebase = tb
16 |     }
/host/spi-builder-workspace/Sources/SyncField/SessionClock.swift:20:32: error: cannot find 'mach_absolute_time' in scope
18 |     /// Current monotonic clock in nanoseconds. Never goes backwards.
19 |     public func nowMonotonicNs() -> UInt64 {
20 |         machTicksToMonotonicNs(mach_absolute_time())
   |                                `- error: cannot find 'mach_absolute_time' in scope
21 |     }
22 |
[52/61] Compiling SyncField SessionState.swift
/host/spi-builder-workspace/Sources/SyncField/SessionClock.swift:10:27: error: cannot find type 'mach_timebase_info_data_t' in scope
 8 | /// plus a wall-clock anchor captured once at session start.
 9 | public final class SessionClock: @unchecked Sendable {
10 |     private let timebase: mach_timebase_info_data_t
   |                           `- error: cannot find type 'mach_timebase_info_data_t' in scope
11 |
12 |     public init() {
/host/spi-builder-workspace/Sources/SyncField/SessionClock.swift:13:18: error: cannot find 'mach_timebase_info_data_t' in scope
11 |
12 |     public init() {
13 |         var tb = mach_timebase_info_data_t()
   |                  `- error: cannot find 'mach_timebase_info_data_t' in scope
14 |         mach_timebase_info(&tb)
15 |         self.timebase = tb
/host/spi-builder-workspace/Sources/SyncField/SessionClock.swift:14:9: error: cannot find 'mach_timebase_info' in scope
12 |     public init() {
13 |         var tb = mach_timebase_info_data_t()
14 |         mach_timebase_info(&tb)
   |         `- error: cannot find 'mach_timebase_info' in scope
15 |         self.timebase = tb
16 |     }
/host/spi-builder-workspace/Sources/SyncField/SessionClock.swift:20:32: error: cannot find 'mach_absolute_time' in scope
18 |     /// Current monotonic clock in nanoseconds. Never goes backwards.
19 |     public func nowMonotonicNs() -> UInt64 {
20 |         machTicksToMonotonicNs(mach_absolute_time())
   |                                `- error: cannot find 'mach_absolute_time' in scope
21 |     }
22 |
[53/61] Compiling SyncField StreamCapabilities.swift
/host/spi-builder-workspace/Sources/SyncField/SessionClock.swift:10:27: error: cannot find type 'mach_timebase_info_data_t' in scope
 8 | /// plus a wall-clock anchor captured once at session start.
 9 | public final class SessionClock: @unchecked Sendable {
10 |     private let timebase: mach_timebase_info_data_t
   |                           `- error: cannot find type 'mach_timebase_info_data_t' in scope
11 |
12 |     public init() {
/host/spi-builder-workspace/Sources/SyncField/SessionClock.swift:13:18: error: cannot find 'mach_timebase_info_data_t' in scope
11 |
12 |     public init() {
13 |         var tb = mach_timebase_info_data_t()
   |                  `- error: cannot find 'mach_timebase_info_data_t' in scope
14 |         mach_timebase_info(&tb)
15 |         self.timebase = tb
/host/spi-builder-workspace/Sources/SyncField/SessionClock.swift:14:9: error: cannot find 'mach_timebase_info' in scope
12 |     public init() {
13 |         var tb = mach_timebase_info_data_t()
14 |         mach_timebase_info(&tb)
   |         `- error: cannot find 'mach_timebase_info' in scope
15 |         self.timebase = tb
16 |     }
/host/spi-builder-workspace/Sources/SyncField/SessionClock.swift:20:32: error: cannot find 'mach_absolute_time' in scope
18 |     /// Current monotonic clock in nanoseconds. Never goes backwards.
19 |     public func nowMonotonicNs() -> UInt64 {
20 |         machTicksToMonotonicNs(mach_absolute_time())
   |                                `- error: cannot find 'mach_absolute_time' in scope
21 |     }
22 |
[54/61] Compiling SyncField CameraDeviceConfig.swift
/host/spi-builder-workspace/Sources/SyncField/SessionClock.swift:10:27: error: cannot find type 'mach_timebase_info_data_t' in scope
 8 | /// plus a wall-clock anchor captured once at session start.
 9 | public final class SessionClock: @unchecked Sendable {
10 |     private let timebase: mach_timebase_info_data_t
   |                           `- error: cannot find type 'mach_timebase_info_data_t' in scope
11 |
12 |     public init() {
/host/spi-builder-workspace/Sources/SyncField/SessionClock.swift:13:18: error: cannot find 'mach_timebase_info_data_t' in scope
11 |
12 |     public init() {
13 |         var tb = mach_timebase_info_data_t()
   |                  `- error: cannot find 'mach_timebase_info_data_t' in scope
14 |         mach_timebase_info(&tb)
15 |         self.timebase = tb
/host/spi-builder-workspace/Sources/SyncField/SessionClock.swift:14:9: error: cannot find 'mach_timebase_info' in scope
12 |     public init() {
13 |         var tb = mach_timebase_info_data_t()
14 |         mach_timebase_info(&tb)
   |         `- error: cannot find 'mach_timebase_info' in scope
15 |         self.timebase = tb
16 |     }
/host/spi-builder-workspace/Sources/SyncField/SessionClock.swift:20:32: error: cannot find 'mach_absolute_time' in scope
18 |     /// Current monotonic clock in nanoseconds. Never goes backwards.
19 |     public func nowMonotonicNs() -> UInt64 {
20 |         machTicksToMonotonicNs(mach_absolute_time())
   |                                `- error: cannot find 'mach_absolute_time' in scope
21 |     }
22 |
[55/61] Compiling SyncField TactileStream.swift
/host/spi-builder-workspace/Sources/SyncField/Streams/Tactile/TactileStream.swift:123:39: error: value of type 'TactilePeripheralRef' has no member 'identifier'
121 |                     let m = try await client.connectAndPrepare(ref, expectedSide: side)
122 |                     let claimed = await TactileRoleRegistry.shared
123 |                         .tryClaim(ref.identifier.uuidString, side: side)
    |                                       `- error: value of type 'TactilePeripheralRef' has no member 'identifier'
124 |                     guard claimed else {
125 |                         excluded.insert(ref.identifier)
/host/spi-builder-workspace/Sources/SyncField/Streams/Tactile/TactileStream.swift:125:45: error: value of type 'TactilePeripheralRef' has no member 'identifier'
123 |                         .tryClaim(ref.identifier.uuidString, side: side)
124 |                     guard claimed else {
125 |                         excluded.insert(ref.identifier)
    |                                             `- error: value of type 'TactilePeripheralRef' has no member 'identifier'
126 |                         client.disconnect()
127 |                         continue
/host/spi-builder-workspace/Sources/SyncField/Streams/Tactile/TactileStream.swift:151:42: error: type 'TactileBLEClient' has no member 'Error'
149 |                     await healthBus?.publish(.streamConnected(streamId: streamId))
150 |                     return  // success; auto-reconnect handles future drops
151 |                 } catch TactileBLEClient.Error.wrongSide {
    |                                          `- error: type 'TactileBLEClient' has no member 'Error'
152 |                     excluded.insert(ref.identifier)   // definitively the other side
153 |                     client.disconnect()
/host/spi-builder-workspace/Sources/SyncField/Streams/Tactile/TactileStream.swift:152:41: error: value of type 'TactilePeripheralRef' has no member 'identifier'
150 |                     return  // success; auto-reconnect handles future drops
151 |                 } catch TactileBLEClient.Error.wrongSide {
152 |                     excluded.insert(ref.identifier)   // definitively the other side
    |                                         `- error: value of type 'TactilePeripheralRef' has no member 'identifier'
153 |                     client.disconnect()
154 |                 } catch {
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:250:14: error: value of type 'iPhoneCameraStream' has no member 'healthBus'
 248 |
 249 |     public func connect(context: StreamConnectContext) async throws {
 250 |         self.healthBus = context.healthBus
     |              `- error: value of type 'iPhoneCameraStream' has no member 'healthBus'
 251 |         #if canImport(AVFoundation)
 252 |         try configureSession()
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:255:15: error: cannot find 'healthBus' in scope
 253 |         captureSession.startRunning()
 254 |         #endif
 255 |         await healthBus?.publish(.streamConnected(streamId: streamId))
     |               `- error: cannot find 'healthBus' in scope
 256 |     }
 257 |
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:255:35: error: cannot infer contextual base in reference to member 'streamConnected'
 253 |         captureSession.startRunning()
 254 |         #endif
 255 |         await healthBus?.publish(.streamConnected(streamId: streamId))
     |                                   `- error: cannot infer contextual base in reference to member 'streamConnected'
 256 |     }
 257 |
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:756:40: error: cannot find 'frameCount' in scope
 754 |         StreamIngestReport(streamId: streamId,
 755 |                            filePath: "\(streamId).mp4",
 756 |                            frameCount: frameCount)
     |                                        `- error: cannot find 'frameCount' in scope
 757 |     }
 758 |
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:772:15: error: cannot find 'healthBus' in scope
 770 |         selectedVideoDevice = nil
 771 |         #endif
 772 |         await healthBus?.publish(.streamDisconnected(streamId: streamId, reason: "normal"))
     |               `- error: cannot find 'healthBus' in scope
 773 |     }
 774 |
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:772:35: error: cannot infer contextual base in reference to member 'streamDisconnected'
 770 |         selectedVideoDevice = nil
 771 |         #endif
 772 |         await healthBus?.publish(.streamDisconnected(streamId: streamId, reason: "normal"))
     |                                   `- error: cannot infer contextual base in reference to member 'streamDisconnected'
 773 |     }
 774 |
[56/61] Compiling SyncField TactileTypes.swift
/host/spi-builder-workspace/Sources/SyncField/Streams/Tactile/TactileStream.swift:123:39: error: value of type 'TactilePeripheralRef' has no member 'identifier'
121 |                     let m = try await client.connectAndPrepare(ref, expectedSide: side)
122 |                     let claimed = await TactileRoleRegistry.shared
123 |                         .tryClaim(ref.identifier.uuidString, side: side)
    |                                       `- error: value of type 'TactilePeripheralRef' has no member 'identifier'
124 |                     guard claimed else {
125 |                         excluded.insert(ref.identifier)
/host/spi-builder-workspace/Sources/SyncField/Streams/Tactile/TactileStream.swift:125:45: error: value of type 'TactilePeripheralRef' has no member 'identifier'
123 |                         .tryClaim(ref.identifier.uuidString, side: side)
124 |                     guard claimed else {
125 |                         excluded.insert(ref.identifier)
    |                                             `- error: value of type 'TactilePeripheralRef' has no member 'identifier'
126 |                         client.disconnect()
127 |                         continue
/host/spi-builder-workspace/Sources/SyncField/Streams/Tactile/TactileStream.swift:151:42: error: type 'TactileBLEClient' has no member 'Error'
149 |                     await healthBus?.publish(.streamConnected(streamId: streamId))
150 |                     return  // success; auto-reconnect handles future drops
151 |                 } catch TactileBLEClient.Error.wrongSide {
    |                                          `- error: type 'TactileBLEClient' has no member 'Error'
152 |                     excluded.insert(ref.identifier)   // definitively the other side
153 |                     client.disconnect()
/host/spi-builder-workspace/Sources/SyncField/Streams/Tactile/TactileStream.swift:152:41: error: value of type 'TactilePeripheralRef' has no member 'identifier'
150 |                     return  // success; auto-reconnect handles future drops
151 |                 } catch TactileBLEClient.Error.wrongSide {
152 |                     excluded.insert(ref.identifier)   // definitively the other side
    |                                         `- error: value of type 'TactilePeripheralRef' has no member 'identifier'
153 |                     client.disconnect()
154 |                 } catch {
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:250:14: error: value of type 'iPhoneCameraStream' has no member 'healthBus'
 248 |
 249 |     public func connect(context: StreamConnectContext) async throws {
 250 |         self.healthBus = context.healthBus
     |              `- error: value of type 'iPhoneCameraStream' has no member 'healthBus'
 251 |         #if canImport(AVFoundation)
 252 |         try configureSession()
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:255:15: error: cannot find 'healthBus' in scope
 253 |         captureSession.startRunning()
 254 |         #endif
 255 |         await healthBus?.publish(.streamConnected(streamId: streamId))
     |               `- error: cannot find 'healthBus' in scope
 256 |     }
 257 |
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:255:35: error: cannot infer contextual base in reference to member 'streamConnected'
 253 |         captureSession.startRunning()
 254 |         #endif
 255 |         await healthBus?.publish(.streamConnected(streamId: streamId))
     |                                   `- error: cannot infer contextual base in reference to member 'streamConnected'
 256 |     }
 257 |
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:756:40: error: cannot find 'frameCount' in scope
 754 |         StreamIngestReport(streamId: streamId,
 755 |                            filePath: "\(streamId).mp4",
 756 |                            frameCount: frameCount)
     |                                        `- error: cannot find 'frameCount' in scope
 757 |     }
 758 |
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:772:15: error: cannot find 'healthBus' in scope
 770 |         selectedVideoDevice = nil
 771 |         #endif
 772 |         await healthBus?.publish(.streamDisconnected(streamId: streamId, reason: "normal"))
     |               `- error: cannot find 'healthBus' in scope
 773 |     }
 774 |
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:772:35: error: cannot infer contextual base in reference to member 'streamDisconnected'
 770 |         selectedVideoDevice = nil
 771 |         #endif
 772 |         await healthBus?.publish(.streamDisconnected(streamId: streamId, reason: "normal"))
     |                                   `- error: cannot infer contextual base in reference to member 'streamDisconnected'
 773 |     }
 774 |
[57/61] Compiling SyncField WristImuStream.swift
/host/spi-builder-workspace/Sources/SyncField/Streams/Tactile/TactileStream.swift:123:39: error: value of type 'TactilePeripheralRef' has no member 'identifier'
121 |                     let m = try await client.connectAndPrepare(ref, expectedSide: side)
122 |                     let claimed = await TactileRoleRegistry.shared
123 |                         .tryClaim(ref.identifier.uuidString, side: side)
    |                                       `- error: value of type 'TactilePeripheralRef' has no member 'identifier'
124 |                     guard claimed else {
125 |                         excluded.insert(ref.identifier)
/host/spi-builder-workspace/Sources/SyncField/Streams/Tactile/TactileStream.swift:125:45: error: value of type 'TactilePeripheralRef' has no member 'identifier'
123 |                         .tryClaim(ref.identifier.uuidString, side: side)
124 |                     guard claimed else {
125 |                         excluded.insert(ref.identifier)
    |                                             `- error: value of type 'TactilePeripheralRef' has no member 'identifier'
126 |                         client.disconnect()
127 |                         continue
/host/spi-builder-workspace/Sources/SyncField/Streams/Tactile/TactileStream.swift:151:42: error: type 'TactileBLEClient' has no member 'Error'
149 |                     await healthBus?.publish(.streamConnected(streamId: streamId))
150 |                     return  // success; auto-reconnect handles future drops
151 |                 } catch TactileBLEClient.Error.wrongSide {
    |                                          `- error: type 'TactileBLEClient' has no member 'Error'
152 |                     excluded.insert(ref.identifier)   // definitively the other side
153 |                     client.disconnect()
/host/spi-builder-workspace/Sources/SyncField/Streams/Tactile/TactileStream.swift:152:41: error: value of type 'TactilePeripheralRef' has no member 'identifier'
150 |                     return  // success; auto-reconnect handles future drops
151 |                 } catch TactileBLEClient.Error.wrongSide {
152 |                     excluded.insert(ref.identifier)   // definitively the other side
    |                                         `- error: value of type 'TactilePeripheralRef' has no member 'identifier'
153 |                     client.disconnect()
154 |                 } catch {
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:250:14: error: value of type 'iPhoneCameraStream' has no member 'healthBus'
 248 |
 249 |     public func connect(context: StreamConnectContext) async throws {
 250 |         self.healthBus = context.healthBus
     |              `- error: value of type 'iPhoneCameraStream' has no member 'healthBus'
 251 |         #if canImport(AVFoundation)
 252 |         try configureSession()
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:255:15: error: cannot find 'healthBus' in scope
 253 |         captureSession.startRunning()
 254 |         #endif
 255 |         await healthBus?.publish(.streamConnected(streamId: streamId))
     |               `- error: cannot find 'healthBus' in scope
 256 |     }
 257 |
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:255:35: error: cannot infer contextual base in reference to member 'streamConnected'
 253 |         captureSession.startRunning()
 254 |         #endif
 255 |         await healthBus?.publish(.streamConnected(streamId: streamId))
     |                                   `- error: cannot infer contextual base in reference to member 'streamConnected'
 256 |     }
 257 |
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:756:40: error: cannot find 'frameCount' in scope
 754 |         StreamIngestReport(streamId: streamId,
 755 |                            filePath: "\(streamId).mp4",
 756 |                            frameCount: frameCount)
     |                                        `- error: cannot find 'frameCount' in scope
 757 |     }
 758 |
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:772:15: error: cannot find 'healthBus' in scope
 770 |         selectedVideoDevice = nil
 771 |         #endif
 772 |         await healthBus?.publish(.streamDisconnected(streamId: streamId, reason: "normal"))
     |               `- error: cannot find 'healthBus' in scope
 773 |     }
 774 |
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:772:35: error: cannot infer contextual base in reference to member 'streamDisconnected'
 770 |         selectedVideoDevice = nil
 771 |         #endif
 772 |         await healthBus?.publish(.streamDisconnected(streamId: streamId, reason: "normal"))
     |                                   `- error: cannot infer contextual base in reference to member 'streamDisconnected'
 773 |     }
 774 |
[58/61] Compiling SyncField iPhoneCameraStream.swift
/host/spi-builder-workspace/Sources/SyncField/Streams/Tactile/TactileStream.swift:123:39: error: value of type 'TactilePeripheralRef' has no member 'identifier'
121 |                     let m = try await client.connectAndPrepare(ref, expectedSide: side)
122 |                     let claimed = await TactileRoleRegistry.shared
123 |                         .tryClaim(ref.identifier.uuidString, side: side)
    |                                       `- error: value of type 'TactilePeripheralRef' has no member 'identifier'
124 |                     guard claimed else {
125 |                         excluded.insert(ref.identifier)
/host/spi-builder-workspace/Sources/SyncField/Streams/Tactile/TactileStream.swift:125:45: error: value of type 'TactilePeripheralRef' has no member 'identifier'
123 |                         .tryClaim(ref.identifier.uuidString, side: side)
124 |                     guard claimed else {
125 |                         excluded.insert(ref.identifier)
    |                                             `- error: value of type 'TactilePeripheralRef' has no member 'identifier'
126 |                         client.disconnect()
127 |                         continue
/host/spi-builder-workspace/Sources/SyncField/Streams/Tactile/TactileStream.swift:151:42: error: type 'TactileBLEClient' has no member 'Error'
149 |                     await healthBus?.publish(.streamConnected(streamId: streamId))
150 |                     return  // success; auto-reconnect handles future drops
151 |                 } catch TactileBLEClient.Error.wrongSide {
    |                                          `- error: type 'TactileBLEClient' has no member 'Error'
152 |                     excluded.insert(ref.identifier)   // definitively the other side
153 |                     client.disconnect()
/host/spi-builder-workspace/Sources/SyncField/Streams/Tactile/TactileStream.swift:152:41: error: value of type 'TactilePeripheralRef' has no member 'identifier'
150 |                     return  // success; auto-reconnect handles future drops
151 |                 } catch TactileBLEClient.Error.wrongSide {
152 |                     excluded.insert(ref.identifier)   // definitively the other side
    |                                         `- error: value of type 'TactilePeripheralRef' has no member 'identifier'
153 |                     client.disconnect()
154 |                 } catch {
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:250:14: error: value of type 'iPhoneCameraStream' has no member 'healthBus'
 248 |
 249 |     public func connect(context: StreamConnectContext) async throws {
 250 |         self.healthBus = context.healthBus
     |              `- error: value of type 'iPhoneCameraStream' has no member 'healthBus'
 251 |         #if canImport(AVFoundation)
 252 |         try configureSession()
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:255:15: error: cannot find 'healthBus' in scope
 253 |         captureSession.startRunning()
 254 |         #endif
 255 |         await healthBus?.publish(.streamConnected(streamId: streamId))
     |               `- error: cannot find 'healthBus' in scope
 256 |     }
 257 |
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:255:35: error: cannot infer contextual base in reference to member 'streamConnected'
 253 |         captureSession.startRunning()
 254 |         #endif
 255 |         await healthBus?.publish(.streamConnected(streamId: streamId))
     |                                   `- error: cannot infer contextual base in reference to member 'streamConnected'
 256 |     }
 257 |
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:756:40: error: cannot find 'frameCount' in scope
 754 |         StreamIngestReport(streamId: streamId,
 755 |                            filePath: "\(streamId).mp4",
 756 |                            frameCount: frameCount)
     |                                        `- error: cannot find 'frameCount' in scope
 757 |     }
 758 |
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:772:15: error: cannot find 'healthBus' in scope
 770 |         selectedVideoDevice = nil
 771 |         #endif
 772 |         await healthBus?.publish(.streamDisconnected(streamId: streamId, reason: "normal"))
     |               `- error: cannot find 'healthBus' in scope
 773 |     }
 774 |
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:772:35: error: cannot infer contextual base in reference to member 'streamDisconnected'
 770 |         selectedVideoDevice = nil
 771 |         #endif
 772 |         await healthBus?.publish(.streamDisconnected(streamId: streamId, reason: "normal"))
     |                                   `- error: cannot infer contextual base in reference to member 'streamDisconnected'
 773 |     }
 774 |
[59/61] Compiling SyncField iPhoneMotionStream.swift
/host/spi-builder-workspace/Sources/SyncField/Streams/Tactile/TactileStream.swift:123:39: error: value of type 'TactilePeripheralRef' has no member 'identifier'
121 |                     let m = try await client.connectAndPrepare(ref, expectedSide: side)
122 |                     let claimed = await TactileRoleRegistry.shared
123 |                         .tryClaim(ref.identifier.uuidString, side: side)
    |                                       `- error: value of type 'TactilePeripheralRef' has no member 'identifier'
124 |                     guard claimed else {
125 |                         excluded.insert(ref.identifier)
/host/spi-builder-workspace/Sources/SyncField/Streams/Tactile/TactileStream.swift:125:45: error: value of type 'TactilePeripheralRef' has no member 'identifier'
123 |                         .tryClaim(ref.identifier.uuidString, side: side)
124 |                     guard claimed else {
125 |                         excluded.insert(ref.identifier)
    |                                             `- error: value of type 'TactilePeripheralRef' has no member 'identifier'
126 |                         client.disconnect()
127 |                         continue
/host/spi-builder-workspace/Sources/SyncField/Streams/Tactile/TactileStream.swift:151:42: error: type 'TactileBLEClient' has no member 'Error'
149 |                     await healthBus?.publish(.streamConnected(streamId: streamId))
150 |                     return  // success; auto-reconnect handles future drops
151 |                 } catch TactileBLEClient.Error.wrongSide {
    |                                          `- error: type 'TactileBLEClient' has no member 'Error'
152 |                     excluded.insert(ref.identifier)   // definitively the other side
153 |                     client.disconnect()
/host/spi-builder-workspace/Sources/SyncField/Streams/Tactile/TactileStream.swift:152:41: error: value of type 'TactilePeripheralRef' has no member 'identifier'
150 |                     return  // success; auto-reconnect handles future drops
151 |                 } catch TactileBLEClient.Error.wrongSide {
152 |                     excluded.insert(ref.identifier)   // definitively the other side
    |                                         `- error: value of type 'TactilePeripheralRef' has no member 'identifier'
153 |                     client.disconnect()
154 |                 } catch {
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:250:14: error: value of type 'iPhoneCameraStream' has no member 'healthBus'
 248 |
 249 |     public func connect(context: StreamConnectContext) async throws {
 250 |         self.healthBus = context.healthBus
     |              `- error: value of type 'iPhoneCameraStream' has no member 'healthBus'
 251 |         #if canImport(AVFoundation)
 252 |         try configureSession()
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:255:15: error: cannot find 'healthBus' in scope
 253 |         captureSession.startRunning()
 254 |         #endif
 255 |         await healthBus?.publish(.streamConnected(streamId: streamId))
     |               `- error: cannot find 'healthBus' in scope
 256 |     }
 257 |
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:255:35: error: cannot infer contextual base in reference to member 'streamConnected'
 253 |         captureSession.startRunning()
 254 |         #endif
 255 |         await healthBus?.publish(.streamConnected(streamId: streamId))
     |                                   `- error: cannot infer contextual base in reference to member 'streamConnected'
 256 |     }
 257 |
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:756:40: error: cannot find 'frameCount' in scope
 754 |         StreamIngestReport(streamId: streamId,
 755 |                            filePath: "\(streamId).mp4",
 756 |                            frameCount: frameCount)
     |                                        `- error: cannot find 'frameCount' in scope
 757 |     }
 758 |
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:772:15: error: cannot find 'healthBus' in scope
 770 |         selectedVideoDevice = nil
 771 |         #endif
 772 |         await healthBus?.publish(.streamDisconnected(streamId: streamId, reason: "normal"))
     |               `- error: cannot find 'healthBus' in scope
 773 |     }
 774 |
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:772:35: error: cannot infer contextual base in reference to member 'streamDisconnected'
 770 |         selectedVideoDevice = nil
 771 |         #endif
 772 |         await healthBus?.publish(.streamDisconnected(streamId: streamId, reason: "normal"))
     |                                   `- error: cannot infer contextual base in reference to member 'streamDisconnected'
 773 |     }
 774 |
[60/61] Compiling SyncField iPhoneRawIMUStreams.swift
/host/spi-builder-workspace/Sources/SyncField/Streams/Tactile/TactileStream.swift:123:39: error: value of type 'TactilePeripheralRef' has no member 'identifier'
121 |                     let m = try await client.connectAndPrepare(ref, expectedSide: side)
122 |                     let claimed = await TactileRoleRegistry.shared
123 |                         .tryClaim(ref.identifier.uuidString, side: side)
    |                                       `- error: value of type 'TactilePeripheralRef' has no member 'identifier'
124 |                     guard claimed else {
125 |                         excluded.insert(ref.identifier)
/host/spi-builder-workspace/Sources/SyncField/Streams/Tactile/TactileStream.swift:125:45: error: value of type 'TactilePeripheralRef' has no member 'identifier'
123 |                         .tryClaim(ref.identifier.uuidString, side: side)
124 |                     guard claimed else {
125 |                         excluded.insert(ref.identifier)
    |                                             `- error: value of type 'TactilePeripheralRef' has no member 'identifier'
126 |                         client.disconnect()
127 |                         continue
/host/spi-builder-workspace/Sources/SyncField/Streams/Tactile/TactileStream.swift:151:42: error: type 'TactileBLEClient' has no member 'Error'
149 |                     await healthBus?.publish(.streamConnected(streamId: streamId))
150 |                     return  // success; auto-reconnect handles future drops
151 |                 } catch TactileBLEClient.Error.wrongSide {
    |                                          `- error: type 'TactileBLEClient' has no member 'Error'
152 |                     excluded.insert(ref.identifier)   // definitively the other side
153 |                     client.disconnect()
/host/spi-builder-workspace/Sources/SyncField/Streams/Tactile/TactileStream.swift:152:41: error: value of type 'TactilePeripheralRef' has no member 'identifier'
150 |                     return  // success; auto-reconnect handles future drops
151 |                 } catch TactileBLEClient.Error.wrongSide {
152 |                     excluded.insert(ref.identifier)   // definitively the other side
    |                                         `- error: value of type 'TactilePeripheralRef' has no member 'identifier'
153 |                     client.disconnect()
154 |                 } catch {
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:250:14: error: value of type 'iPhoneCameraStream' has no member 'healthBus'
 248 |
 249 |     public func connect(context: StreamConnectContext) async throws {
 250 |         self.healthBus = context.healthBus
     |              `- error: value of type 'iPhoneCameraStream' has no member 'healthBus'
 251 |         #if canImport(AVFoundation)
 252 |         try configureSession()
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:255:15: error: cannot find 'healthBus' in scope
 253 |         captureSession.startRunning()
 254 |         #endif
 255 |         await healthBus?.publish(.streamConnected(streamId: streamId))
     |               `- error: cannot find 'healthBus' in scope
 256 |     }
 257 |
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:255:35: error: cannot infer contextual base in reference to member 'streamConnected'
 253 |         captureSession.startRunning()
 254 |         #endif
 255 |         await healthBus?.publish(.streamConnected(streamId: streamId))
     |                                   `- error: cannot infer contextual base in reference to member 'streamConnected'
 256 |     }
 257 |
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:756:40: error: cannot find 'frameCount' in scope
 754 |         StreamIngestReport(streamId: streamId,
 755 |                            filePath: "\(streamId).mp4",
 756 |                            frameCount: frameCount)
     |                                        `- error: cannot find 'frameCount' in scope
 757 |     }
 758 |
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:772:15: error: cannot find 'healthBus' in scope
 770 |         selectedVideoDevice = nil
 771 |         #endif
 772 |         await healthBus?.publish(.streamDisconnected(streamId: streamId, reason: "normal"))
     |               `- error: cannot find 'healthBus' in scope
 773 |     }
 774 |
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:772:35: error: cannot infer contextual base in reference to member 'streamDisconnected'
 770 |         selectedVideoDevice = nil
 771 |         #endif
 772 |         await healthBus?.publish(.streamDisconnected(streamId: streamId, reason: "normal"))
     |                                   `- error: cannot infer contextual base in reference to member 'streamDisconnected'
 773 |     }
 774 |
[61/61] Compiling SyncField SyncField.swift
/host/spi-builder-workspace/Sources/SyncField/Streams/Tactile/TactileStream.swift:123:39: error: value of type 'TactilePeripheralRef' has no member 'identifier'
121 |                     let m = try await client.connectAndPrepare(ref, expectedSide: side)
122 |                     let claimed = await TactileRoleRegistry.shared
123 |                         .tryClaim(ref.identifier.uuidString, side: side)
    |                                       `- error: value of type 'TactilePeripheralRef' has no member 'identifier'
124 |                     guard claimed else {
125 |                         excluded.insert(ref.identifier)
/host/spi-builder-workspace/Sources/SyncField/Streams/Tactile/TactileStream.swift:125:45: error: value of type 'TactilePeripheralRef' has no member 'identifier'
123 |                         .tryClaim(ref.identifier.uuidString, side: side)
124 |                     guard claimed else {
125 |                         excluded.insert(ref.identifier)
    |                                             `- error: value of type 'TactilePeripheralRef' has no member 'identifier'
126 |                         client.disconnect()
127 |                         continue
/host/spi-builder-workspace/Sources/SyncField/Streams/Tactile/TactileStream.swift:151:42: error: type 'TactileBLEClient' has no member 'Error'
149 |                     await healthBus?.publish(.streamConnected(streamId: streamId))
150 |                     return  // success; auto-reconnect handles future drops
151 |                 } catch TactileBLEClient.Error.wrongSide {
    |                                          `- error: type 'TactileBLEClient' has no member 'Error'
152 |                     excluded.insert(ref.identifier)   // definitively the other side
153 |                     client.disconnect()
/host/spi-builder-workspace/Sources/SyncField/Streams/Tactile/TactileStream.swift:152:41: error: value of type 'TactilePeripheralRef' has no member 'identifier'
150 |                     return  // success; auto-reconnect handles future drops
151 |                 } catch TactileBLEClient.Error.wrongSide {
152 |                     excluded.insert(ref.identifier)   // definitively the other side
    |                                         `- error: value of type 'TactilePeripheralRef' has no member 'identifier'
153 |                     client.disconnect()
154 |                 } catch {
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:250:14: error: value of type 'iPhoneCameraStream' has no member 'healthBus'
 248 |
 249 |     public func connect(context: StreamConnectContext) async throws {
 250 |         self.healthBus = context.healthBus
     |              `- error: value of type 'iPhoneCameraStream' has no member 'healthBus'
 251 |         #if canImport(AVFoundation)
 252 |         try configureSession()
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:255:15: error: cannot find 'healthBus' in scope
 253 |         captureSession.startRunning()
 254 |         #endif
 255 |         await healthBus?.publish(.streamConnected(streamId: streamId))
     |               `- error: cannot find 'healthBus' in scope
 256 |     }
 257 |
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:255:35: error: cannot infer contextual base in reference to member 'streamConnected'
 253 |         captureSession.startRunning()
 254 |         #endif
 255 |         await healthBus?.publish(.streamConnected(streamId: streamId))
     |                                   `- error: cannot infer contextual base in reference to member 'streamConnected'
 256 |     }
 257 |
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:756:40: error: cannot find 'frameCount' in scope
 754 |         StreamIngestReport(streamId: streamId,
 755 |                            filePath: "\(streamId).mp4",
 756 |                            frameCount: frameCount)
     |                                        `- error: cannot find 'frameCount' in scope
 757 |     }
 758 |
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:772:15: error: cannot find 'healthBus' in scope
 770 |         selectedVideoDevice = nil
 771 |         #endif
 772 |         await healthBus?.publish(.streamDisconnected(streamId: streamId, reason: "normal"))
     |               `- error: cannot find 'healthBus' in scope
 773 |     }
 774 |
/host/spi-builder-workspace/Sources/SyncField/Streams/iPhoneCameraStream.swift:772:35: error: cannot infer contextual base in reference to member 'streamDisconnected'
 770 |         selectedVideoDevice = nil
 771 |         #endif
 772 |         await healthBus?.publish(.streamDisconnected(streamId: streamId, reason: "normal"))
     |                                   `- error: cannot infer contextual base in reference to member 'streamDisconnected'
 773 |     }
 774 |
BUILD FAILURE 6.2 android