Case
aiosendspin -> sendspin-js
Start the server first, then the client. The server uses aiosendspin's allow_unencrypted mode to test clients that do not yet support the required Noise handshake. This mode is outside the spec and sends traffic without encryption. The test can be removed once all tracked implementations support the Noise handshake.
Server
aiosendspin
Client
sendspin-js
Status
Failed
PCM hash mismatch: client received 477600 of 40000 samples (437600 more); server=9d447b5b270bc99b45bb9a616937e436c941ca56c477f9cbe16a93275a6b059e client=d601ec75c603f35c4b7ae8583e3a93828e9ad076a74f032e26a3a96385d921f9
Server activation
Initial server/activate
What the aiosendspin server's own adapter recorded for its first server/activate on this connection, reported as sent. The case fails when none was sent, when its activities are not unique values from playback and pairing, or when it omits active_roles. Nothing else in it is checked against the specification: which activities and roles the matched PSK allows is not judged. A recording that cannot be read as that message is shown whole and not judged either.
Server group state
Every group/update after activation
What the aiosendspin server's own adapter recorded for each group/update it sent after its first server/activate on this connection, in order and reported as sent. The case fails when none followed, or when in any of them playback_state is not playing or stopped, or group_id or group_name is missing or not a string. How soon the first followed is not judged, because the specification says promptly and gives no bound, so one sent at any point in the case counts. Whether a change to a field produced a further message is not judged either. A recording of anything other than that message is shown whole and fails the case as a harness gap.
1 of 3
2 of 3
3 of 3
Inspection
Summaries, logs, and builds
Matrix result
RAW{
"case_dir": "artifacts/results/data/macos__server-initiated-legacy-unencrypted__aiosendspin__to__sendspin-js",
"client_exit_code": 0,
"client_impl": "sendspin-js",
"reason": "PCM hash mismatch: client received 477600 of 40000 samples (437600 more); server=9d447b5b270bc99b45bb9a616937e436c941ca56c477f9cbe16a93275a6b059e client=d601ec75c603f35c4b7ae8583e3a93828e9ad076a74f032e26a3a96385d921f9",
"scenario_id": "server-initiated-legacy-unencrypted",
"scenario_revision": 6,
"server_exit_code": 0,
"server_impl": "aiosendspin",
"status": "failed",
"unsupported": false
}Server summary (JSON)
RAW{
"activation": {
"payload": {
"active_roles": [
"player@v1",
"controller@v1",
"metadata@v1"
],
"activities": [
"playback"
]
},
"type": "server/activate"
},
"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
},
"availability_trace": [
{
"available": true,
"type": "client/state"
},
{
"phase": "sending",
"roles": [
"player"
],
"type": "stream/start"
},
{
"phase": "sent",
"roles": [
"player"
],
"type": "stream/start"
},
{
"available": true,
"type": "client/state"
},
{
"available": true,
"type": "client/state"
}
],
"client": {
"active_roles": [
"player@v1",
"controller@v1",
"metadata@v1"
],
"client_id": "xDcTkgV_N8cuhrWX7CAPhLZowRUUWZD7_i_tS7zr8iA",
"name": "sendspin-js-client",
"supported_roles": [
"player@v1",
"controller@v1",
"metadata@v1"
]
},
"discovery_method": "registry_fallback",
"group_updates": [
{
"payload": {
"group_id": "81999265-5218-4de3-960a-c2beb181420e",
"group_name": "sendspin-js-client",
"playback_state": "stopped"
},
"type": "group/update"
},
{
"payload": {
"group_id": "81999265-5218-4de3-960a-c2beb181420e",
"group_name": "sendspin-js-client",
"playback_state": "playing"
},
"type": "group/update"
},
{
"payload": {
"group_id": "81999265-5218-4de3-960a-c2beb181420e",
"group_name": "sendspin-js-client",
"playback_state": "stopped"
},
"type": "group/update"
}
],
"implementation": "aiosendspin",
"initiator_role": "server",
"peer_hello": {
"payload": {
"device_info": {
"manufacturer": "Unknown",
"software_version": "Node.js/22"
},
"legacy_pair_methods_list_used": true,
"name": "sendspin-js-client",
"player@v1_support": {
"buffer_capacity": 5760000,
"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_pair_methods": {},
"supported_roles": [
"player@v1",
"controller@v1",
"metadata@v1"
],
"trust_level_used": true,
"unpaired_access": {
"enabled": true
}
},
"type": "client/hello"
},
"preferred_codec": "pcm",
"role": "server",
"scenario_id": "server-initiated-legacy-unencrypted",
"server_id": "dsIlKLOY1OqUfE4ig1m3id0r6yr2D5_3R-FJLQZI30I",
"server_name": "aiosendspin server",
"status": "ok",
"stream": {
"bit_depth": 16,
"channels": 2,
"codec": "pcm",
"codec_header": null,
"sample_rate": 48000
},
"time_exchange": [
{
"payload": {
"client_transmitted": 305429
},
"type": "client/time"
},
{
"payload": {
"client_transmitted": 305429,
"server_received": 1324111339,
"server_transmitted": 1324111596
},
"type": "server/time"
},
{
"payload": {
"client_transmitted": 308349
},
"type": "client/time"
},
{
"payload": {
"client_transmitted": 308349,
"server_received": 1324112205,
"server_transmitted": 1324112318
},
"type": "server/time"
},
{
"payload": {
"client_transmitted": 309174
},
"type": "client/time"
},
{
"payload": {
"client_transmitted": 309174,
"server_received": 1324113094,
"server_transmitted": 1324113199
},
"type": "server/time"
},
{
"payload": {
"client_transmitted": 309872
},
"type": "client/time"
},
{
"payload": {
"client_transmitted": 309872,
"server_received": 1324113705,
"server_transmitted": 1324113815
},
"type": "server/time"
},
{
"payload": {
"client_transmitted": 310550
},
"type": "client/time"
},
{
"payload": {
"client_transmitted": 310550,
"server_received": 1324114324,
"server_transmitted": 1324114428
},
"type": "server/time"
},
{
"payload": {
"client_transmitted": 311146
},
"type": "client/time"
},
{
"payload": {
"client_transmitted": 311146,
"server_received": 1324114894,
"server_transmitted": 1324115045
},
"type": "server/time"
},
{
"payload": {
"client_transmitted": 311890
},
"type": "client/time"
},
{
"payload": {
"client_transmitted": 311890,
"server_received": 1324115738,
"server_transmitted": 1324115832
},
"type": "server/time"
},
{
"payload": {
"client_transmitted": 312569
},
"type": "client/time"
},
{
"payload": {
"client_transmitted": 312569,
"server_received": 1324116453,
"server_transmitted": 1324116550
},
"type": "server/time"
},
{
"type": "other-sent"
}
]
}Server log
RAWINFO:aiosendspin.server.server:Starting Sendspin server on port 19098
INFO:aiosendspin.server.server:Sendspin server started successfully on 127.0.0.1:19098
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.xDcTkgV_N8cuhrWX7CAPhLZowRUUWZD7_i_tS7zr8iA:non-compliant client sendspin-js-client (Unknown, software Node.js/22): client/hello declared player supported_commands, superseded by client/state
WARNING:aiosendspin.server.connection.xDcTkgV_N8cuhrWX7CAPhLZowRUUWZD7_i_tS7zr8iA:non-compliant client sendspin-js-client (Unknown, software Node.js/22): client/hello sent the removed trust_level key
WARNING:aiosendspin.server.connection.xDcTkgV_N8cuhrWX7CAPhLZowRUUWZD7_i_tS7zr8iA:non-compliant client sendspin-js-client (Unknown, software Node.js/22): client/hello sent supported_pair_methods as a list
WARNING:aiosendspin.server.connection.xDcTkgV_N8cuhrWX7CAPhLZowRUUWZD7_i_tS7zr8iA:non-compliant client sendspin-js-client (Unknown, software Node.js/22): client/hello did not offer the pairing_psk method
WARNING:aiosendspin.server.client.xDcTkgV_N8cuhrWX7CAPhLZowRUUWZD7_i_tS7zr8iA:non-compliant client sendspin-js-client (Unknown, software Node.js/22): client/state used the pre-rename 'static_delay_ms' key
WARNING:aiosendspin.server.client.xDcTkgV_N8cuhrWX7CAPhLZowRUUWZD7_i_tS7zr8iA:non-compliant client sendspin-js-client (Unknown, software Node.js/22): client/state declared the pre-rename 'set_static_delay' command
WARNING:aiosendspin.server.client.xDcTkgV_N8cuhrWX7CAPhLZowRUUWZD7_i_tS7zr8iA:non-compliant client sendspin-js-client (Unknown, software Node.js/22): client/state omitted required player timing fields
WARNING:aiosendspin.server.client.xDcTkgV_N8cuhrWX7CAPhLZowRUUWZD7_i_tS7zr8iA:non-compliant client sendspin-js-client (Unknown, software Node.js/22): client/state omitted volume despite declaring the volume command
WARNING:aiosendspin.server.client.xDcTkgV_N8cuhrWX7CAPhLZowRUUWZD7_i_tS7zr8iA:non-compliant client sendspin-js-client (Unknown, software Node.js/22): client/state omitted muted despite declaring the mute command
{
"activation": {
"payload": {
"active_roles": [
"player@v1",
"controller@v1",
"metadata@v1"
],
"activities": [
"playback"
]
},
"type": "server/activate"
},
"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
},
"availability_trace": [
{
"available": true,
"type": "client/state"
},
{
"phase": "sending",
"roles": [
"player"
],
"type": "stream/start"
},
{
"phase": "sent",
"roles": [
"player"
],
"type": "stream/start"
},
{
"available": true,
"type": "client/state"
},
{
"available": true,
"type": "client/state"
}
],
"client": {
"active_roles": [
"player@v1",
"controller@v1",
"metadata@v1"
],
"client_id": "xDcTkgV_N8cuhrWX7CAPhLZowRUUWZD7_i_tS7zr8iA",
"name": "sendspin-js-client",
"supported_roles": [
"player@v1",
"controller@v1",
"metadata@v1"
]
},
"discovery_method": "registry_fallback",
"group_updates": [
{
"payload": {
"group_id": "81999265-5218-4de3-960a-c2beb181420e",
"group_name": "sendspin-js-client",
"playback_state": "stopped"
},
"type": "group/update"
},
{
"payload": {
"group_id": "81999265-5218-4de3-960a-c2beb181420e",
"group_name": "sendspin-js-client",
"playback_state": "playing"
},
"type": "group/update"
},
{
"payload": {
"group_id": "81999265-5218-4de3-960a-c2beb181420e",
"group_name": "sendspin-js-client",
"playback_state": "stopped"
},
"type": "group/update"
}
],
"implementation": "aiosendspin",
"initiator_role": "server",
"peer_hello": {
"payload": {
"device_info": {
"manufacturer": "Unknown",
"software_version": "Node.js/22"
},
"legacy_pair_methods_list_used": true,
"name": "sendspin-js-client",
"player@v1_support": {
"buffer_capacity": 5760000,
"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_pair_methods": {},
"supported_roles": [
"player@v1",
"controller@v1",
"metadata@v1"
],
"trust_level_used": true,
"unpaired_access": {
"enabled": true
}
},
"type": "client/hello"
},
"preferred_codec": "pcm",
"role": "server",
"scenario_id": "server-initiated-legacy-unencrypted",
"server_id": "dsIlKLOY1OqUfE4ig1m3id0r6yr2D5_3R-FJLQZI30I",
"server_name": "aiosendspin server",
"status": "ok",
"stream": {
"bit_depth": 16,
"channels": 2,
"codec": "pcm",
"codec_header": null,
"sample_rate": 48000
},
"time_exchange": [
{
"payload": {
"client_transmitted": 305429
},
"type": "client/time"
},
{
"payload": {
"client_transmitted": 305429,
"server_received": 1324111339,
"server_transmitted": 1324111596
},
"type": "server/time"
},
{
"payload": {
"client_transmitted": 308349
},
"type": "client/time"
},
{
"payload": {
"client_transmitted": 308349,
"server_received": 1324112205,
"server_transmitted": 1324112318
},
"type": "server/time"
},
{
"payload": {
"client_transmitted": 309174
},
"type": "client/time"
},
{
"payload": {
"client_transmitted": 309174,
"server_received": 1324113094,
"server_transmitted": 1324113199
},
"type": "server/time"
},
{
"payload": {
"client_transmitted": 309872
},
"type": "client/time"
},
{
"payload": {
"client_transmitted": 309872,
"server_received": 1324113705,
"server_transmitted": 1324113815
},
"type": "server/time"
},
{
"payload": {
"client_transmitted": 310550
},
"type": "client/time"
},
{
"payload": {
"client_transmitted": 310550,
"server_received": 1324114324,
"server_transmitted": 1324114428
},
"type": "server/time"
},
{
"payload": {
"client_transmitted": 311146
},
"type": "client/time"
},
{
"payload": {
"client_transmitted": 311146,
"server_received": 1324114894,
"server_transmitted": 1324115045
},
"type": "server/time"
},
{
"payload": {
"client_transmitted": 311890
},
"type": "client/time"
},
{
"payload": {
"client_transmitted": 311890,
"server_received": 1324115738,
"server_transmitted": 1324115832
},
"type": "server/time"
},
{
"payload": {
"client_transmitted": 312569
},
"type": "client/time"
},
{
"payload": {
"client_transmitted": 312569,
"server_received": 1324116453,
"server_transmitted": 1324116550
},
"type": "server/time"
},
{
"type": "other-sent"
}
]
}
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": "server",
"peer_hello": null,
"preferred_codec": "pcm",
"role": "client",
"scenario_id": "server-initiated-legacy-unencrypted",
"server": null,
"status": "ok",
"stream": {
"bit_depth": 16,
"channels": 2,
"codec": "pcm",
"sample_rate": 48000
}
}Client log
RAW[Opus] Native decoder not available, falling back to FLAC/PCM
Sendspin: no storage provided, using an ephemeral identity (client_id changes each session, pairing unavailable)
Sendspin: Adopted open WebSocket
Sendspin: Connected to server
[Opus] Native decoder not available, falling back to FLAC/PCM
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": "server-initiated-legacy-unencrypted",
"initiator_role": "server",
"preferred_codec": "pcm",
"client_id": "sendspin-js-client-id",
"client_name": "sendspin-js-client",
"peer_hello": null,
"server": null,
"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.24s
RAW.py'... Compiling 'src/conformance/_vendor/aiosendspin/server/roles/player/audio_transformers.py'... Compiling 'src/conformance/_vendor/aiosendspin/server/roles/player/capabilities.py'... Compiling 'src/conformance/_vendor/aiosendspin/server/roles/player/events.py'... Compiling 'src/conformance/_vendor/aiosendspin/server/roles/player/group.py'... Compiling 'src/conformance/_vendor/aiosendspin/server/roles/player/types.py'... Compiling 'src/conformance/_vendor/aiosendspin/server/roles/player/v1.py'... Compiling 'src/conformance/_vendor/aiosendspin/server/roles/registry.py'... Compiling 'src/conformance/_vendor/aiosendspin/server/roles/scheduled_state.py'... Listing 'src/conformance/_vendor/aiosendspin/server/roles/source'... Compiling 'src/conformance/_vendor/aiosendspin/server/roles/source/__init__.py'... Compiling 'src/conformance/_vendor/aiosendspin/server/roles/source/events.py'... Compiling 'src/conformance/_vendor/aiosendspin/server/roles/source/stream.py'... Compiling 'src/conformance/_vendor/aiosendspin/server/roles/source/v1.py'... Listing 'src/conformance/_vendor/aiosendspin/server/roles/visualizer'... Compiling 'src/conformance/_vendor/aiosendspin/server/roles/visualizer/__init__.py'... Compiling 'src/conformance/_vendor/aiosendspin/server/roles/visualizer/features.py'... Compiling 'src/conformance/_vendor/aiosendspin/server/roles/visualizer/group.py'... Compiling 'src/conformance/_vendor/aiosendspin/server/roles/visualizer/packing.py'... Compiling 'src/conformance/_vendor/aiosendspin/server/roles/visualizer/types.py'... Compiling 'src/conformance/_vendor/aiosendspin/server/roles/visualizer/v1.py'... Listing 'src/conformance/_vendor/aiosendspin/server/roles/visualizer_draft_r1'... Compiling 'src/conformance/_vendor/aiosendspin/server/roles/visualizer_draft_r1/__init__.py'... Compiling 'src/conformance/_vendor/aiosendspin/server/roles/visualizer_draft_r1/features.py'... Compiling 'src/conformance/_vendor/aiosendspin/server/roles/visualizer_draft_r1/packing.py'... Compiling 'src/conformance/_vendor/aiosendspin/server/roles/visualizer_draft_r1/role.py'... Compiling 'src/conformance/_vendor/aiosendspin/server/server.py'... Compiling 'src/conformance/_vendor/aiosendspin/util.py'... Listing 'src/conformance/adapters'... Compiling 'src/conformance/adapters/__init__.py'... Compiling 'src/conformance/adapters/_aiosendspin_pairing.py'... Compiling 'src/conformance/adapters/_aiosendspin_protocol_evidence.py'... Compiling 'src/conformance/adapters/aiosendspin_client.py'... Compiling 'src/conformance/adapters/aiosendspin_server.py'... Compiling 'src/conformance/adapters/placeholder.py'... Compiling 'src/conformance/cli.py'... Compiling 'src/conformance/flac.py'... Compiling 'src/conformance/merge.py'... Compiling 'src/conformance/pcm.py'... Compiling 'src/conformance/registry.py'... Listing 'src/conformance/validator'... Compiling 'src/conformance/validator/__init__.py'... Compiling 'src/conformance/validator/checks.py'... Compiling 'src/conformance/validator/cli.py'... Compiling 'src/conformance/validator/code_pairing.py'... Compiling 'src/conformance/validator/code_pairing_checks.py'... Compiling 'src/conformance/validator/discovery.py'... Compiling 'src/conformance/validator/findings.py'... Compiling 'src/conformance/validator/noncompliance_refs.py'... Compiling 'src/conformance/validator/prompter.py'... Compiling 'src/conformance/validator/recorder.py'... Compiling 'src/conformance/validator/report.py'... Compiling 'src/conformance/validator/session.py'... Compiling 'src/conformance/validator/storage.py'... Compiling 'src/conformance/validator/suite_checks.py'... Compiling 'src/conformance/validator/suites.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'... Compiling 'scripts/vendor_aiosendspin.py'...
Client build log · sendspin-js-adapters · built · 97.70s
RAWNo build detail was recorded.