commit a43f499a5be5655176377b9cc174a83bc9b076fd
parent 6343ebe1310bde309a5bfe63ff86f104dd0545d1
Author: triesap <tyson@radroots.org>
Date: Thu, 9 Jul 2026 18:10:46 +0000
mesh: align CLI status fields
- expose mesh status with transport, configured, and implementation fields
- update mesh scope and policy views to avoid retired status names
- extend CLI source-boundary coverage for mesh status DTOs
- verify CLI formatting, check, transport tests, and sync tests
Diffstat:
4 files changed, 74 insertions(+), 26 deletions(-)
diff --git a/src/out/terminal/renderers/runtime.rs b/src/out/terminal/renderers/runtime.rs
@@ -264,12 +264,7 @@ fn mesh_scope_document(envelope: &OutputEnvelope, result: &Value) -> TerminalDoc
let mut document = common::document_with_title(envelope, title);
common::push_path_field(&mut document, "State", result, &["state"]);
common::push_path_field(&mut document, "Scope", result, &["scope"]);
- common::push_path_field(
- &mut document,
- "Implementation",
- result,
- &["implementation_state"],
- );
+ common::push_path_field(&mut document, "Implementation", result, &["implementation"]);
common::push_path_field(&mut document, "Message", result, &["message"]);
document
}
@@ -279,14 +274,9 @@ fn mesh_status_document(envelope: &OutputEnvelope, result: &Value) -> TerminalDo
let mut document = common::document_with_title(envelope, title);
common::push_path_field(&mut document, "State", result, &["state"]);
common::push_path_field(&mut document, "Scope", result, &["scope"]);
- common::push_path_field(&mut document, "Kind", result, &["transport_kind"]);
- common::push_path_field(&mut document, "Configured", result, &["configured_state"]);
- common::push_path_field(
- &mut document,
- "Implementation",
- result,
- &["implementation_state"],
- );
+ common::push_path_field(&mut document, "Transport", result, &["transport"]);
+ common::push_bool_field(&mut document, "Configured", result, &["configured"]);
+ common::push_path_field(&mut document, "Implementation", result, &["implementation"]);
common::push_bool_field(&mut document, "Usable", result, &["usable_for_delivery"]);
common::push_path_field(&mut document, "Decision", result, &["decision"]);
common::push_path_field(&mut document, "Message", result, &["message"]);
diff --git a/src/runtime/mesh.rs b/src/runtime/mesh.rs
@@ -41,9 +41,9 @@ pub fn status(config: &RuntimeConfig) -> MeshStatusView {
state: "ready".to_owned(),
source: MESH_SOURCE.to_owned(),
scope: scope.to_owned(),
- transport_kind: "reticulum".to_owned(),
- configured_state: scope.to_owned(),
- implementation_state: "preview_unavailable".to_owned(),
+ transport: "reticulum".to_owned(),
+ configured: scope != "disabled",
+ implementation: "preview_unavailable".to_owned(),
usable_for_delivery: false,
message: "Reticulum mesh preview is explicit and unavailable for real delivery".to_owned(),
}
@@ -55,7 +55,7 @@ pub fn policy_check(config: &RuntimeConfig) -> MeshPolicyCheckView {
source: MESH_SOURCE.to_owned(),
scope: config.mesh.scope.as_str().to_owned(),
policy: "reticulum_preview_delivery".to_owned(),
- transport_kind: "reticulum".to_owned(),
+ transport: "reticulum".to_owned(),
usable_for_delivery: false,
decision: "reject_delivery_attempt".to_owned(),
message: "Reticulum preview never falls back to Nostr and cannot deliver real events"
@@ -68,7 +68,7 @@ fn scope_view(scope: &str, state: &str) -> MeshScopeView {
state: state.to_owned(),
source: MESH_SOURCE.to_owned(),
scope: scope.to_owned(),
- implementation_state: "preview_unavailable".to_owned(),
+ implementation: "preview_unavailable".to_owned(),
message: "Mesh delivery is disabled unless a preview scope is explicitly configured"
.to_owned(),
actions: vec!["radroots mesh policy check".to_owned()],
diff --git a/src/view/runtime.rs b/src/view/runtime.rs
@@ -3368,7 +3368,7 @@ pub struct MeshScopeView {
pub state: String,
pub source: String,
pub scope: String,
- pub implementation_state: String,
+ pub implementation: String,
pub message: String,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub actions: Vec<String>,
@@ -3379,9 +3379,9 @@ pub struct MeshStatusView {
pub state: String,
pub source: String,
pub scope: String,
- pub transport_kind: String,
- pub configured_state: String,
- pub implementation_state: String,
+ pub transport: String,
+ pub configured: bool,
+ pub implementation: String,
pub usable_for_delivery: bool,
pub message: String,
}
@@ -3392,7 +3392,7 @@ pub struct MeshPolicyCheckView {
pub source: String,
pub scope: String,
pub policy: String,
- pub transport_kind: String,
+ pub transport: String,
pub usable_for_delivery: bool,
pub decision: String,
pub message: String,
diff --git a/tests/target_cli.rs b/tests/target_cli.rs
@@ -1812,9 +1812,11 @@ fn mesh_status_reports_reticulum_preview_unusable_state_without_fallback() {
let result = &value["result"];
assert_eq!(value["operation_id"], "mesh.status");
- assert_eq!(result["transport_kind"], "reticulum");
- assert_eq!(result["implementation_state"], "preview_unavailable");
+ assert_eq!(result["transport"], "reticulum");
+ assert_eq!(result["configured"], false);
+ assert_eq!(result["implementation"], "preview_unavailable");
assert_eq!(result["usable_for_delivery"], false);
+ assert_no_removed_transport_status_fields(result);
assert_contains(&result["message"], "Reticulum mesh preview is explicit");
assert!(
!result["message"]
@@ -1916,6 +1918,62 @@ fn transport_source_boundary_rejects_removed_relay_and_publish_proxy_surfaces()
);
}
+ let mesh_scope_view_source = source_window(
+ view_source.as_str(),
+ "pub struct MeshScopeView",
+ "pub struct MeshStatusView",
+ );
+ assert!(
+ mesh_scope_view_source.contains("pub implementation: String,"),
+ "mesh scope view must retain canonical implementation field"
+ );
+ assert!(
+ !mesh_scope_view_source.contains("pub implementation_state:"),
+ "mesh scope view must not expose removed implementation_state field"
+ );
+
+ let mesh_status_view_source = source_window(
+ view_source.as_str(),
+ "pub struct MeshStatusView",
+ "pub struct MeshPolicyCheckView",
+ );
+ for required in [
+ "pub transport: String,",
+ "pub configured: bool,",
+ "pub implementation: String,",
+ "pub usable_for_delivery: bool,",
+ "pub message: String,",
+ ] {
+ assert!(
+ mesh_status_view_source.contains(required),
+ "mesh status view must retain canonical field `{required}`"
+ );
+ }
+ for forbidden in [
+ "pub transport_kind:",
+ "pub configured_state:",
+ "pub implementation_state:",
+ ] {
+ assert!(
+ !mesh_status_view_source.contains(forbidden),
+ "mesh status view must not expose removed field `{forbidden}`"
+ );
+ }
+
+ let mesh_policy_view_source = source_window(
+ view_source.as_str(),
+ "pub struct MeshPolicyCheckView",
+ "pub struct RpcStatusView",
+ );
+ assert!(
+ mesh_policy_view_source.contains("pub transport: String,"),
+ "mesh policy view must retain canonical transport field"
+ );
+ assert!(
+ !mesh_policy_view_source.contains("pub transport_kind:"),
+ "mesh policy view must not expose removed transport_kind field"
+ );
+
let sdk_source = fs::read_to_string(manifest_dir.join("src/runtime/sdk.rs")).expect("read sdk");
for required in [
"pub(crate) fn validate_proxy_bearer_token",