Case
aiosendspin -> sendspin-js
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-js
Status
Failed
PCM hash mismatch: server=9d447b5b270bc99b45bb9a616937e436c941ca56c477f9cbe16a93275a6b059e client=d601ec75c603f35c4b7ae8583e3a93828e9ad076a74f032e26a3a96385d921f9
Inspection
Summaries, logs, and builds
Matrix result
RAW{
"case_dir": "artifacts/results/data/macos__client-initiated-pcm__aiosendspin__to__sendspin-js",
"client_exit_code": 0,
"client_impl": "sendspin-js",
"reason": "PCM hash mismatch: server=9d447b5b270bc99b45bb9a616937e436c941ca56c477f9cbe16a93275a6b059e client=d601ec75c603f35c4b7ae8583e3a93828e9ad076a74f032e26a3a96385d921f9",
"scenario_id": "client-initiated-pcm",
"server_exit_code": 0,
"server_impl": "aiosendspin",
"status": "failed"
}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": 199,
"sent_codec_header_sha256": null,
"sent_encoded_byte_count": 955200,
"sent_encoded_sha256": "fde28f16c1fe19351b91eb3f21a5d6cbc7ca4e5c952ce3063b377a264e28b158",
"source_flac_sha256": "8fdda8244e318c63cd8b699fe461cd7cdddbb729327a0ba00d1bfdbe2192fe17",
"source_pcm_sha256": "9d447b5b270bc99b45bb9a616937e436c941ca56c477f9cbe16a93275a6b059e",
"trimmed_source_frames": 0
},
"client": {
"active_roles": [
"player@v1",
"controller@v1",
"metadata@v1"
],
"client_id": "sendspin-js-client-id",
"name": "sendspin-js-client",
"supported_roles": [
"player@v1",
"controller@v1",
"metadata@v1"
]
},
"discovery_method": "registry_advertised",
"implementation": "aiosendspin",
"initiator_role": "client",
"peer_hello": {
"payload": {
"client_id": "sendspin-js-client-id",
"device_info": {
"manufacturer": "Unknown",
"product_name": "Web Browser",
"software_version": "Node.js/22"
},
"name": "sendspin-js-client",
"player@v1_support": {
"buffer_capacity": 5242880,
"supported_commands": [
"volume",
"mute"
],
"supported_formats": [
{
"bit_depth": 16,
"channels": 2,
"codec": "pcm",
"sample_rate": 48000
},
{
"bit_depth": 16,
"channels": 2,
"codec": "pcm",
"sample_rate": 44100
}
]
},
"supported_roles": [
"player@v1",
"controller@v1",
"metadata@v1"
],
"version": 1
},
"type": "client/hello"
},
"preferred_codec": "pcm",
"role": "server",
"scenario_id": "client-initiated-pcm",
"server_id": "aiosendspin-server",
"server_name": "aiosendspin server",
"status": "ok",
"stream": {
"bit_depth": 16,
"channels": 2,
"codec": "pcm",
"codec_header": null,
"sample_rate": 48000
}
}Server log
RAWINFO:aiosendspin.server.server:Starting Sendspin server on port 18931
INFO:aiosendspin.server.server:Sendspin server started successfully on 127.0.0.1:18931
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.
{
"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": 199,
"sent_codec_header_sha256": null,
"sent_encoded_byte_count": 955200,
"sent_encoded_sha256": "fde28f16c1fe19351b91eb3f21a5d6cbc7ca4e5c952ce3063b377a264e28b158",
"source_flac_sha256": "8fdda8244e318c63cd8b699fe461cd7cdddbb729327a0ba00d1bfdbe2192fe17",
"source_pcm_sha256": "9d447b5b270bc99b45bb9a616937e436c941ca56c477f9cbe16a93275a6b059e",
"trimmed_source_frames": 0
},
"client": {
"active_roles": [
"player@v1",
"controller@v1",
"metadata@v1"
],
"client_id": "sendspin-js-client-id",
"name": "sendspin-js-client",
"supported_roles": [
"player@v1",
"controller@v1",
"metadata@v1"
]
},
"discovery_method": "registry_advertised",
"implementation": "aiosendspin",
"initiator_role": "client",
"peer_hello": {
"payload": {
"client_id": "sendspin-js-client-id",
"device_info": {
"manufacturer": "Unknown",
"product_name": "Web Browser",
"software_version": "Node.js/22"
},
"name": "sendspin-js-client",
"player@v1_support": {
"buffer_capacity": 5242880,
"supported_commands": [
"volume",
"mute"
],
"supported_formats": [
{
"bit_depth": 16,
"channels": 2,
"codec": "pcm",
"sample_rate": 48000
},
{
"bit_depth": 16,
"channels": 2,
"codec": "pcm",
"sample_rate": 44100
}
]
},
"supported_roles": [
"player@v1",
"controller@v1",
"metadata@v1"
],
"version": 1
},
"type": "client/hello"
},
"preferred_codec": "pcm",
"role": "server",
"scenario_id": "client-initiated-pcm",
"server_id": "aiosendspin-server",
"server_name": "aiosendspin server",
"status": "ok",
"stream": {
"bit_depth": 16,
"channels": 2,
"codec": "pcm",
"codec_header": null,
"sample_rate": 48000
}
}
INFO:aiohttp.access:127.0.0.1 [16/May/2026:05:35:11 +0000] "GET /sendspin HTTP/1.1" 101 0 "-" "-"
Client summary (JSON)
RAW{
"audio": {
"audio_chunk_count": 199,
"received_encoded_sha256": null,
"received_pcm_sha256": "d601ec75c603f35c4b7ae8583e3a93828e9ad076a74f032e26a3a96385d921f9",
"received_sample_count": 477600
},
"client_id": "sendspin-js-client-id",
"client_name": "sendspin-js-client",
"implementation": "sendspin-js",
"initiator_role": "client",
"peer_hello": {
"payload": {
"active_roles": [
"player@v1",
"controller@v1",
"metadata@v1"
],
"connection_reason": "discovery",
"name": "aiosendspin server",
"server_id": "aiosendspin-server",
"version": 1
},
"type": "server/hello"
},
"preferred_codec": "pcm",
"role": "client",
"scenario_id": "client-initiated-pcm",
"server": {
"active_roles": [
"player@v1",
"controller@v1",
"metadata@v1"
],
"connection_reason": "discovery",
"name": "aiosendspin server",
"server_id": "aiosendspin-server",
"version": 1
},
"status": "ok",
"stream": {
"bit_depth": 16,
"channels": 2,
"codec": "pcm",
"sample_rate": 48000
}
}Client log
RAWSendspin: Adopted WebSocket connected
Sendspin: Using player_id: sendspin-js-client-id
[Opus] Native decoder not available, falling back to FLAC/PCM
Sendspin: Connected to server
Sendspin: Stream started { codec: 'pcm', sample_rate: 48000, channels: 2, bit_depth: 16 }
Sendspin: Codec=PCM, SampleRate=48000Hz, Channels=2, BitDepth=16bit
Sendspin: Stream ended
Sendspin: WebSocket disconnected
Sendspin: Connection closed
{
"status": "ok",
"implementation": "sendspin-js",
"role": "client",
"scenario_id": "client-initiated-pcm",
"initiator_role": "client",
"preferred_codec": "pcm",
"client_id": "sendspin-js-client-id",
"client_name": "sendspin-js-client",
"peer_hello": {
"payload": {
"server_id": "aiosendspin-server",
"name": "aiosendspin server",
"version": 1,
"active_roles": [
"player@v1",
"controller@v1",
"metadata@v1"
],
"connection_reason": "discovery"
},
"type": "server/hello"
},
"server": {
"server_id": "aiosendspin-server",
"name": "aiosendspin server",
"version": 1,
"active_roles": [
"player@v1",
"controller@v1",
"metadata@v1"
],
"connection_reason": "discovery"
},
"stream": {
"codec": "pcm",
"sample_rate": 48000,
"channels": 2,
"bit_depth": 16
},
"audio": {
"audio_chunk_count": 199,
"received_encoded_sha256": null,
"received_pcm_sha256": "d601ec75c603f35c4b7ae8583e3a93828e9ad076a74f032e26a3a96385d921f9",
"received_sample_count": 477600
}
}
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 · sendspin-js-adapters · built · 70.92s
RAWNo build detail was recorded.