From 6f63b12dce23ee4c289832f40e0459bc6b019378 Mon Sep 17 00:00:00 2001 From: Raphael Avocegamou Date: Wed, 2 Sep 2026 12:25:57 +0200 Subject: [PATCH 1/2] Name connector behavior directly --- .github/workflows/ci.yml | 2 +- relay/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 94784a5..dcc5656 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -34,7 +34,7 @@ jobs: - name: Public documentation language run: | - if rg -n -i '\b(boundary|path|surface|authority|projection|lowering|flow|layer)\b' \ + if rg -n -i '\b(boundary|path|surface|authority|projection|lowering|flow|layer|contracts?)\b' \ README.md relay \ --glob '*.md' --glob '*.mdx'; then echo "Public documentation must name the API, queue, process, service, or request directly." diff --git a/relay/README.md b/relay/README.md index e4dbee0..da206bc 100644 --- a/relay/README.md +++ b/relay/README.md @@ -129,7 +129,7 @@ All validation happens before media publication: - ICE server and URL counts are bounded; - the startup deadline is between 1 ms and 120 seconds. -## Runtime contract +## Runtime behavior | Concern | Behavior | |---|---| From 9943e37dea2a5d486fbb03386a508002c931b9a1 Mon Sep 17 00:00:00 2001 From: Raphael Avocegamou Date: Thu, 3 Sep 2026 09:15:33 +0200 Subject: [PATCH 2/2] release: prepare Relay connector 0.1.3 --- Cargo.lock | 60 +++++++++++++++++++++--------------------- README.md | 4 +-- relay/Cargo.toml | 6 ++--- relay/README.md | 20 +++++++------- relay/RELEASE_NOTES.md | 10 +++++++ relay/src/connector.rs | 6 ++--- relay/src/runtime.rs | 2 +- 7 files changed, 59 insertions(+), 49 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 853847b..fe4f367 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -87,9 +87,9 @@ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "aws-lc-rs" -version = "1.18.0" +version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce2b2dcc879c3bae0d371e77c99f2238400ef24ec001394befa67b6e543add9e" +checksum = "b281d307588d634de920874890732659e2e7672f72b5e10e81badc1a8a83621e" dependencies = [ "aws-lc-sys", "untrusted", @@ -98,9 +98,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.44.0" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f09fae7be8bb3174e05c6afdb34199e6dc0c7c04ba9fa237b1967adfbde27483" +checksum = "9bff6c3b54fad79a2e60b8102caf565819711497c1f5f092f49508e2f5c31b27" dependencies = [ "cc", "cmake", @@ -159,9 +159,9 @@ checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" [[package]] name = "cc" -version = "1.4.3" +version = "1.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "509591b7bcd67f4ef775afad7662703b4935daaa6ec0e5605cfb1090b32a2b6d" +checksum = "0ad534f4357a5264cce5019c989cf66a4f0dc4e0d1b1d15f8aacec0ff7360273" dependencies = [ "find-msvc-tools", "jobserver", @@ -208,9 +208,9 @@ dependencies = [ [[package]] name = "combine" -version = "4.6.7" +version = "4.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +checksum = "cfc320937d09e6de266b31b9afb480f197d7a861be86be7cb2ea7e5d1bfffc5e" dependencies = [ "bytes", "memchr", @@ -374,7 +374,7 @@ checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] @@ -566,9 +566,9 @@ checksum = "e590f038c1464a96894fd6d10127e90a8be4509f56ff7ecef851b15cee0b7caa" [[package]] name = "icu_provider" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92a7ed671a6aad807a8651a2e1782a6598fda9ce5185dd8158549e95a91c6428" +checksum = "d27bbb9d3abbefac45d55f647c9de1d44aafcd1186eb91879afef17c396c3e73" dependencies = [ "displaydoc", "icu_locale_core", @@ -674,9 +674,9 @@ checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae" [[package]] name = "log" -version = "0.4.33" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" [[package]] name = "memchr" @@ -866,9 +866,9 @@ checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" [[package]] name = "pocketstation" -version = "1.1.3" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69ef0a8643e866a639647afe98fd83208096983480bcd6978f8e85e2e55a9c4c" +checksum = "c9f775adeeb6fedadb2d684771472ff6b1d40f39074669e6841386998d010e7f" dependencies = [ "cc", "hound", @@ -883,7 +883,7 @@ dependencies = [ [[package]] name = "pocketstation-relay" -version = "0.1.2" +version = "0.1.3" dependencies = [ "base64", "pocketstation", @@ -980,9 +980,9 @@ dependencies = [ [[package]] name = "rcgen" -version = "0.14.9" +version = "0.14.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "091e7a8e7d86e6feb87a27ce8e2cba29d49eff9507afeebefab7eeb2ca667fb4" +checksum = "8774e05a7d0de114588e6a28fe7e71694b82614ed569d86d8b389dfbc98b8ad8" dependencies = [ "aws-lc-rs", "rustls-pki-types", @@ -1120,7 +1120,7 @@ checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] @@ -1167,9 +1167,9 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" -version = "1.15.2" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" +checksum = "b9be42f50aa861c555654aa3a37f52f4b1074bacf4e48fe0ef7fa584e80f1f0f" [[package]] name = "spki" @@ -1253,9 +1253,9 @@ dependencies = [ [[package]] name = "syn" -version = "3.0.3" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" +checksum = "e6275cddf4610d1775e6d1fe9469b2e77d0f39fd98fb7450901b821e0c53649f" dependencies = [ "proc-macro2", "quote", @@ -1323,7 +1323,7 @@ checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] @@ -1384,7 +1384,7 @@ checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] @@ -1641,9 +1641,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.7" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b5c6b5976d66c1d703c4fd17d3f5e43c8cedaacf604961b171adc7130896d8" +checksum = "bb0464e17806c1d976d5cba29399c7f08e516e279e2ba493f63123b5fca67dd8" dependencies = [ "yoke", "zerofrom", @@ -1652,13 +1652,13 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f212a141d820099d57ffafb9569be9617a6f27d3dc881fbee8fb56642f917a9" +checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] diff --git a/README.md b/README.md index fb944b9..9c3efc9 100644 --- a/README.md +++ b/README.md @@ -33,8 +33,8 @@ The package owns the Relay-specific work: - finite startup and shutdown deadlines; - redacted credentials and structured failures. -PocketStation Core continues to own capture, graph compilation, bounded -routing, recording, and Session lifecycle. +PocketStation Core continues to own capture, graph compilation, route queues, +recording, and Session lifecycle. ## Current limits diff --git a/relay/Cargo.toml b/relay/Cargo.toml index 1cf3210..45bcc89 100644 --- a/relay/Cargo.toml +++ b/relay/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pocketstation-relay" -version = "0.1.2" +version = "0.1.3" edition.workspace = true rust-version.workspace = true license.workspace = true @@ -26,7 +26,7 @@ workspace = true [dependencies] base64 = "0.22" -pocketstation = { version = "1.1.3", default-features = false } +pocketstation = { version = "1.1.6", default-features = false } serde = { version = "1", features = ["derive"] } serde_json = "1" str0m = "0.20" @@ -35,4 +35,4 @@ tungstenite = { version = "0.29", features = ["native-tls"] } url = "2" [dev-dependencies] -pocketstation = { version = "1.1.3", default-features = false, features = ["conformance-fixtures"] } +pocketstation = { version = "1.1.6", default-features = false, features = ["conformance-fixtures"] } diff --git a/relay/README.md b/relay/README.md index da206bc..ef64d82 100644 --- a/relay/README.md +++ b/relay/README.md @@ -5,7 +5,7 @@ the `pocketstation::connector` lifecycle. `pocketstation-relay` owns the client-side Opus, RTP, WebRTC, and Relay signaling implementation. PocketStation Core continues to own graph -compilation, bounded delivery, lineage, recording, and transactional lifecycle. +compilation, route delivery, lineage, recording, and transactional lifecycle. ```text application stem ──→ application AudioBus ──┐ @@ -33,7 +33,7 @@ PocketStation-operated service by default. ```rust,no_run use pocketstation::connector::ConnectorSecret; -use pocketstation::{ApplicationSelector, EdgeContract, Session, Source}; +use pocketstation::{ApplicationSelector, RouteSettings, Session, Source}; use pocketstation_relay::{RelayConnector, RelayRouteConfiguration}; # fn main() -> Result<(), Box> { @@ -59,7 +59,7 @@ let application_endpoint = registered.declare( "application", )? .connector_configuration()?, - EdgeContract::realtime_audio(), + RouteSettings::realtime_audio(), )?; let microphone_endpoint = registered.declare( @@ -71,7 +71,7 @@ let microphone_endpoint = registered.declare( "microphone", )? .connector_configuration()?, - EdgeContract::realtime_audio(), + RouteSettings::realtime_audio(), )?; application.send(application_endpoint)?; @@ -126,14 +126,14 @@ All validation happens before media publication: - the Relay URL must be an HTTP(S) origin accepted by the transport; - Session, bus, and publisher-group identities are finite and non-empty; - credentials remain inside `ConnectorSecret` and are redacted from `Debug`; -- ICE server and URL counts are bounded; +- ICE server and URL counts must remain within their configured maxima; - the startup deadline is between 1 ms and 120 seconds. ## Runtime behavior | Concern | Behavior | |---|---| -| Input | bounded 48 kHz interleaved `f32` PCM | +| Input | 48 kHz interleaved `f32` PCM through a fixed-capacity route queue | | Encoding | Opus outside the realtime capture callback | | Publication | named WebRTC streams mapped to Relay `AudioBus` identities | | Startup | one finite deadline across DNS, signaling, ICE, and DTLS | @@ -149,7 +149,7 @@ Core controls the Connector lifecycle: Session prepare → Connector validates and prepares provider state → Core opens the start gate atomically - → connector workers publish bounded route input + → connector workers publish accepted route input → Core requests drain or abort → workers join → Core records terminal outcomes @@ -160,7 +160,7 @@ engine. Provider retry/reconnect behavior must remain finite and explicit. ## Inspect publication results -`RelayConnector` retains bounded publication receipts. A receipt key identifies +`RelayConnector` retains receipts up to its configured capacity. A receipt key identifies the endpoint/route publication, and the final result reports stable outcome state and unit-bearing statistics. Missing receipts are not interpreted as success. @@ -195,5 +195,5 @@ cargo package -p pocketstation-relay --locked ``` Published crate versions and tags are immutable. Connector changes must retain -Core conformance, Relay protocol compatibility, secret redaction, bounded -startup/shutdown behavior, and isolated package-consumer proof. +Core conformance, Relay protocol compatibility, secret redaction, startup and +shutdown deadlines, and isolated package-consumer proof. diff --git a/relay/RELEASE_NOTES.md b/relay/RELEASE_NOTES.md index d07ea3d..df8042c 100644 --- a/relay/RELEASE_NOTES.md +++ b/relay/RELEASE_NOTES.md @@ -1,5 +1,15 @@ # PocketStation Relay connector release notes +## 0.1.3 — Clear route settings + +Relay destinations now use the route settings and execution safety names from +PocketStation 1.1.6. Audio delivery, named bus publication, cancellation, and +shutdown behavior are unchanged. + +```console +cargo update -p pocketstation -p pocketstation-relay +``` + ## 0.1.2 — Stop cancelled output before Relay sends it When a person interrupts generated speech, stopping the provider task is not diff --git a/relay/src/connector.rs b/relay/src/connector.rs index 8b7020f..816011a 100644 --- a/relay/src/connector.rs +++ b/relay/src/connector.rs @@ -8,8 +8,8 @@ use pocketstation::connector::{ ConnectorRegistrationError, ConnectorRequirement, RegisteredConnector, }; use pocketstation::graph::{ - AudioCaps, ChannelLayout, ExecutionPartition, MediaCaps, Multiplicity, NodeDescriptor, - NodeTypeId, PortDirection, PortSpec, SafetyContract, SignalSpec, + AudioCaps, ChannelLayout, ExecutionPartition, ExecutionSafety, MediaCaps, Multiplicity, + NodeDescriptor, NodeTypeId, PortDirection, PortSpec, SignalSpec, }; use pocketstation::{OperatorId, SampleFormat, Session}; @@ -122,7 +122,7 @@ pub fn relay_connector_manifest() -> Result