cli

Command-line interface for Radroots
git clone https://radroots.dev/git/cli.git
Log | Files | Refs | README | LICENSE

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:
Msrc/runtime/transport.rs | 28+++++++++++++++++-----------
Mtests/target_cli.rs | 13+++++++------
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"]