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:
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),