lib

Core libraries for Radroots
git clone https://radroots.dev/git/lib.git
Log | Files | Refs | README

commit 039d72813c0dadb0c14b10e04f68eabce6514786
parent d32368cbbfea5a7245010a40d351f31e8909a73a
Author: triesap <tyson@radroots.org>
Date:   Tue, 28 Jul 2026 20:15:15 +0000

protocol: quarantine superseded package surface

- migrate SDK production consumers to the final versioned protocol modules
- remove the retired runtime reexport and transport-publish dependency
- retain the private runtime shim only through the Step 270 CLI cutover
- record release classification, consumer evidence, and removal authority

Diffstat:
Mcrates/sdk/Cargo.toml | 11++++-------
Mcrates/sdk/src/adapters/radrootsd.rs | 7++++---
Mcrates/sdk/src/lib.rs | 2--
Mcrates/sdk/src/sync_runtime.rs | 39+++++++++++++++++++++++----------------
Dcrates/sdk/tests/runtime_contract_public_api.rs | 26--------------------------
Mcrates/sdk/tests/unit/adapters_radrootsd_tests.rs | 16++++++++++------
Mcrates/sdk/tests/unit/sync_runtime_tests.rs | 27++++++++++++++++++++-------
7 files changed, 61 insertions(+), 67 deletions(-)

diff --git a/crates/sdk/Cargo.toml b/crates/sdk/Cargo.toml @@ -19,13 +19,11 @@ default = ["std", "serde", "serde_json", "identity-models"] std = [ "radroots_event/std", "radroots_event_codec/std", - "radroots_runtime_contract_v1/std", "radroots_trade/std", ] serde = [ "dep:serde", "radroots_event/serde", - "radroots_runtime_contract_v1/serde", "radroots_trade/serde", ] serde_json = [ @@ -52,13 +50,13 @@ radrootsd-execution = [ "std", "serde_json", "dep:futures", + "dep:radroots_protocol", "dep:radroots_transport", - "dep:radroots_transport_publish_protocol", "dep:radroots_transport_nostr", "dep:reqwest", + "radroots_protocol/serde", + "radroots_protocol/std", "radroots_transport/serde", - "radroots_transport_publish_protocol/serde", - "radroots_transport_publish_protocol/std", "radroots_transport_nostr/std", ] signer-adapters = [ @@ -142,14 +140,13 @@ radroots_event = { workspace = true, default-features = false } radroots_event_codec = { workspace = true, default-features = false } radroots_geocoder = { workspace = true, optional = true } radroots_outbox = { workspace = true, optional = true, default-features = false } +radroots_protocol = { workspace = true, optional = true, default-features = false } radroots_protected_store = { workspace = true, optional = true, default-features = false } radroots_transport = { workspace = true, optional = true, default-features = false } -radroots_transport_publish_protocol = { workspace = true, optional = true, default-features = false } radroots_transport_nostr = { workspace = true, optional = true, default-features = false } radroots_transport_reticulum = { workspace = true, optional = true, default-features = false } radroots_runtime_paths = { workspace = true, optional = true, default-features = false } radroots_secret_vault = { workspace = true, optional = true, default-features = false } -radroots_runtime_contract_v1 = { path = "../runtime_contract_v1", version = "=0.1.0-alpha", default-features = false } radroots_trade = { workspace = true, default-features = false } radroots_identity = { workspace = true, default-features = false } radroots_nostr = { workspace = true, optional = true, default-features = false } diff --git a/crates/sdk/src/adapters/radrootsd.rs b/crates/sdk/src/adapters/radrootsd.rs @@ -2,9 +2,10 @@ use core::fmt; use core::time::Duration; use radroots_event::draft::RadrootsSignedEvent; -use radroots_transport_publish_protocol::{ - METHOD_EVENT, TransportPublishDeliveryPolicy, TransportPublishEventRequest, - TransportPublishEventResponse, TransportPublishProtocolError, TransportPublishTargetPolicy, +use radroots_protocol::radrootsd::transport_publish::v5::{ + DeliveryPolicy as TransportPublishDeliveryPolicy, Error as TransportPublishProtocolError, + EventRequest as TransportPublishEventRequest, EventResponse as TransportPublishEventResponse, + METHOD_EVENT, TargetPolicy as TransportPublishTargetPolicy, }; use reqwest::header::{AUTHORIZATION, CONTENT_TYPE, HeaderMap, HeaderValue}; use serde::{Deserialize, Serialize, de::DeserializeOwned}; diff --git a/crates/sdk/src/lib.rs b/crates/sdk/src/lib.rs @@ -55,8 +55,6 @@ pub mod transport; #[cfg(feature = "runtime")] mod workflow_runtime; -pub use radroots_runtime_contract_v1 as runtime_contract_v1; - #[cfg(feature = "runtime")] pub use crate::error::{ RADROOTS_SDK_ERROR_CATALOG, RadrootsSdkError, RadrootsSdkErrorCatalogEntry, diff --git a/crates/sdk/src/sync_runtime.rs b/crates/sdk/src/sync_runtime.rs @@ -24,6 +24,13 @@ use radroots_outbox::{ RadrootsOutboxDeliveryTargetRecord, RadrootsOutboxDeliveryTargetStatus, RadrootsOutboxEventState, RadrootsOutboxReticulumEventRecord, RadrootsOutboxStatusSummary, }; +#[cfg(all(feature = "runtime", feature = "radrootsd-execution"))] +use radroots_protocol::radrootsd::transport_publish::v5::{ + DeliveryPolicy as TransportPublishDeliveryPolicy, Job as TransportPublishJobView, + JobStatus as TransportPublishJobStatus, OutcomeKind as TransportPublishOutcomeKind, + Target as TransportPublishTarget, TargetFingerprint as TransportPublishTargetFingerprint, + TargetOutcome as TransportPublishTargetOutcome, TargetPolicy as TransportPublishTargetPolicy, +}; #[cfg(feature = "runtime")] use radroots_trade::workflow::{ RADROOTS_TRADE_REDUCER_CONTRACT_ID, RADROOTS_TRADE_REDUCER_VERSION, @@ -46,12 +53,6 @@ use radroots_transport_nostr::{ RadrootsOutboxPublishPolicy, RadrootsOutboxPublishReceipt, RadrootsOutboxPublishTargetReceipt, RadrootsRelayOutcomeKind, publish_claimed_outbox_event_with_transport, }; -#[cfg(all(feature = "runtime", feature = "radrootsd-execution"))] -use radroots_transport_publish_protocol::{ - TransportPublishDeliveryPolicy, TransportPublishJobStatus, TransportPublishJobView, - TransportPublishOutcomeKind, TransportPublishTarget, TransportPublishTargetOutcome, - TransportPublishTargetPolicy, -}; #[cfg(feature = "runtime")] use sha2::{Digest, Sha256}; @@ -1338,16 +1339,22 @@ fn radrootsd_delivery_policy_from_remaining( RadrootsTransportSatisfactionPolicy::Any { .. } => TransportPublishDeliveryPolicy::Any, RadrootsTransportSatisfactionPolicy::All { .. } => TransportPublishDeliveryPolicy::All, RadrootsTransportSatisfactionPolicy::RequiredTargets { .. } => { - TransportPublishDeliveryPolicy::required_targets( - required_remaining_targets - .ok_or_else(|| RadrootsSdkError::InvalidRequest { - message: "radrootsd publish missing required target fingerprints" - .to_owned(), - })? - .to_vec(), - ) - .map_err(|error| RadrootsSdkError::InvalidRequest { - message: error.to_string(), + let targets = required_remaining_targets + .ok_or_else(|| RadrootsSdkError::InvalidRequest { + message: "radrootsd publish missing required target fingerprints".to_owned(), + })? + .iter() + .map(|fingerprint| { + TransportPublishTargetFingerprint::parse(fingerprint.as_str().to_owned()) + .map_err(|error| RadrootsSdkError::InvalidRequest { + message: error.to_string(), + }) + }) + .collect::<Result<Vec<_>, _>>()?; + TransportPublishDeliveryPolicy::required_targets(targets).map_err(|error| { + RadrootsSdkError::InvalidRequest { + message: error.to_string(), + } })? } RadrootsTransportSatisfactionPolicy::Quorum { .. } => { diff --git a/crates/sdk/tests/runtime_contract_public_api.rs b/crates/sdk/tests/runtime_contract_public_api.rs @@ -1,26 +0,0 @@ -use radroots_sdk::runtime_contract_v1::{ - RuntimeOperationIdV1, TransportKindV1, operation_descriptor, validate_runtime_contract_v1, -}; - -#[test] -fn runtime_contract_v1_is_public_through_sdk_surface() { - validate_runtime_contract_v1().expect("runtime contract validates"); - - let descriptor = operation_descriptor(RuntimeOperationIdV1::TransportDeliveryRetry) - .expect("delivery retry descriptor"); - - assert!( - descriptor - .transport_capability - .includes_transport(TransportKindV1::Nostr) - ); - assert!( - descriptor - .transport_capability - .includes_transport(TransportKindV1::Reticulum) - ); - assert!(matches!( - TransportKindV1::parse("reticulum"), - Ok(TransportKindV1::Reticulum) - )); -} diff --git a/crates/sdk/tests/unit/adapters_radrootsd_tests.rs b/crates/sdk/tests/unit/adapters_radrootsd_tests.rs @@ -1,12 +1,16 @@ use super::*; use radroots_event::wire::RadrootsNip01EventWire; -use radroots_transport::RADROOTS_RETICULUM_ENDPOINT_URI; -use radroots_transport_publish_protocol::{ - NostrPublishTargetSourcePolicy, TransportPublishDeliveryPolicy, TransportPublishEventRequest, - TransportPublishEventResponse, TransportPublishJobStatus, TransportPublishJobView, - TransportPublishOutcomeKind, TransportPublishReticulumBehavior, TransportPublishTarget, - TransportPublishTargetOutcome, TransportPublishTargetPolicy, TransportPublishTargetSource, +use radroots_protocol::radrootsd::transport_publish::v5::{ + DeliveryPolicy as TransportPublishDeliveryPolicy, EventRequest as TransportPublishEventRequest, + EventResponse as TransportPublishEventResponse, Job as TransportPublishJobView, + JobStatus as TransportPublishJobStatus, + NostrTargetSourcePolicy as NostrPublishTargetSourcePolicy, + OutcomeKind as TransportPublishOutcomeKind, + ReticulumBehavior as TransportPublishReticulumBehavior, Target as TransportPublishTarget, + TargetOutcome as TransportPublishTargetOutcome, TargetPolicy as TransportPublishTargetPolicy, + TargetSource as TransportPublishTargetSource, }; +use radroots_transport::RADROOTS_RETICULUM_ENDPOINT_URI; use std::io::{Read, Write}; use std::net::TcpListener; use std::thread::JoinHandle; diff --git a/crates/sdk/tests/unit/sync_runtime_tests.rs b/crates/sdk/tests/unit/sync_runtime_tests.rs @@ -42,6 +42,16 @@ use radroots_outbox::{ use radroots_outbox::{ RadrootsOutboxEventState, RadrootsOutboxEventStoreIngestReceipt, RadrootsOutboxStatusSummary, }; +#[cfg(feature = "radrootsd-execution")] +use radroots_protocol::radrootsd::transport_publish::v5::{ + DeliveryPolicy as TransportPublishDeliveryPolicy, Job as TransportPublishJobView, + JobStatus as TransportPublishJobStatus, + NostrTargetSourcePolicy as NostrPublishTargetSourcePolicy, + OutcomeKind as TransportPublishOutcomeKind, Target as TransportPublishTarget, + TargetFingerprint as TransportPublishTargetFingerprint, + TargetOutcome as TransportPublishTargetOutcome, TargetPolicy as TransportPublishTargetPolicy, + TargetSource as TransportPublishTargetSource, +}; use radroots_transport::{ RadrootsTransportDeliveryTargetStatus, RadrootsTransportMeshScopeId, RadrootsTransportTarget, RadrootsTransportTargetLabel, @@ -53,12 +63,6 @@ use radroots_transport_nostr::{ RadrootsRelayOutcomeKind, RadrootsRelayPublishAdapter, RadrootsRelayPublishRelayReceipt, RadrootsRelayPublishRequest, RadrootsRelayTransportError, }; -#[cfg(feature = "radrootsd-execution")] -use radroots_transport_publish_protocol::{ - NostrPublishTargetSourcePolicy, TransportPublishDeliveryPolicy, TransportPublishJobStatus, - TransportPublishJobView, TransportPublishOutcomeKind, TransportPublishTarget, - TransportPublishTargetOutcome, TransportPublishTargetPolicy, TransportPublishTargetSource, -}; use std::collections::BTreeSet; #[cfg(feature = "radrootsd-execution")] use std::io::ErrorKind; @@ -886,10 +890,19 @@ async fn radrootsd_push_empty_queue_and_private_helpers_are_deterministic() { .expect("required remaining targets") .expect("required target policy"); assert_eq!(remaining, vec![second_required.fingerprint().clone()]); + let protocol_remaining = remaining + .iter() + .map(|fingerprint| { + TransportPublishTargetFingerprint::parse(fingerprint.as_str().to_owned()) + .expect("protocol target fingerprint") + }) + .collect(); assert_eq!( radrootsd_delivery_policy_from_remaining(2, remaining.len(), Some(&remaining), &policy) .expect("required target radrootsd policy"), - TransportPublishDeliveryPolicy::RequiredTargets { targets: remaining } + TransportPublishDeliveryPolicy::RequiredTargets { + targets: protocol_remaining + } ); assert!(matches!( radrootsd_delivery_policy_from_remaining(0, 1, Some(&[]), &policy),