radrootsd

JSON-RPC bridge for Radroots event publishing
git clone https://radroots.dev/git/radrootsd.git
Log | Files | Refs | README | LICENSE

commit 687aab080bfe0d79a13ef526c6f47b9e70cdbbe7
parent a1efe6c011bef75b325a2dd182d6f3da69cf4380
Author: triesap <tyson@radroots.org>
Date:   Thu,  9 Jul 2026 01:38:01 +0000

transport: remove Nostr dependency alias

- depend on radroots_transport_nostr by its real crate name
- update daemon transport imports and tests directly
- add a source-boundary guard against the removed alias
- verify daemon transport publish focused gates

Diffstat:
MCargo.toml | 4++--
Msrc/core/transport_publish.rs | 8++++----
Msrc/transport/jsonrpc/methods/transport_publish.rs | 2+-
Msrc/transport/jsonrpc/server.rs | 4++--
Mtests/source_boundary.rs | 22++++++++++++++++++++++
5 files changed, 31 insertions(+), 9 deletions(-)

diff --git a/Cargo.toml b/Cargo.toml @@ -15,7 +15,7 @@ radroots_events = { path = "../lib/crates/events" } radroots_identity = { path = "../lib/crates/identity" } radroots_nostr = { path = "../lib/crates/nostr" } radroots_transport_publish_protocol = { path = "../lib/crates/transport_publish_protocol" } -radroots_relay_transport = { package = "radroots_transport_nostr", path = "../lib/crates/transport_nostr", default-features = false } +radroots_transport_nostr = { path = "../lib/crates/transport_nostr", default-features = false } radroots_transport = { path = "../lib/crates/transport", default-features = false } radroots_runtime = { path = "../lib/crates/runtime" } @@ -27,7 +27,7 @@ radroots_events = { workspace = true, features = ["serde"] } radroots_identity = { workspace = true } radroots_nostr = { workspace = true, features = ["client", "codec", "events", "http"] } radroots_transport_publish_protocol = { workspace = true, features = ["std", "serde"] } -radroots_relay_transport = { workspace = true, features = ["std", "client"] } +radroots_transport_nostr = { workspace = true, features = ["std", "client"] } radroots_transport = { workspace = true } radroots_runtime = { workspace = true, features = ["cli"] } radroots_runtime_paths = { path = "../lib/crates/runtime_paths" } diff --git a/src/core/transport_publish.rs b/src/core/transport_publish.rs @@ -16,12 +16,12 @@ use radroots_nostr::prelude::{ RadrootsNostrClient, RadrootsNostrEventVerification, RadrootsNostrFilter, RadrootsNostrKind, RadrootsNostrPublicKey, radroots_nostr_verify_event, }; -use radroots_relay_transport::{ +use radroots_transport::{RadrootsTransportKind, RadrootsTransportSatisfactionPolicy}; +use radroots_transport_nostr::{ RadrootsNostrClientPublishAdapter, RadrootsRelayOutcome, RadrootsRelayOutcomeKind, RadrootsRelayPublishAdapter, RadrootsRelayPublishRelayReceipt, RadrootsRelayPublishRequest, RadrootsRelayTargetSet, RadrootsRelayTransportError, RadrootsRelayUrl, RadrootsRelayUrlPolicy, }; -use radroots_transport::{RadrootsTransportKind, RadrootsTransportSatisfactionPolicy}; use radroots_transport_publish_protocol::{ NostrPublishTargetSourcePolicy, SignedNostrEventWire, TransportPublishDeliveryPolicy, TransportPublishEventRequest, TransportPublishEventResponse, TransportPublishJobStatus, @@ -2886,7 +2886,7 @@ mod tests { use radroots_nostr::prelude::{ RadrootsNostrEventVerification, RadrootsNostrTimestamp, radroots_nostr_build_event, }; - use radroots_relay_transport::{RadrootsMockRelayPublishAdapter, RadrootsRelayOutcome}; + use radroots_transport_nostr::{RadrootsMockRelayPublishAdapter, RadrootsRelayOutcome}; use radroots_transport_publish_protocol::{ NostrPublishTargetSourcePolicy, SignedNostrEventWire, TransportPublishDeliveryPolicy, TransportPublishEventRequest, TransportPublishJobStatus, TransportPublishOutcomeKind, @@ -3275,7 +3275,7 @@ mod tests { impl super::PublishRelayResolver for StaticPublishRelayResolver { fn resolve<'a>( &'a self, - url: &'a radroots_relay_transport::RadrootsRelayUrl, + url: &'a radroots_transport_nostr::RadrootsRelayUrl, ) -> super::PublishRelayResolveFuture<'a> { Box::pin(async move { match self.results.get(url.as_str()) { diff --git a/src/transport/jsonrpc/methods/transport_publish.rs b/src/transport/jsonrpc/methods/transport_publish.rs @@ -144,7 +144,7 @@ mod tests { use radroots_nostr::prelude::{ RadrootsNostrMetadata, RadrootsNostrTimestamp, radroots_nostr_build_event, }; - use radroots_relay_transport::RadrootsMockRelayPublishAdapter; + use radroots_transport_nostr::RadrootsMockRelayPublishAdapter; use radroots_transport_publish_protocol::{ NostrPublishTargetSourcePolicy, SignedNostrEventWire, TransportPublishTargetPolicyName, }; diff --git a/src/transport/jsonrpc/server.rs b/src/transport/jsonrpc/server.rs @@ -93,7 +93,7 @@ mod tests { use radroots_nostr::prelude::{ RadrootsNostrMetadata, RadrootsNostrTimestamp, radroots_nostr_build_event, }; - use radroots_relay_transport::RadrootsMockRelayPublishAdapter; + use radroots_transport_nostr::RadrootsMockRelayPublishAdapter; use radroots_transport_publish_protocol::{ NostrPublishTargetSourcePolicy, TransportPublishTargetPolicyName, }; @@ -222,7 +222,7 @@ mod tests { impl PublishRelayResolver for StaticPublishRelayResolver { fn resolve<'a>( &'a self, - _url: &'a radroots_relay_transport::RadrootsRelayUrl, + _url: &'a radroots_transport_nostr::RadrootsRelayUrl, ) -> PublishRelayResolveFuture<'a> { Box::pin(async move { Ok(self.addresses.clone()) }) } diff --git a/tests/source_boundary.rs b/tests/source_boundary.rs @@ -49,6 +49,10 @@ const FORBIDDEN_DAEMON_TRANSPORT_CONCEPTS: &[ForbiddenConcept] = &[ pattern: "PublishRelaySource", reason: "old relay-shaped publish source names must not return", }, + ForbiddenConcept { + pattern: "radroots_relay_transport", + reason: "daemon must depend on radroots_transport_nostr directly without a dependency alias", + }, ]; #[test] @@ -77,6 +81,24 @@ fn transport_publish_sources_reject_removed_protocol_identifiers() { } } + let manifest_source = read_source(manifest_dir.join("Cargo.toml").as_path()); + for concept in FORBIDDEN_DAEMON_TRANSPORT_CONCEPTS { + if contains_forbidden_concept(manifest_source.as_str(), concept.pattern) { + findings.push(format!( + "Cargo.toml contains removed daemon transport concept `{}`: {}", + concept.pattern, concept.reason + )); + } + } + assert!( + manifest_source.contains("radroots_transport_nostr = { path = "), + "Cargo.toml must depend on radroots_transport_nostr directly" + ); + assert!( + !manifest_source.contains("package = \"radroots_transport_nostr\""), + "Cargo.toml must not disguise radroots_transport_nostr through a package alias" + ); + assert!( findings.is_empty(), "daemon transport source-boundary violations:\n{}",