Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ Current scenarios:
- `server-initiated-burst-cadence` (Server observes client/time burst cadence): start the server first, then the client. The server counts `client/time` messages over a fixed observation window and asserts the distribution matches the recommended cadence (bursts of 8, ~10 s apart). No SDK in the matrix declares the `client-time-burst-cadence` capability yet, so every case currently fails fast and the matrix surfaces the gap
- `server-initiated-request-format` (Client requests a mid-stream codec switch): start the server first, then the client. The server begins streaming in Opus; the client is instructed to emit `stream/request-format` with FLAC at a fixed timestamp and the server responds with a fresh `stream/start`. No SDK currently emits `stream/request-format`, so every case currently fails fast on the `stream-request-format-emit` capability
- `server-initiated-pcm-24bit` (Server initiates connection and client wants 24-bit PCM): start the server first, then the client. The server re-packs the fixture as 24-bit PCM (3-byte packed, little-endian, two's complement). No SDK in the matrix declares the `pcm-24bit-decode` capability yet, so every case currently fails fast and the matrix surfaces the gap (notably the `sendspin-go` SDK has no 24-bit code path per the audit)
- `server-initiated-external-source` (Client enters and leaves `external_source` mid-stream): start the server first, then the client. The client transitions to `external_source` and back; the harness verifies the server emits the right `group/update` and `stream/end` and that the previous group is restored. Per the audit only SendspinKit exposes a client-side API; no client in the matrix declares the `external-source-client-api` capability yet, so every case fails fast

## Current coverage

Expand Down
1 change: 1 addition & 0 deletions src/conformance/implementations.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@
"client-time-burst-cadence",
"stream-request-format-emit",
"pcm-24bit-decode",
"external-source-client-api",
),
),
),
Expand Down
20 changes: 20 additions & 0 deletions src/conformance/scenarios.py
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,25 @@
)


SERVER_INITIATED_EXTERNAL_SOURCE = ScenarioSpec(
id="server-initiated-external-source",
display_name="Client enters and leaves `external_source` mid-stream",
description=(
"Start the server first, then the client. The client enters "
"`external_source` mid-stream; the harness asserts the server emits the right "
"`group/update` and `stream/end`; then the client leaves `external_source` and "
"the previous group is restored. Per the audit, only SendspinKit exposes a "
"client-side API today, so every other client fails fast on the "
"`external-source-client-api` capability."
),
initiator_role="server",
preferred_codec="pcm",
required_role_families=("player",),
verification_mode="capability-only",
required_capability="external-source-client-api",
)


SERVER_INITIATED_REQUEST_FORMAT = ScenarioSpec(
id="server-initiated-request-format",
display_name="Client requests a mid-stream codec switch",
Expand Down Expand Up @@ -227,6 +246,7 @@
SERVER_INITIATED_BURST_CADENCE,
SERVER_INITIATED_REQUEST_FORMAT,
SERVER_INITIATED_PCM_24BIT,
SERVER_INITIATED_EXTERNAL_SOURCE,
)

SCENARIOS: dict[str, ScenarioSpec] = {scenario.id: scenario for scenario in SCENARIO_LIST}
Expand Down