Case
aiosendspin -> SendspinKit
Start the server first, then the client. The client advertises a listener, the server connects in, observes controller state, receives a control command, disconnects, and the matrix verifies the recorded command.
Server
aiosendspin
Client
SendspinKit
Status
Failed
Server summary status is 'error'
Inspection
Summaries, logs, and builds
Matrix result
RAW{
"case_dir": "artifacts/results/data/macos__server-initiated-controller__aiosendspin__to__SendspinKit",
"client_exit_code": 0,
"client_impl": "SendspinKit",
"reason": "Server summary status is 'error'",
"scenario_id": "server-initiated-controller",
"server_exit_code": 1,
"server_impl": "aiosendspin",
"status": "failed"
}Server summary (JSON)
RAW{
"implementation": "aiosendspin",
"reason": "Timed out waiting for client 'SendspinKit-client'",
"role": "server",
"scenario_id": "server-initiated-controller",
"status": "error"
}Server log
RAWINFO:aiosendspin.server.server:Starting Sendspin server on port 18998 INFO:aiosendspin.server.server:Sendspin server started successfully on 127.0.0.1:18998 WARNING:aiosendspin.server.server:No IP addresses available for mDNS advertising. Clients may not be able to discover this server. Consider specifying addresses manually via advertise_addresses. WARNING:aiosendspin.server.roles.controller.group:Received unsupported command MediaCommand.NEXT (supported: [<MediaCommand.VOLUME: 'volume'>, <MediaCommand.MUTE: 'mute'>, <MediaCommand.SWITCH: 'switch'>]) WARNING:aiosendspin.server.connection.SendspinKit-client-id:WebSocket closed, close_code=1006
Client summary (JSON)
RAW{
"client_id": "SendspinKit-client-id",
"client_name": "SendspinKit-client",
"controller": {
"received_state": {
"muted": false,
"supported_commands": [
"mute",
"switch",
"volume"
],
"volume": 100
},
"sent_command": {
"command": "next"
}
},
"implementation": "SendspinKit",
"initiator_role": "server",
"peer_hello": {
"payload": {
"connection_reason": "playback",
"name": "aiosendspin server",
"server_id": "aiosendspin-server",
"version": 1
},
"type": "server/hello"
},
"preferred_codec": "none",
"role": "client",
"scenario_id": "server-initiated-controller",
"server": {
"connection_reason": "playback",
"name": "aiosendspin server",
"server_id": "aiosendspin-server",
"version": 1
},
"status": "ok"
}Client log
RAW[ADAPTER] Listening for server connection on ws://127.0.0.1:19998/sendspin
[ADAPTER] Connected to server: aiosendspin server
[ADAPTER] Controller state: ["mute", "switch", "volume"]
[ADAPTER] Sent controller command: next
{
"client_id" : "SendspinKit-client-id",
"client_name" : "SendspinKit-client",
"controller" : {
"received_state" : {
"muted" : false,
"supported_commands" : [
"mute",
"switch",
"volume"
],
"volume" : 100
},
"sent_command" : {
"command" : "next"
}
},
"implementation" : "SendspinKit",
"initiator_role" : "server",
"peer_hello" : {
"payload" : {
"connection_reason" : "playback",
"name" : "aiosendspin server",
"server_id" : "aiosendspin-server",
"version" : 1
},
"type" : "server\/hello"
},
"preferred_codec" : "none",
"role" : "client",
"scenario_id" : "server-initiated-controller",
"server" : {
"connection_reason" : "playback",
"name" : "aiosendspin server",
"server_id" : "aiosendspin-server",
"version" : 1
},
"status" : "ok"
}
[ADAPTER] Summary written to artifacts/results/data/macos__server-initiated-controller__aiosendspin__to__SendspinKit/client-summary.json
Server build log · python-adapters · built · 0.07s
RAWListing 'src'... Listing 'src/conformance'... Listing 'src/conformance/adapters'... Compiling 'src/conformance/adapters/__init__.py'... Compiling 'src/conformance/adapters/aiosendspin_client.py'... Compiling 'src/conformance/adapters/aiosendspin_server.py'... Compiling 'src/conformance/adapters/placeholder.py'... Compiling 'src/conformance/adapters/sendspin_jvm_client.py'... Compiling 'src/conformance/cli.py'... Compiling 'src/conformance/merge.py'... Compiling 'src/conformance/registry.py'... Listing 'src/sendspin_conformance.egg-info'... Listing 'scripts'... Compiling 'scripts/detect_regressions.py'... Compiling 'scripts/merge_results.py'... Compiling 'scripts/run_all.py'... Compiling 'scripts/setup_repositories.py'... Compiling 'scripts/setup_workspace.py'...
Client build log · SendspinKit-client · built · 44.65s
RAWmpiling SendspinKit MonotonicClock.swift
[207/215] Compiling SendspinKit SendspinTimeFilter.swift
[208/215] Compiling SendspinKit TimeFilterSnapshot.swift
[209/215] Compiling SendspinKit NWWebSocketTransport.swift
[210/215] Compiling SendspinKit SendspinEncoding.swift
[211/215] Compiling SendspinKit SendspinTransport.swift
[212/215] Compiling SendspinKit WebSocketTransport.swift
[213/217] Compiling ConformanceSendspinKitClient main.swift
/Users/runner/work/conformance/conformance/adapters/SendspinKit/client/Sources/ConformanceSendspinKitClient/main.swift:176:13: warning: variable 'copy' was never mutated; consider changing to 'let' constant
174 |
175 | func hexdigest() -> String {
176 | var copy = hasher
| `- warning: variable 'copy' was never mutated; consider changing to 'let' constant
177 | return copy.finalize().map { String(format: "%02x", $0) }.joined()
178 | }
/Users/runner/work/conformance/conformance/adapters/SendspinKit/client/Sources/ConformanceSendspinKitClient/main.swift:236:13: warning: variable 'copy' was never mutated; consider changing to 'let' constant
234 |
235 | func hexdigest() -> String {
236 | var copy = hasher
| `- warning: variable 'copy' was never mutated; consider changing to 'let' constant
237 | return copy.finalize().map { String(format: "%02x", $0) }.joined()
238 | }
[214/217] Emitting module ConformanceSendspinKitClient
[214/217] Write Objects.LinkFileList
[215/217] Linking ConformanceSendspinKitClient
[216/217] Applying ConformanceSendspinKitClient
Build complete! (39.10s)
Fetching https://github.com/sbooth/flac-binary-xcframework.git
Fetching https://github.com/daltoniam/Starscream.git
[1/32] Fetching flac-binary-xcframework
[33/5140] Fetching flac-binary-xcframework, starscream
Fetched https://github.com/daltoniam/Starscream.git from cache (0.79s)
Fetched https://github.com/sbooth/flac-binary-xcframework.git from cache (0.79s)
Fetching https://github.com/sbooth/ogg-binary-xcframework.git
Fetching https://github.com/alta/swift-opus.git
[1/23] Fetching ogg-binary-xcframework
[24/806] Fetching ogg-binary-xcframework, swift-opus
Fetched https://github.com/alta/swift-opus.git from cache (0.53s)
Fetched https://github.com/sbooth/ogg-binary-xcframework.git from cache (0.53s)
Creating working copy for https://github.com/daltoniam/Starscream.git
Working copy of https://github.com/daltoniam/Starscream.git resolved at 4.0.8
Creating working copy for https://github.com/sbooth/ogg-binary-xcframework.git
Working copy of https://github.com/sbooth/ogg-binary-xcframework.git resolved at 0.1.3
Creating working copy for https://github.com/sbooth/flac-binary-xcframework.git
Working copy of https://github.com/sbooth/flac-binary-xcframework.git resolved at 0.2.0
Creating working copy for https://github.com/alta/swift-opus.git
Working copy of https://github.com/alta/swift-opus.git resolved at 0.0.2
Downloading binary artifact https://github.com/sbooth/ogg-binary-xcframework/releases/download/0.1.3/ogg.xcframework.zip
Downloading binary artifact https://github.com/sbooth/flac-binary-xcframework/releases/download/0.2.0/FLAC.xcframework.zip
[32768/3922418] Downloading https://github.com/sbooth/flac-binary-xcframework/releases/download/0.2.0/FLAC.xcframework.zip
[98277/4541165] Downloading https://github.com/sbooth/flac-binary-xcframework/releases/download/0.2.0/FLAC.xcframework.zip, https://github.com/sbooth/ogg-binary-xcframework/releases/download/0.1.3/ogg.xcframework.zip
Downloaded https://github.com/sbooth/ogg-binary-xcframework/releases/download/0.1.3/ogg.xcframework.zip (2.50s)
Downloaded https://github.com/sbooth/flac-binary-xcframework/releases/download/0.2.0/FLAC.xcframework.zip (2.94s)
warning: 'starscream': found 1 file(s) which are unhandled; explicitly declare them as resources or exclude from the target
/Users/runner/work/conformance/conformance/adapters/SendspinKit/client/.build/checkouts/Starscream/Sources/Info.plist