Skip to content

aiosendspin self-test: audio/metadata/artwork/FLAC scenarios fail after the encryption-era constructor fix #95

Description

@OnFreund

Summary

Follow-up to #93 / #94. After fixing the SendspinServer()/SendspinClient() constructor mismatch in #94, connection, handshake (including legacy unencrypted admission), and role negotiation between two aiosendspin instances now succeed. However, running the conformance harness with both roles played by aiosendspin (--from aiosendspin --to aiosendspin) still fails most scenarios past that point, on what looks like separate, additional protocol/API drift in aiosendspin's audio/metadata/artwork/controller role plumbing.

This is likely irrelevant to any single-sided matrix cell (--from aiosendspin --to <other-client> or --from <other-server> --to aiosendspin) where only one adapter round-trips through aiosendspin, but it blocks a clean aiosendspin↔aiosendspin self-test and may hint at adapter bugs that also affect mixed-implementation runs.

Reproduction

Clone current aiosendspin (https://github.com/Sendspin-Protocol/aiosendspin, tip as of 2026-07-16, commit a3a4401) and sendspin-cli (for the fixture), point CONFORMANCE_REPO_AIOSENDSPIN / CONFORMANCE_REPO_SENDSPIN_CLI at them, and run:

conformance run --from aiosendspin --to aiosendspin --timeout-seconds 25

Observed failures (after #94's fix)

  • server-initiated-pcm / server-initiated-pcm-24bit: "Client summary shows zero audio chunks"
  • server-initiated-metadata: "Client summary shows zero metadata updates"
  • server-initiated-artwork: "Client summary shows zero artwork frames"
  • server-initiated-flac: "Server did not negotiate FLAC transport (codec=None)"
  • server-initiated-opus: client hangs, times out waiting for client-ready.json
  • client-initiated-pcm: fails with an empty reason string (needs its own investigation)

Connection/handshake/role-negotiation itself is confirmed working: the server logs Sendspin server started successfully, an unencrypted legacy client/hello is admitted with Accepting unencrypted legacy connection (transition mode), and role snapshots (client.active_role_ids) populate correctly. The failures above happen later, during actual stream/metadata/artwork data transfer.

Suggested investigation

Compare src/conformance/adapters/aiosendspin_server.py / aiosendspin_client.py (_run_audio_scenario, _run_metadata_scenario, _run_artwork_scenario, _run_controller_scenario, and the stream.prepare_audio/stream.commit_audio/client.group.start_stream() calls) against aiosendspin's own integration tests (tests/integration/*.py in the aiosendspin repo) to see the current expected usage pattern for streaming/metadata/artwork/controller roles post-encryption, since the role-activation and stream-negotiation flow may have changed shape in the same PR series (Sendspin/aiosendspin#292–298) that broke the constructors fixed in #94.

🤖 Filed with Claude Code while verifying the fix for #93.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions