Repository navigation
Protocol correctness, reliable Core sessions, and a read-only play-history exporter.
Prepared and adversarially reviewed with Codex.
Added
- Read-only JSON-lines history export with bounded paging, identity deduplication,
newest-first ordering, explicit retrieval failures, and page/query cleanup.
#18 - Published release history on GitHub Pages, generated from this changelog, with
current onboarding, contributor checks, and validation guidance. - Runnable SDK lint and PR validation for SDK/web tests and builds, documentation,
and tracked, deterministic generated output.
#21,
#25
Fixed
- Reject pending RPCs promptly on close or failed sends; buffer split/coalesced
handshake records and reject premature closure. Cancel the handshake watchdog
once established so healthy idle sessions remain open.
#5,
#17,
#25 - Use immutable full struct schemas and stable member indexes across handwritten
and generated calls. Preserve capturedSooloos.Broker.Api.*wire names when
newer DLL metadata usesRoon.Broker.Api.*.
#19 - Preserve nullable values with the correct Bool/Sooid/scalar encodings and retain
pre-serialized nullable scalar Buffer compatibility.
#22 - Correct the exported legacy
Arg.refListframing to match length-prefixed
Arg.collectionreference collections.
#23 - Follow each search callback's ordered memberships, including cached full
entities. Decode DataList separately from Query and preserve populated objects
across repeated PUSHSTUB frames, fixing repeated and concurrent searches.
#24 - Recover the web backend with fresh, coalesced clients; reject stale session IDs;
clear disconnected UI/pending state and ignore late HTTP/search responses.
Read profile-scoped favorite state and preserve playlist/genre search sections.
#25 - Align onboarding with current exports and validated environment configuration;
keep the demo read-only and label historical mutation experiments accurately.
#20
Compatibility
Arg.refListremains exported but is deprecated; its invalid wire bytes are
intentionally corrected. Prefer explicitArg.collectionconstruction.- A typename's low-level struct declaration must remain immutable. Incompatible
reuse and unknown/duplicate generated fields now fail explicitly. - SDK search keeps its existing default result families. The optional third
argument includes playlists and genres; the web opts in. - The demo/history exporter accept
ROON_BROKER_IDas a legacy alias for
ROON_SERVER_BROKER_ID.
Validation and limits
- 145 SDK tests and 25 web tests pass, along with SDK lint/build, web
typecheck/build, deterministic generation, docs build, and hosted CI. - Read-only validation on Roon 2.73 build 1696 covered a 150-play export,
repeated/concurrent and named-category search, favorite-state rendering,
controlled test-client recovery, stale-action rejection, and a usable session
after more than 23 seconds of idle time. One concurrent read timed out;
bounded retries passed. - No live favorite/metadata, playback, volume, power mutation, or Core restart
was used for validation. Write transitions use mocks and existing protocol
evidence. Most generated methods remain unverified against a live Core. - This remains an experimental private-protocol client; broader version and
streaming-provider compatibility is not established. The offline drift-checker
proposal remains tracked in
#16.
Thanks to @jnolen for the contributed close cleanup, handshake buffering,
and original history exporter in
#5,
#17, and
#18.