commit 340ed54af1782c92c977ba3df0c53dc5867a07b4
parent 9046b9bac6fd1129c6fdd8a5ee835d7851744415
Author: triesap <tyson@radroots.org>
Date: Tue, 7 Jul 2026 09:14:39 +0000
transport: deduplicate Reticulum status rows
- Build status rows from the active profile plus one preview row only when distinct.
- Use approved Reticulum unavailable message in profile and status output.
- Assert exact message text and single Reticulum preview status row.
- Validate with CLI fmt, check, and focused transport tests.
Diffstat:
2 files changed, 24 insertions(+), 17 deletions(-)
diff --git a/src/runtime/transport.rs b/src/runtime/transport.rs
@@ -13,6 +13,10 @@ use crate::view::runtime::{
};
const TRANSPORT_SOURCE: &str = "transport profile config";
+const RETICULUM_PREVIEW_UNAVAILABLE_MESSAGE: &str = concat!(
+ "Reticulum transport is configured for future compatibility, ",
+ "but this build does not implement Reticulum delivery."
+);
pub fn profile(config: &RuntimeConfig) -> TransportProfileView {
active_profile_view(config)
@@ -75,19 +79,21 @@ pub fn set_profile(
}
pub fn status(config: &RuntimeConfig) -> TransportStatusView {
+ let mut transports = vec![active_profile_view(config)];
+ if config.transport.profile != TransportProfileKind::ReticulumPreview {
+ transports.push(profile_view_from_parts(
+ "reticulum_preview",
+ Vec::new(),
+ Some("reject_delivery_attempts".to_owned()),
+ None,
+ "preview_unavailable",
+ ));
+ }
+
TransportStatusView {
state: "ready".to_owned(),
source: TRANSPORT_SOURCE.to_owned(),
- transports: vec![
- active_profile_view(config),
- profile_view_from_parts(
- "reticulum_preview",
- Vec::new(),
- Some("reject_delivery_attempts".to_owned()),
- None,
- "preview_unavailable",
- ),
- ],
+ transports,
}
}
@@ -226,7 +232,7 @@ fn profile_view_from_parts(
let message = match profile_id {
"nostr" if usable_for_delivery => "Nostr relay transport is configured for delivery",
"nostr" => "Nostr transport requires configured Nostr relay targets",
- "reticulum_preview" => "Reticulum preview is explicit and unavailable for real delivery",
+ "reticulum_preview" => RETICULUM_PREVIEW_UNAVAILABLE_MESSAGE,
"proxy" => "Proxy transport delegates delivery to the configured endpoint",
_ => "Local-only profile does not deliver to network transports",
};
diff --git a/tests/target_cli.rs b/tests/target_cli.rs
@@ -1300,9 +1300,9 @@ fn transport_profile_reticulum_preview_output_is_transport_specific() {
assert_eq!(result["implementation_state"], "preview_unavailable");
assert_eq!(result["usable_for_delivery"], false);
assert_eq!(result["reticulum_preview_behavior"], "defer_delivery_plans");
- assert_contains(
- &result["message"],
- "Reticulum preview is explicit and unavailable",
+ assert_eq!(
+ result["message"],
+ "Reticulum transport is configured for future compatibility, but this build does not implement Reticulum delivery."
);
assert!(
!result["message"]
@@ -1334,14 +1334,15 @@ fn transport_status_reticulum_preview_output_reports_unusable_preview_state() {
assert_eq!(value["operation_id"], "transport.status");
assert_eq!(result["state"], "ready");
+ assert_eq!(transports.len(), 1);
assert_eq!(active["profile_id"], "reticulum_preview");
assert_eq!(active["transport_kind"], "reticulum");
assert_eq!(active["implementation_state"], "preview_unavailable");
assert_eq!(active["usable_for_delivery"], false);
assert_eq!(active["reticulum_preview_behavior"], "defer_delivery_plans");
- assert_contains(
- &active["message"],
- "Reticulum preview is explicit and unavailable",
+ assert_eq!(
+ active["message"],
+ "Reticulum transport is configured for future compatibility, but this build does not implement Reticulum delivery."
);
assert!(
!active["message"]