Case
aiosendspin -> sendspin-jvm
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-jvm
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-jvm",
"client_exit_code": 0,
"client_impl": "sendspin-jvm",
"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": 80000,
"sent_encoded_sha256": "b3481a3f75dea856a961e7842d12f8344c7147b3925f9f0b67c5445700bd4cf2",
"source_flac_sha256": "8fdda8244e318c63cd8b699fe461cd7cdddbb729327a0ba00d1bfdbe2192fe17",
"source_pcm_sha256": "9d447b5b270bc99b45bb9a616937e436c941ca56c477f9cbe16a93275a6b059e",
"trimmed_source_frames": 0
},
"client": {
"active_roles": [
"player@v1",
"controller@v1",
"metadata@v1",
"artwork@v1",
"color@v1"
],
"client_id": "sendspin-jvm-client-id",
"name": "sendspin-jvm-client",
"supported_roles": [
"player@v1",
"metadata@v1",
"artwork@v1",
"controller@v1",
"color@v1"
]
},
"discovery_method": "registry_advertised",
"implementation": "aiosendspin",
"initiator_role": "client",
"peer_hello": {
"payload": {
"artwork@v1_support": {
"channels": [
{
"format": "jpeg",
"media_height": 256,
"media_width": 256,
"source": "album"
}
]
},
"client_id": "sendspin-jvm-client-id",
"device_info": {
"manufacturer": "conformance",
"product_name": "conformance-client",
"software_version": "1.0"
},
"name": "sendspin-jvm-client",
"player@v1_support": {
"buffer_capacity": 262144,
"supported_commands": [
"volume",
"mute"
],
"supported_formats": [
{
"bit_depth": 16,
"channels": 1,
"codec": "pcm",
"sample_rate": 8000
},
{
"bit_depth": 16,
"channels": 2,
"codec": "pcm",
"sample_rate": 48000
}
]
},
"supported_roles": [
"player@v1",
"metadata@v1",
"artwork@v1",
"controller@v1",
"color@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": "w26s3UGEWzvGGtFJuwSRcUG-0UsclemQBGMJJnjHAzU",
"server_name": "aiosendspin server",
"status": "ok",
"stream": {
"bit_depth": 16,
"channels": 1,
"codec": "pcm",
"codec_header": null,
"sample_rate": 8000
}
}Server log
RAWINFO:aiosendspin.server.server:Starting Sendspin server on port 18932
INFO:aiosendspin.server.server:Sendspin server started successfully on 127.0.0.1:18932
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)
{
"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": 80000,
"sent_encoded_sha256": "b3481a3f75dea856a961e7842d12f8344c7147b3925f9f0b67c5445700bd4cf2",
"source_flac_sha256": "8fdda8244e318c63cd8b699fe461cd7cdddbb729327a0ba00d1bfdbe2192fe17",
"source_pcm_sha256": "9d447b5b270bc99b45bb9a616937e436c941ca56c477f9cbe16a93275a6b059e",
"trimmed_source_frames": 0
},
"client": {
"active_roles": [
"player@v1",
"controller@v1",
"metadata@v1",
"artwork@v1",
"color@v1"
],
"client_id": "sendspin-jvm-client-id",
"name": "sendspin-jvm-client",
"supported_roles": [
"player@v1",
"metadata@v1",
"artwork@v1",
"controller@v1",
"color@v1"
]
},
"discovery_method": "registry_advertised",
"implementation": "aiosendspin",
"initiator_role": "client",
"peer_hello": {
"payload": {
"artwork@v1_support": {
"channels": [
{
"format": "jpeg",
"media_height": 256,
"media_width": 256,
"source": "album"
}
]
},
"client_id": "sendspin-jvm-client-id",
"device_info": {
"manufacturer": "conformance",
"product_name": "conformance-client",
"software_version": "1.0"
},
"name": "sendspin-jvm-client",
"player@v1_support": {
"buffer_capacity": 262144,
"supported_commands": [
"volume",
"mute"
],
"supported_formats": [
{
"bit_depth": 16,
"channels": 1,
"codec": "pcm",
"sample_rate": 8000
},
{
"bit_depth": 16,
"channels": 2,
"codec": "pcm",
"sample_rate": 48000
}
]
},
"supported_roles": [
"player@v1",
"metadata@v1",
"artwork@v1",
"controller@v1",
"color@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": "w26s3UGEWzvGGtFJuwSRcUG-0UsclemQBGMJJnjHAzU",
"server_name": "aiosendspin server",
"status": "ok",
"stream": {
"bit_depth": 16,
"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 0x10b682f30>
Client summary (JSON)
RAW{
"audio": {
"audio_chunk_count": 200,
"received_encoded_sha256": "b3481a3f75dea856a961e7842d12f8344c7147b3925f9f0b67c5445700bd4cf2",
"received_pcm_sha256": "9d447b5b270bc99b45bb9a616937e436c941ca56c477f9cbe16a93275a6b059e",
"received_sample_count": 40000
},
"client_id": "sendspin-jvm-client-id",
"client_name": "sendspin-jvm-client",
"implementation": "sendspin-jvm",
"initiator_role": "client",
"peer_hello": {
"active_roles": [
"player@v1",
"controller@v1",
"metadata@v1",
"artwork@v1",
"color@v1"
],
"connection_reason": "discovery",
"name": "aiosendspin server",
"server_id": "w26s3UGEWzvGGtFJuwSRcUG-0UsclemQBGMJJnjHAzU",
"version": 1
},
"preferred_codec": "pcm",
"role": "client",
"scenario_id": "client-initiated-pcm",
"server": null,
"status": "ok",
"stream": {
"bit_depth": 16,
"channels": 1,
"codec": "pcm",
"codec_header": null,
"sample_rate": 8000
}
}Client log
RAWJul 21, 2026 5:29:38 AM com.sendspin.protocol.ProtocolLog i
INFO: SendSpinClient: connecting to ws://127.0.0.1:18932/sendspin
Jul 21, 2026 5:29:38 AM com.sendspin.protocol.ProtocolLog i
INFO: SendSpinClient: WebSocket open
Jul 21, 2026 5:29:38 AM com.sendspin.protocol.ProtocolLog i
INFO: SendSpinClient: server hello from 'aiosendspin server' reason=discovery
Jul 21, 2026 5:29:38 AM com.sendspin.protocol.ProtocolLog i
INFO: SendSpinClient: stream/start codec=pcm
Jul 21, 2026 5:29:38 AM com.sendspin.protocol.ProtocolLog i
INFO: SendSpinClient: first audio chunk — ts=955619913 size=400 bufferSize=0
Jul 21, 2026 5:29:45 AM com.sendspin.protocol.ProtocolLog i
INFO: SendSpinClient: closing (1000 )
Jul 21, 2026 5:29:45 AM com.sendspin.protocol.ProtocolLog i
INFO: SendSpinClient: closed (1000 )
{
"server": null,
"initiator_role": "client",
"role": "client",
"preferred_codec": "pcm",
"stream": {
"codec": "pcm",
"codec_header": null,
"sample_rate": 8000,
"channels": 1,
"bit_depth": 16
},
"peer_hello": {
"active_roles": [
"player@v1",
"controller@v1",
"metadata@v1",
"artwork@v1",
"color@v1"
],
"name": "aiosendspin server",
"connection_reason": "discovery",
"server_id": "w26s3UGEWzvGGtFJuwSRcUG-0UsclemQBGMJJnjHAzU",
"version": 1
},
"implementation": "sendspin-jvm",
"audio": {
"audio_chunk_count": 200,
"received_encoded_sha256": "b3481a3f75dea856a961e7842d12f8344c7147b3925f9f0b67c5445700bd4cf2",
"received_pcm_sha256": "9d447b5b270bc99b45bb9a616937e436c941ca56c477f9cbe16a93275a6b059e",
"received_sample_count": 40000
},
"client_name": "sendspin-jvm-client",
"client_id": "sendspin-jvm-client-id",
"scenario_id": "client-initiated-pcm",
"status": "ok"
}
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-jvm-client · built · 91.75s
RAWDownloading https://services.gradle.org/distributions/gradle-9.4.1-bin.zip .............10%.............20%.............30%.............40%.............50%.............60%..............70%.............80%.............90%.............100% Welcome to Gradle 9.4.1! Here are the highlights of this release: - Java 26 support - Non-class-based JVM tests - Enhanced console progress bar For more details see https://docs.gradle.org/9.4.1/release-notes.html Starting a Gradle Daemon (subsequent builds will be faster) > Task :checkKotlinGradlePluginConfigurationErrors SKIPPED > Task :sendspin-protocol:checkKotlinGradlePluginConfigurationErrors SKIPPED > Task :processResources NO-SOURCE > Task :sendspin-protocol:kspKotlin > Task :sendspin-protocol:processResources > Task :sendspin-protocol:compileKotlin > Task :sendspin-protocol:compileJava NO-SOURCE > Task :sendspin-protocol:classes > Task :sendspin-protocol:jar > Task :compileKotlin > Task :compileJava NO-SOURCE > Task :classes UP-TO-DATE > Task :jar [Incubating] Problems report is available at: file:///Users/runner/work/conformance/conformance/adapters/sendspin-jvm/client/build/reports/problems/problems-report.html Deprecated Gradle features were used in this build, making it incompatible with Gradle 10. You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins. For more on this, please refer to https://docs.gradle.org/9.4.1/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation. BUILD SUCCESSFUL in 1m 29s 6 actionable tasks: 6 executed Consider enabling configuration cache to speed up this build: https://docs.gradle.org/9.4.1/userguide/configuration_cache_enabling.html