Case
aiosendspin -> sendspin-go
Start the server first, then the client. The client discovers or looks up the server, initiates the WebSocket connection, advertises PCM as its only supported audio format, streams audio derived from almost_silent.flac, and compares canonical PCM hashes.
Server
aiosendspin
Client
sendspin-go
Status
Passed
PCM hashes match exactly
Inspection
Summaries, logs, and builds
Matrix result
RAW{
"case_dir": "artifacts/results/data/macos__client-initiated-pcm__aiosendspin__to__sendspin-go",
"client_exit_code": 0,
"client_impl": "sendspin-go",
"reason": "PCM hashes match exactly",
"scenario_id": "client-initiated-pcm",
"server_exit_code": 0,
"server_impl": "aiosendspin",
"status": "passed"
}Server summary (JSON)
RAW{
"audio": {
"bit_depth": 16,
"channels": 1,
"clip_seconds": 5.0,
"duration_seconds": 5.0,
"fixture": "/Users/runner/work/conformance/conformance/repos/sendspin-cli/tests/fixtures/almost_silent.flac",
"frame_alignment_samples": null,
"frame_count": 40000,
"sample_rate": 8000,
"sent_audio_chunk_count": 200,
"sent_codec_header_sha256": null,
"sent_encoded_byte_count": 120000,
"sent_encoded_sha256": "89717d918d5c5c6a80b397c324ba238f09a860d166a105394e17c0df28e91472",
"source_flac_sha256": "8fdda8244e318c63cd8b699fe461cd7cdddbb729327a0ba00d1bfdbe2192fe17",
"source_pcm_sha256": "9d447b5b270bc99b45bb9a616937e436c941ca56c477f9cbe16a93275a6b059e",
"trimmed_source_frames": 0
},
"client": {
"active_roles": [
"player@v1",
"controller@v1",
"metadata@v1"
],
"client_id": "sendspin-go-client-id",
"name": "sendspin-go-client",
"supported_roles": [
"player@v1",
"metadata@v1",
"controller@v1"
]
},
"discovery_method": "registry_advertised",
"implementation": "aiosendspin",
"initiator_role": "client",
"peer_hello": {
"payload": {
"client_id": "sendspin-go-client-id",
"device_info": {
"manufacturer": "Sendspin Conformance",
"product_name": "sendspin-go Conformance Client",
"software_version": "0.1.0"
},
"name": "sendspin-go-client",
"player@v1_support": {
"buffer_capacity": 2000000,
"supported_commands": [
"volume",
"mute"
],
"supported_formats": [
{
"bit_depth": 24,
"channels": 1,
"codec": "pcm",
"sample_rate": 8000
},
{
"bit_depth": 16,
"channels": 1,
"codec": "pcm",
"sample_rate": 8000
}
]
},
"supported_roles": [
"player@v1",
"metadata@v1",
"controller@v1"
],
"trust_level": "none",
"unpaired_access": {
"enabled": false
},
"version": 1
},
"type": "client/hello"
},
"preferred_codec": "pcm",
"role": "server",
"scenario_id": "client-initiated-pcm",
"server_id": "0NiUfSNvoWI6tb--QZB0a7I5MbG0894L6YycjpK1lQU",
"server_name": "aiosendspin server",
"status": "ok",
"stream": {
"bit_depth": 24,
"channels": 1,
"codec": "pcm",
"codec_header": null,
"sample_rate": 8000
}
}Server log
RAWINFO:aiosendspin.server.server:Starting Sendspin server on port 18930
INFO:aiosendspin.server.server:Sendspin server started successfully on 127.0.0.1:18930
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.connection.unknown-127.0.0.1:Accepting unencrypted legacy connection (transition mode)
INFO:aiosendspin.server.client.sendspin-go-client-id:non-compliant client: initial client/state omitted the required 'available' field
INFO:aiosendspin.server.client.sendspin-go-client-id:non-compliant client: initial client/state omitted required player timing fields
INFO:aiosendspin.server.client.sendspin-go-client-id:non-compliant client: initial client/state omitted muted despite declaring the mute command
INFO:aiosendspin.server.client.sendspin-go-client-id:non-compliant client: client/state used legacy player.state instead of top-level available
{
"audio": {
"bit_depth": 16,
"channels": 1,
"clip_seconds": 5.0,
"duration_seconds": 5.0,
"fixture": "/Users/runner/work/conformance/conformance/repos/sendspin-cli/tests/fixtures/almost_silent.flac",
"frame_alignment_samples": null,
"frame_count": 40000,
"sample_rate": 8000,
"sent_audio_chunk_count": 200,
"sent_codec_header_sha256": null,
"sent_encoded_byte_count": 120000,
"sent_encoded_sha256": "89717d918d5c5c6a80b397c324ba238f09a860d166a105394e17c0df28e91472",
"source_flac_sha256": "8fdda8244e318c63cd8b699fe461cd7cdddbb729327a0ba00d1bfdbe2192fe17",
"source_pcm_sha256": "9d447b5b270bc99b45bb9a616937e436c941ca56c477f9cbe16a93275a6b059e",
"trimmed_source_frames": 0
},
"client": {
"active_roles": [
"player@v1",
"controller@v1",
"metadata@v1"
],
"client_id": "sendspin-go-client-id",
"name": "sendspin-go-client",
"supported_roles": [
"player@v1",
"metadata@v1",
"controller@v1"
]
},
"discovery_method": "registry_advertised",
"implementation": "aiosendspin",
"initiator_role": "client",
"peer_hello": {
"payload": {
"client_id": "sendspin-go-client-id",
"device_info": {
"manufacturer": "Sendspin Conformance",
"product_name": "sendspin-go Conformance Client",
"software_version": "0.1.0"
},
"name": "sendspin-go-client",
"player@v1_support": {
"buffer_capacity": 2000000,
"supported_commands": [
"volume",
"mute"
],
"supported_formats": [
{
"bit_depth": 24,
"channels": 1,
"codec": "pcm",
"sample_rate": 8000
},
{
"bit_depth": 16,
"channels": 1,
"codec": "pcm",
"sample_rate": 8000
}
]
},
"supported_roles": [
"player@v1",
"metadata@v1",
"controller@v1"
],
"trust_level": "none",
"unpaired_access": {
"enabled": false
},
"version": 1
},
"type": "client/hello"
},
"preferred_codec": "pcm",
"role": "server",
"scenario_id": "client-initiated-pcm",
"server_id": "0NiUfSNvoWI6tb--QZB0a7I5MbG0894L6YycjpK1lQU",
"server_name": "aiosendspin server",
"status": "ok",
"stream": {
"bit_depth": 24,
"channels": 1,
"codec": "pcm",
"codec_header": null,
"sample_rate": 8000
}
}
WARNING:root:server.close() timed out after 5s; continuing shutdown
ERROR:asyncio:Unclosed client session
client_session: <aiohttp.client.ClientSession object at 0x10728ee10>
Client summary (JSON)
RAW{
"audio": {
"audio_chunk_count": 200,
"received_encoded_sha256": "89717d918d5c5c6a80b397c324ba238f09a860d166a105394e17c0df28e91472",
"received_pcm_sha256": "9d447b5b270bc99b45bb9a616937e436c941ca56c477f9cbe16a93275a6b059e",
"received_sample_count": 40000
},
"client_id": "sendspin-go-client-id",
"client_name": "sendspin-go-client",
"implementation": "sendspin-go",
"initiator_role": "client",
"peer_hello": {
"active_roles": [
"player@v1"
],
"connection_reason": "playback",
"name": "aiosendspin server",
"server_id": "aiosendspin-server",
"version": 1
},
"preferred_codec": "pcm",
"role": "client",
"scenario_id": "client-initiated-pcm",
"server": {
"active_roles": [
"player@v1"
],
"connection_reason": "playback",
"name": "aiosendspin server",
"server_id": "aiosendspin-server",
"version": 1
},
"status": "ok",
"stream": {
"bit_depth": 24,
"channels": 1,
"codec": "pcm",
"codec_header": "",
"sample_rate": 8000
}
}Client log
RAW2026/07/21 05:29:24.007077 Connecting to ws://127.0.0.1:18930/sendspin
2026/07/21 05:29:24.028257 Handshake complete with server
2026/07/21 05:29:24.034115 Metadata: - ()
2026/07/21 05:29:24.034230 Group update: id=ab154b0a-cfb5-428f-9301-a2b8dfe7481e, state=stopped
2026/07/21 05:29:24.190081 Group update: id=ab154b0a-cfb5-428f-9301-a2b8dfe7481e, state=playing
2026/07/21 05:29:29.910244 Group update: id=ab154b0a-cfb5-428f-9301-a2b8dfe7481e, state=stopped
2026/07/21 05:29:30.415840 Read error: websocket: close 1000 (normal)
2026/07/21 05:29:30.416074 Connection closed
{
"audio": {
"audio_chunk_count": 200,
"received_encoded_sha256": "89717d918d5c5c6a80b397c324ba238f09a860d166a105394e17c0df28e91472",
"received_pcm_sha256": "9d447b5b270bc99b45bb9a616937e436c941ca56c477f9cbe16a93275a6b059e",
"received_sample_count": 40000
},
"client_id": "sendspin-go-client-id",
"client_name": "sendspin-go-client",
"implementation": "sendspin-go",
"initiator_role": "client",
"peer_hello": {
"active_roles": [
"player@v1"
],
"connection_reason": "playback",
"name": "aiosendspin server",
"server_id": "aiosendspin-server",
"version": 1
},
"preferred_codec": "pcm",
"role": "client",
"scenario_id": "client-initiated-pcm",
"server": {
"active_roles": [
"player@v1"
],
"connection_reason": "playback",
"name": "aiosendspin server",
"server_id": "aiosendspin-server",
"version": 1
},
"status": "ok",
"stream": {
"bit_depth": 24,
"channels": 1,
"codec": "pcm",
"codec_header": "",
"sample_rate": 8000
}
}
Server build log · python-adapters · built · 0.20s
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 · sendspin-go-client · built · 2.17s
RAWNo build detail was recorded.