radrootsd

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

commit 8f8eb36aaaea091bd4b7c9aa3bafdc005cfd34a5
parent 687aab080bfe0d79a13ef526c6f47b9e70cdbbe7
Author: triesap <tyson@radroots.org>
Date:   Thu,  9 Jul 2026 05:04:27 +0000

transport: use shared reticulum preview message

Diffstat:
Msrc/core/transport_publish.rs | 15++++++++++-----
Mtests/source_boundary.rs | 29+++++++++++++++++++++++++++++
2 files changed, 39 insertions(+), 5 deletions(-)

diff --git a/src/core/transport_publish.rs b/src/core/transport_publish.rs @@ -16,7 +16,10 @@ use radroots_nostr::prelude::{ RadrootsNostrClient, RadrootsNostrEventVerification, RadrootsNostrFilter, RadrootsNostrKind, RadrootsNostrPublicKey, radroots_nostr_verify_event, }; -use radroots_transport::{RadrootsTransportKind, RadrootsTransportSatisfactionPolicy}; +use radroots_transport::{ + RADROOTS_RETICULUM_UNAVAILABLE_MESSAGE, RadrootsTransportKind, + RadrootsTransportSatisfactionPolicy, +}; use radroots_transport_nostr::{ RadrootsNostrClientPublishAdapter, RadrootsRelayOutcome, RadrootsRelayOutcomeKind, RadrootsRelayPublishAdapter, RadrootsRelayPublishRelayReceipt, RadrootsRelayPublishRequest, @@ -2454,10 +2457,7 @@ fn reticulum_preview_outcome(target: &TransportPublishTarget) -> TransportPublis source: TransportPublishTargetSource::ReticulumPreview, attempted: false, outcome_kind, - message: Some( - "reticulum transport is registered for preview but not routable by radrootsd" - .to_owned(), - ), + message: Some(RADROOTS_RETICULUM_UNAVAILABLE_MESSAGE.to_owned()), latency_ms: None, } } @@ -2886,6 +2886,7 @@ mod tests { use radroots_nostr::prelude::{ RadrootsNostrEventVerification, RadrootsNostrTimestamp, radroots_nostr_build_event, }; + use radroots_transport::RADROOTS_RETICULUM_UNAVAILABLE_MESSAGE; use radroots_transport_nostr::{RadrootsMockRelayPublishAdapter, RadrootsRelayOutcome}; use radroots_transport_publish_protocol::{ NostrPublishTargetSourcePolicy, SignedNostrEventWire, TransportPublishDeliveryPolicy, @@ -4710,6 +4711,10 @@ mod tests { response.job.targets[0].outcome_kind, TransportPublishOutcomeKind::PreviewUnavailable ); + assert_eq!( + response.job.targets[0].message.as_deref(), + Some(RADROOTS_RETICULUM_UNAVAILABLE_MESSAGE) + ); assert!(!response.job.targets[0].attempted); assert!(adapter.captured_raw_events().is_empty()); } diff --git a/tests/source_boundary.rs b/tests/source_boundary.rs @@ -240,6 +240,35 @@ fn transport_publish_capabilities_expose_per_transport_readiness() { } } +#[test] +fn transport_publish_reticulum_preview_outcomes_use_shared_unavailable_message() { + let daemon_source = read_source( + Path::new(env!("CARGO_MANIFEST_DIR")) + .join("src/core/transport_publish.rs") + .as_path(), + ); + for required in [ + "RADROOTS_RETICULUM_UNAVAILABLE_MESSAGE", + "message: Some(RADROOTS_RETICULUM_UNAVAILABLE_MESSAGE.to_owned())", + "publish_event_records_reticulum_preview_unavailable_as_terminal_nonfailure", + ] { + assert!( + daemon_source.contains(required), + "daemon Reticulum preview publish outcomes must retain shared unavailable-message witness `{required}`" + ); + } + + let retired_message = [ + "reticulum transport is registered for preview", + "not routable by radrootsd", + ] + .join(" but "); + assert!( + !daemon_source.contains(retired_message.as_str()), + "daemon Reticulum preview publish outcomes must not revive local unavailable-message copy" + ); +} + fn rust_source_files(root: &Path) -> Vec<PathBuf> { let mut paths = Vec::new(); collect_rust_source_files(root, &mut paths);