Case
sendspin-go -> 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
sendspin-go
Client
sendspin-js
Status
Passed
PCM hashes match exactly
Inspection
Summaries, logs, and builds
Matrix result
RAW{
"case_dir": "artifacts/results/data/macos__client-initiated-pcm__sendspin-go__to__sendspin-js",
"client_exit_code": 0,
"client_impl": "sendspin-js",
"reason": "PCM hashes match exactly",
"scenario_id": "client-initiated-pcm",
"server_exit_code": 0,
"server_impl": "sendspin-go",
"status": "passed"
}Server summary (JSON)
RAW{
"audio": {
"bit_depth": 24,
"channels": 1,
"clip_seconds": 5,
"duration_seconds": 5,
"fixture": "/Users/runner/work/conformance/conformance/repos/sendspin-cli/tests/fixtures/almost_silent.flac",
"frame_count": 40000,
"sample_rate": 8000,
"sent_audio_chunk_count": 100,
"sent_encoded_byte_count": 120000,
"sent_encoded_sha256": "1381746b39db270f4e69e48927e28097c5d1afca35e392482f214db8bd9dccf2",
"source_flac_sha256": "8fdda8244e318c63cd8b699fe461cd7cdddbb729327a0ba00d1bfdbe2192fe17",
"source_pcm_sha256": "f9ae8fe5e6c34fc6baa67cbb4a97224d777a0bfacf6d996449be1054824f66bf"
},
"client": {
"client_id": "sendspin-js-client-id",
"name": "sendspin-js-client",
"supported_roles": [
"player@v1",
"controller@v1",
"metadata@v1"
]
},
"discovery_method": "registry_advertised",
"implementation": "sendspin-go",
"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": "sendspin-go-server",
"server_name": "sendspin-go server",
"status": "ok",
"stream": {
"bit_depth": 24,
"channels": 1,
"codec": "pcm",
"sample_rate": 8000
}
}Server log
RAW{
"audio": {
"bit_depth": 24,
"channels": 1,
"clip_seconds": 5,
"duration_seconds": 5,
"fixture": "/Users/runner/work/conformance/conformance/repos/sendspin-cli/tests/fixtures/almost_silent.flac",
"frame_count": 40000,
"sample_rate": 8000,
"sent_audio_chunk_count": 100,
"sent_encoded_byte_count": 120000,
"sent_encoded_sha256": "1381746b39db270f4e69e48927e28097c5d1afca35e392482f214db8bd9dccf2",
"source_flac_sha256": "8fdda8244e318c63cd8b699fe461cd7cdddbb729327a0ba00d1bfdbe2192fe17",
"source_pcm_sha256": "f9ae8fe5e6c34fc6baa67cbb4a97224d777a0bfacf6d996449be1054824f66bf"
},
"client": {
"client_id": "sendspin-js-client-id",
"name": "sendspin-js-client",
"supported_roles": [
"player@v1",
"controller@v1",
"metadata@v1"
]
},
"discovery_method": "registry_advertised",
"implementation": "sendspin-go",
"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": "sendspin-go-server",
"server_name": "sendspin-go server",
"status": "ok",
"stream": {
"bit_depth": 24,
"channels": 1,
"codec": "pcm",
"sample_rate": 8000
}
}
Client summary (JSON)
RAW{
"audio": {
"audio_chunk_count": 100,
"received_encoded_sha256": null,
"received_pcm_sha256": "f9ae8fe5e6c34fc6baa67cbb4a97224d777a0bfacf6d996449be1054824f66bf",
"received_sample_count": 40000
},
"client_id": "sendspin-js-client-id",
"client_name": "sendspin-js-client",
"implementation": "sendspin-js",
"initiator_role": "client",
"peer_hello": {
"payload": {
"active_roles": [
"player@v1",
"metadata@v1"
],
"connection_reason": "playback",
"name": "sendspin-go server",
"server_id": "sendspin-go-server",
"version": 1
},
"type": "server/hello"
},
"preferred_codec": "pcm",
"role": "client",
"scenario_id": "client-initiated-pcm",
"server": {
"active_roles": [
"player@v1",
"metadata@v1"
],
"connection_reason": "playback",
"name": "sendspin-go server",
"server_id": "sendspin-go-server",
"version": 1
},
"status": "ok",
"stream": {
"bit_depth": 24,
"channels": 1,
"codec": "pcm",
"sample_rate": 8000
}
}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: 8000, channels: 1, bit_depth: 24 }
Sendspin: Codec=PCM, SampleRate=8000Hz, Channels=1, BitDepth=24bit
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": {
"type": "server/hello",
"payload": {
"server_id": "sendspin-go-server",
"name": "sendspin-go server",
"version": 1,
"active_roles": [
"player@v1",
"metadata@v1"
],
"connection_reason": "playback"
}
},
"server": {
"server_id": "sendspin-go-server",
"name": "sendspin-go server",
"version": 1,
"active_roles": [
"player@v1",
"metadata@v1"
],
"connection_reason": "playback"
},
"stream": {
"codec": "pcm",
"sample_rate": 8000,
"channels": 1,
"bit_depth": 24
},
"audio": {
"audio_chunk_count": 100,
"received_encoded_sha256": null,
"received_pcm_sha256": "f9ae8fe5e6c34fc6baa67cbb4a97224d777a0bfacf6d996449be1054824f66bf",
"received_sample_count": 40000
}
}