cli

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

commit c381a89464838a475129a3174766ffc3b661b43f
parent 9b3b3529ba5fbcf22784b7c6766fcaf7da5fe697
Author: triesap <tyson@radroots.org>
Date:   Wed,  1 Jul 2026 09:49:18 +0000

cli: remove runtime migration report surface

- remove migration report fields from runtime config and config-show output

- stop inspecting legacy CLI paths during config resolution

- delete compatibility-window and legacy-path DTOs from runtime views

- update test config builders for the target runtime contract

Diffstat:
Msrc/ops/exec/basket.rs | 11+++--------
Msrc/ops/exec/core.rs | 14++++----------
Msrc/ops/exec/farm.rs | 14++++----------
Msrc/ops/exec/listing.rs | 14++++----------
Msrc/ops/exec/market.rs | 14++++----------
Msrc/ops/exec/runtime.rs | 14++++----------
Msrc/ops/exec/trade.rs | 14++++----------
Msrc/runtime/config.rs | 47+----------------------------------------------
Msrc/runtime/provider.rs | 15+++++----------
Msrc/runtime/sdk.rs | 11+++--------
Msrc/runtime/sync.rs | 11+++--------
Msrc/view/runtime.rs | 21---------------------
12 files changed, 39 insertions(+), 161 deletions(-)

diff --git a/src/ops/exec/basket.rs b/src/ops/exec/basket.rs @@ -1318,7 +1318,6 @@ mod tests { use radroots_events::ids::RadrootsListingAddress; use radroots_events::kinds::{KIND_FARM, KIND_LISTING}; use radroots_replica_sync::{RadrootsReplicaIngestOutcome, radroots_replica_ingest_event}; - use radroots_runtime_paths::RadrootsMigrationReport; use radroots_secret_vault::RadrootsSecretBackend; use radroots_sql_core::{SqlExecutor, SqliteExecutor}; use serde_json::{Map, Value, json}; @@ -1334,10 +1333,9 @@ mod tests { use crate::runtime::account; use crate::runtime::config::{ AccountConfig, AccountSecretContractConfig, HyfConfig, IdentityConfig, InteractionConfig, - LocalConfig, LoggingConfig, MigrationConfig, MycConfig, OutputConfig, OutputFormat, - PathsConfig, PublishConfig, PublishTransport, PublishTransportSource, RelayConfig, - RelayConfigSource, RelayPublishPolicy, RpcConfig, RuntimeConfig, SignerBackend, - SignerConfig, Verbosity, + LocalConfig, LoggingConfig, MycConfig, OutputConfig, OutputFormat, PathsConfig, + PublishConfig, PublishTransport, PublishTransportSource, RelayConfig, RelayConfigSource, + RelayPublishPolicy, RpcConfig, RuntimeConfig, SignerBackend, SignerConfig, Verbosity, }; const LISTING_ADDR: &str = "30402:1111111111111111111111111111111111111111111111111111111111111111:AAAAAAAAAAAAAAAAAAAAAg"; @@ -1885,9 +1883,6 @@ mod tests { shared_accounts_secrets_root: secrets.join("shared/accounts"), default_identity_path: secrets.join("shared/identities/default.json"), }, - migration: MigrationConfig { - report: RadrootsMigrationReport::empty(), - }, logging: LoggingConfig { filter: "info".into(), directory: None, diff --git a/src/ops/exec/core.rs b/src/ops/exec/core.rs @@ -1207,11 +1207,9 @@ fn invalid_input(operation_id: &str, message: String) -> OperationAdapterError { #[cfg(test)] mod tests { - use std::path::{Path, PathBuf}; - - use radroots_runtime_paths::RadrootsMigrationReport; use radroots_secret_vault::RadrootsSecretBackend; use serde_json::{Map, Value}; + use std::path::{Path, PathBuf}; use tempfile::tempdir; use super::CoreOperationService; @@ -1222,10 +1220,9 @@ mod tests { }; use crate::runtime::config::{ AccountConfig, AccountSecretContractConfig, HyfConfig, IdentityConfig, InteractionConfig, - LocalConfig, LoggingConfig, MigrationConfig, MycConfig, OutputConfig, OutputFormat, - PathsConfig, PublishConfig, PublishTransport, PublishTransportSource, RelayConfig, - RelayConfigSource, RelayPublishPolicy, RpcConfig, RuntimeConfig, SignerBackend, - SignerConfig, Verbosity, + LocalConfig, LoggingConfig, MycConfig, OutputConfig, OutputFormat, PathsConfig, + PublishConfig, PublishTransport, PublishTransportSource, RelayConfig, RelayConfigSource, + RelayPublishPolicy, RpcConfig, RuntimeConfig, SignerBackend, SignerConfig, Verbosity, }; use crate::runtime::logging::LoggingState; @@ -1416,9 +1413,6 @@ mod tests { shared_accounts_secrets_root: secrets.join("shared/accounts"), default_identity_path: secrets.join("shared/identities/default.json"), }, - migration: MigrationConfig { - report: RadrootsMigrationReport::empty(), - }, logging: LoggingConfig { filter: "info".into(), directory: None, diff --git a/src/ops/exec/farm.rs b/src/ops/exec/farm.rs @@ -586,11 +586,9 @@ fn invalid_input(operation_id: &str, message: String) -> OperationAdapterError { #[cfg(test)] mod tests { - use std::path::{Path, PathBuf}; - - use radroots_runtime_paths::RadrootsMigrationReport; use radroots_secret_vault::RadrootsSecretBackend; use serde_json::{Map, Value, json}; + use std::path::{Path, PathBuf}; use tempfile::tempdir; use super::FarmOperationService; @@ -601,10 +599,9 @@ mod tests { }; use crate::runtime::config::{ AccountConfig, AccountSecretContractConfig, HyfConfig, IdentityConfig, InteractionConfig, - LocalConfig, LoggingConfig, MigrationConfig, MycConfig, OutputConfig, OutputFormat, - PathsConfig, PublishConfig, PublishTransport, PublishTransportSource, RelayConfig, - RelayConfigSource, RelayPublishPolicy, RpcConfig, RuntimeConfig, SignerBackend, - SignerConfig, Verbosity, + LocalConfig, LoggingConfig, MycConfig, OutputConfig, OutputFormat, PathsConfig, + PublishConfig, PublishTransport, PublishTransportSource, RelayConfig, RelayConfigSource, + RelayPublishPolicy, RpcConfig, RuntimeConfig, SignerBackend, SignerConfig, Verbosity, }; use crate::view::runtime::{ FarmPrivateExactLocationView, FarmPrivateLocationCandidateView, FarmPrivateLocationView, @@ -859,9 +856,6 @@ mod tests { shared_accounts_secrets_root: secrets.join("shared/accounts"), default_identity_path: secrets.join("shared/identities/default.json"), }, - migration: MigrationConfig { - report: RadrootsMigrationReport::empty(), - }, logging: LoggingConfig { filter: "info".into(), directory: None, diff --git a/src/ops/exec/listing.rs b/src/ops/exec/listing.rs @@ -461,11 +461,9 @@ fn invalid_input(operation_id: &str, message: String) -> OperationAdapterError { #[cfg(test)] mod tests { - use std::path::{Path, PathBuf}; - - use radroots_runtime_paths::RadrootsMigrationReport; use radroots_secret_vault::RadrootsSecretBackend; use serde_json::{Map, Value}; + use std::path::{Path, PathBuf}; use tempfile::tempdir; use super::ListingOperationService; @@ -475,10 +473,9 @@ mod tests { }; use crate::runtime::config::{ AccountConfig, AccountSecretContractConfig, HyfConfig, IdentityConfig, InteractionConfig, - LocalConfig, LoggingConfig, MigrationConfig, MycConfig, OutputConfig, OutputFormat, - PathsConfig, PublishConfig, PublishTransport, PublishTransportSource, RelayConfig, - RelayConfigSource, RelayPublishPolicy, RpcConfig, RuntimeConfig, SignerBackend, - SignerConfig, Verbosity, + LocalConfig, LoggingConfig, MycConfig, OutputConfig, OutputFormat, PathsConfig, + PublishConfig, PublishTransport, PublishTransportSource, RelayConfig, RelayConfigSource, + RelayPublishPolicy, RpcConfig, RuntimeConfig, SignerBackend, SignerConfig, Verbosity, }; #[test] @@ -586,9 +583,6 @@ mod tests { shared_accounts_secrets_root: secrets.join("shared/accounts"), default_identity_path: secrets.join("shared/identities/default.json"), }, - migration: MigrationConfig { - report: RadrootsMigrationReport::empty(), - }, logging: LoggingConfig { filter: "info".into(), directory: None, diff --git a/src/ops/exec/market.rs b/src/ops/exec/market.rs @@ -241,11 +241,9 @@ fn invalid_input(operation_id: &str, message: String) -> OperationAdapterError { #[cfg(test)] mod tests { - use std::path::{Path, PathBuf}; - - use radroots_runtime_paths::RadrootsMigrationReport; use radroots_secret_vault::RadrootsSecretBackend; use serde_json::{Map, Value}; + use std::path::{Path, PathBuf}; use tempfile::tempdir; use super::{MarketOperationService, market_listing_get_view, market_product_search_view}; @@ -255,10 +253,9 @@ mod tests { }; use crate::runtime::config::{ AccountConfig, AccountSecretContractConfig, HyfConfig, IdentityConfig, InteractionConfig, - LocalConfig, LoggingConfig, MigrationConfig, MycConfig, OutputConfig, OutputFormat, - PathsConfig, PublishConfig, PublishTransport, PublishTransportSource, RelayConfig, - RelayConfigSource, RelayPublishPolicy, RpcConfig, RuntimeConfig, SignerBackend, - SignerConfig, Verbosity, + LocalConfig, LoggingConfig, MycConfig, OutputConfig, OutputFormat, PathsConfig, + PublishConfig, PublishTransport, PublishTransportSource, RelayConfig, RelayConfigSource, + RelayPublishPolicy, RpcConfig, RuntimeConfig, SignerBackend, SignerConfig, Verbosity, }; use crate::view::runtime::{ FindPriceView, FindQuantityView, FindResultProvenanceView, FindResultView, FindView, @@ -650,9 +647,6 @@ mod tests { shared_accounts_secrets_root: secrets.join("shared/accounts"), default_identity_path: secrets.join("shared/identities/default.json"), }, - migration: MigrationConfig { - report: RadrootsMigrationReport::empty(), - }, logging: LoggingConfig { filter: "info".into(), directory: None, diff --git a/src/ops/exec/runtime.rs b/src/ops/exec/runtime.rs @@ -214,10 +214,8 @@ where #[cfg(test)] mod tests { - use std::path::{Path, PathBuf}; - - use radroots_runtime_paths::RadrootsMigrationReport; use radroots_secret_vault::RadrootsSecretBackend; + use std::path::{Path, PathBuf}; use tempfile::tempdir; use super::RuntimeOperationService; @@ -227,10 +225,9 @@ mod tests { }; use crate::runtime::config::{ AccountConfig, AccountSecretContractConfig, HyfConfig, IdentityConfig, InteractionConfig, - LocalConfig, LoggingConfig, MigrationConfig, MycConfig, OutputConfig, OutputFormat, - PathsConfig, PublishConfig, PublishTransport, PublishTransportSource, RelayConfig, - RelayConfigSource, RelayPublishPolicy, RpcConfig, RuntimeConfig, SignerBackend, - SignerConfig, Verbosity, + LocalConfig, LoggingConfig, MycConfig, OutputConfig, OutputFormat, PathsConfig, + PublishConfig, PublishTransport, PublishTransportSource, RelayConfig, RelayConfigSource, + RelayPublishPolicy, RpcConfig, RuntimeConfig, SignerBackend, SignerConfig, Verbosity, }; #[test] @@ -333,9 +330,6 @@ mod tests { shared_accounts_secrets_root: secrets.join("shared/accounts"), default_identity_path: secrets.join("shared/identities/default.json"), }, - migration: MigrationConfig { - report: RadrootsMigrationReport::empty(), - }, logging: LoggingConfig { filter: "info".into(), directory: None, diff --git a/src/ops/exec/trade.rs b/src/ops/exec/trade.rs @@ -1237,11 +1237,9 @@ fn invalid_input(operation_id: &str, message: String) -> OperationAdapterError { #[cfg(test)] mod tests { - use std::path::{Path, PathBuf}; - - use radroots_runtime_paths::RadrootsMigrationReport; use radroots_secret_vault::RadrootsSecretBackend; use serde_json::{Map, Value}; + use std::path::{Path, PathBuf}; use tempfile::tempdir; use super::{TradeOperationService, decision_result}; @@ -1254,10 +1252,9 @@ mod tests { }; use crate::runtime::config::{ AccountConfig, AccountSecretContractConfig, HyfConfig, IdentityConfig, InteractionConfig, - LocalConfig, LoggingConfig, MigrationConfig, MycConfig, OutputConfig, OutputFormat, - PathsConfig, PublishConfig, PublishTransport, PublishTransportSource, RelayConfig, - RelayConfigSource, RelayPublishPolicy, RpcConfig, RuntimeConfig, SignerBackend, - SignerConfig, Verbosity, + LocalConfig, LoggingConfig, MycConfig, OutputConfig, OutputFormat, PathsConfig, + PublishConfig, PublishTransport, PublishTransportSource, RelayConfig, RelayConfigSource, + RelayPublishPolicy, RpcConfig, RuntimeConfig, SignerBackend, SignerConfig, Verbosity, }; use crate::view::runtime::OrderDecisionView; @@ -1771,9 +1768,6 @@ mod tests { shared_accounts_secrets_root: secrets.join("shared/accounts"), default_identity_path: secrets.join("shared/identities/default.json"), }, - migration: MigrationConfig { - report: RadrootsMigrationReport::empty(), - }, logging: LoggingConfig { filter: "info".into(), directory: None, diff --git a/src/runtime/config.rs b/src/runtime/config.rs @@ -6,10 +6,7 @@ use std::path::PathBuf; use radroots_local_events::{RelayUrlValidationError, normalize_relay_url}; use radroots_runtime::{parse_bool_value, parse_strict_env_file, parse_u64_value}; -use radroots_runtime_paths::{ - RadrootsLegacyPathCandidate, RadrootsMigrationReport, RadrootsPathResolver, - inspect_legacy_paths, -}; +use radroots_runtime_paths::RadrootsPathResolver; use radroots_secret_vault::{RadrootsHostVaultPolicy, RadrootsSecretBackend}; use serde::Deserialize; use url::Url; @@ -384,7 +381,6 @@ pub struct RuntimeConfig { pub output: OutputConfig, pub interaction: InteractionConfig, pub paths: PathsConfig, - pub migration: MigrationConfig, pub logging: LoggingConfig, pub account: AccountConfig, pub account_secret_contract: AccountSecretContractConfig, @@ -400,11 +396,6 @@ pub struct RuntimeConfig { pub capability_bindings: Vec<CapabilityBindingConfig>, } -#[derive(Debug, Clone, PartialEq, Eq)] -pub struct MigrationConfig { - pub report: RadrootsMigrationReport, -} - #[derive(Debug, Default)] pub(crate) struct EnvFileValues(BTreeMap<String, String>); @@ -599,7 +590,6 @@ impl RuntimeConfig { env_file: &EnvFileValues, ) -> Result<Self, RuntimeError> { let paths = resolve_paths(env, env_file)?; - let migration = resolve_migration(paths.clone(), env); let workspace_config = paths .workspace_config_path .as_deref() @@ -660,7 +650,6 @@ impl RuntimeConfig { output, interaction: resolve_interaction_config(args, env), paths: paths.clone(), - migration, logging, account: AccountConfig { selector: args @@ -853,40 +842,6 @@ impl RuntimeConfig { } } -fn resolve_migration(paths: PathsConfig, env: &dyn Environment) -> MigrationConfig { - MigrationConfig { - report: inspect_legacy_paths(legacy_path_candidates(&paths, env)), - } -} - -fn legacy_path_candidates( - paths: &PathsConfig, - env: &dyn Environment, -) -> Vec<RadrootsLegacyPathCandidate> { - let Some(home_dir) = env.var("HOME").map(PathBuf::from) else { - return Vec::new(); - }; - let old_user_config = home_dir.join(".config/radroots/config.toml"); - let old_user_state_root = home_dir.join(".local/share/radroots"); - - vec![ - RadrootsLegacyPathCandidate::new( - "cli_user_config_v0", - "legacy cli user config", - old_user_config, - Some(paths.app_config_path.clone()), - "merge this config into the canonical app config path; the cli will not copy it on startup", - ), - RadrootsLegacyPathCandidate::new( - "cli_user_state_root_v0", - "legacy cli user state root", - old_user_state_root, - Some(paths.app_data_root.clone()), - "export/import the old local state into the canonical app and shared namespaces; the cli will not move it on startup", - ), - ] -} - fn load_cli_config_file(path: &Path) -> Result<Option<CliConfigFile>, RuntimeError> { if !path.exists() { return Ok(None); diff --git a/src/runtime/provider.rs b/src/runtime/provider.rs @@ -249,10 +249,8 @@ fn hyf_executable( #[cfg(test)] mod tests { - use std::path::PathBuf; - - use radroots_runtime_paths::RadrootsMigrationReport; use radroots_secret_vault::RadrootsSecretBackend; + use std::path::PathBuf; use super::{ ProviderProvenance, resolve_actor_write_plane_target, resolve_capability_providers, @@ -261,10 +259,10 @@ mod tests { use crate::runtime::config::{ AccountConfig, AccountSecretContractConfig, CapabilityBindingConfig, CapabilityBindingSource, CapabilityBindingTargetKind, HyfConfig, IdentityConfig, - InteractionConfig, LocalConfig, LoggingConfig, MigrationConfig, MycConfig, OutputConfig, - OutputFormat, PathsConfig, PublishConfig, PublishTransport, PublishTransportSource, - RelayConfig, RelayConfigSource, RelayPublishPolicy, RpcConfig, RuntimeConfig, - SignerBackend, SignerConfig, Verbosity, + InteractionConfig, LocalConfig, LoggingConfig, MycConfig, OutputConfig, OutputFormat, + PathsConfig, PublishConfig, PublishTransport, PublishTransportSource, RelayConfig, + RelayConfigSource, RelayPublishPolicy, RpcConfig, RuntimeConfig, SignerBackend, + SignerConfig, Verbosity, }; use crate::view::runtime::{ PublishProviderRuntimeView, PublishRelayRuntimeView, PublishRuntimeView, @@ -305,9 +303,6 @@ mod tests { shared_accounts_secrets_root: PathBuf::from("/tmp/shared/accounts-secrets"), default_identity_path: PathBuf::from("/tmp/default-identity.json"), }, - migration: MigrationConfig { - report: RadrootsMigrationReport::empty(), - }, logging: LoggingConfig { filter: "info".into(), directory: None, diff --git a/src/runtime/sdk.rs b/src/runtime/sdk.rs @@ -679,7 +679,6 @@ mod tests { use std::time::Duration; use radroots_authority::RadrootsEventSigner; - use radroots_runtime_paths::RadrootsMigrationReport; use radroots_sdk::{SdkStorageKind, StorageStatusRequest}; use radroots_secret_vault::RadrootsSecretBackend; use tempfile::tempdir; @@ -687,10 +686,9 @@ mod tests { use super::*; use crate::runtime::config::{ AccountConfig, AccountSecretContractConfig, HyfConfig, IdentityConfig, InteractionConfig, - LocalConfig, LoggingConfig, MigrationConfig, MycConfig, OutputConfig, OutputFormat, - PathsConfig, PublishConfig, PublishTransport, PublishTransportSource, RelayConfig, - RelayConfigSource, RelayPublishPolicy, RhiConfig, RpcConfig, SignerBackend, SignerConfig, - Verbosity, + LocalConfig, LoggingConfig, MycConfig, OutputConfig, OutputFormat, PathsConfig, + PublishConfig, PublishTransport, PublishTransportSource, RelayConfig, RelayConfigSource, + RelayPublishPolicy, RhiConfig, RpcConfig, SignerBackend, SignerConfig, Verbosity, }; struct DirectRrRsDependency { @@ -2033,9 +2031,6 @@ mod tests { shared_accounts_secrets_root: secrets.join("shared/accounts"), default_identity_path: secrets.join("shared/identities/default.json"), }, - migration: MigrationConfig { - report: RadrootsMigrationReport::empty(), - }, logging: LoggingConfig { filter: "info".to_owned(), directory: None, diff --git a/src/runtime/sync.rs b/src/runtime/sync.rs @@ -1420,7 +1420,6 @@ mod tests { use radroots_nostr::prelude::{ RadrootsNostrEvent, RadrootsNostrFilter, RadrootsNostrTimestamp, radroots_nostr_build_event, }; - use radroots_runtime_paths::RadrootsMigrationReport; use radroots_sdk::{ PushOutboxEventReceipt, PushOutboxEventState, PushOutboxReceipt, PushOutboxRelayOutcomeKind, PushOutboxRelayReceipt, SyncEventStoreStatus, SyncOutboxStatus, @@ -1438,10 +1437,9 @@ mod tests { use crate::cli::global::{FindQueryArgs, RecordLookupArgs}; use crate::runtime::config::{ AccountConfig, AccountSecretContractConfig, HyfConfig, IdentityConfig, InteractionConfig, - LocalConfig, LoggingConfig, MigrationConfig, MycConfig, OutputConfig, OutputFormat, - PathsConfig, PublishConfig, PublishTransport, PublishTransportSource, RelayConfig, - RelayConfigSource, RelayPublishPolicy, RpcConfig, RuntimeConfig, SignerBackend, - SignerConfig, Verbosity, + LocalConfig, LoggingConfig, MycConfig, OutputConfig, OutputFormat, PathsConfig, + PublishConfig, PublishTransport, PublishTransportSource, RelayConfig, RelayConfigSource, + RelayPublishPolicy, RpcConfig, RuntimeConfig, SignerBackend, SignerConfig, Verbosity, }; const FARM_D_TAG: &str = "AAAAAAAAAAAAAAAAAAAAAA"; @@ -2254,9 +2252,6 @@ mod tests { shared_accounts_secrets_root: secrets.join("shared/accounts"), default_identity_path: secrets.join("shared/identities/default.json"), }, - migration: MigrationConfig { - report: RadrootsMigrationReport::empty(), - }, logging: LoggingConfig { filter: "info".into(), directory: None, diff --git a/src/view/runtime.rs b/src/view/runtime.rs @@ -41,7 +41,6 @@ pub struct ConfigShowView { pub interaction: InteractionRuntimeView, pub config_files: ConfigFilesRuntimeView, pub paths: PathsRuntimeView, - pub migration: MigrationRuntimeView, pub logging: LoggingRuntimeView, pub account: AccountRuntimeView, pub signer: SignerRuntimeView, @@ -176,26 +175,6 @@ pub struct RuntimeInstanceRecordView { } #[derive(Debug, Clone, Serialize)] -pub struct MigrationRuntimeView { - pub posture: String, - pub state: String, - pub silent_startup_relocation: bool, - pub compatibility_window: String, - pub detected_legacy_paths: Vec<LegacyPathRuntimeView>, - pub actions: Vec<String>, -} - -#[derive(Debug, Clone, Serialize)] -pub struct LegacyPathRuntimeView { - pub id: String, - pub description: String, - pub path: String, - #[serde(skip_serializing_if = "Option::is_none")] - pub destination: Option<String>, - pub import_hint: String, -} - -#[derive(Debug, Clone, Serialize)] pub struct OutputRuntimeView { pub format: String, pub verbosity: String,