diff --git a/Cargo.toml b/Cargo.toml index 1b48085..f5a4e0e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,12 +1,12 @@ # file: Cargo.toml -# version: 606 +# version: 607 [workspace] resolver = "3" members = ["crates/ksp-app-backfill-desk", "crates/ksp-app-config-desk", "crates/ksp-app-raw-transaction-ingest-desk", "crates/ksp-app-solprices-desk", "crates/ksp-app-store-desk", "crates/ksp-app-wallet-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-interface-lib", "crates/ksp-job-api", "crates/ksp-job-backfill-lib", "crates/ksp-logging-lib", "crates/ksp-offchain-transport-lib", "crates/ksp-onchain-transport-lib", "crates/ksp-program-api", "crates/ksp-raw-transaction-lib", "crates/ksp-store-api", "crates/ksp-store-lib", "crates/ksp-store-postgres-lib", "crates/ksp-wallet-lib", "crates/ksp-worker-api", "crates/ksp-worker-raw-transaction-ingest-lib"] [workspace.package] -version = "0.3.15-pre.7" +version = "0.3.15-pre.7.fix.1" edition = "2024" license = "MIT" repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project" diff --git a/crates/ksp-app-raw-transaction-ingest-desk/src/app_state.rs b/crates/ksp-app-raw-transaction-ingest-desk/src/app_state.rs index dd2af9b..925face 100644 --- a/crates/ksp-app-raw-transaction-ingest-desk/src/app_state.rs +++ b/crates/ksp-app-raw-transaction-ingest-desk/src/app_state.rs @@ -99,10 +99,7 @@ impl crate::AppState { } /// Revalidates one future Start request and reconstructs its exact Transport/Worker source contract without launching a Worker. - pub(crate) fn validate_route_start( - &self, - request: &crate::RawIngestRouteStartRequestDto, - ) -> ksp_core_lib::Result { + pub(crate) fn validate_route_start(&self, request: &crate::RawIngestRouteStartRequestDto) -> ksp_core_lib::Result { let generation = self.inventory_generation.lock(); let generation = match generation { std::result::Result::Ok(value) => *value, diff --git a/crates/ksp-app-raw-transaction-ingest-desk/src/dto_route.rs b/crates/ksp-app-raw-transaction-ingest-desk/src/dto_route.rs index 610ae46..fbc9758 100644 --- a/crates/ksp-app-raw-transaction-ingest-desk/src/dto_route.rs +++ b/crates/ksp-app-raw-transaction-ingest-desk/src/dto_route.rs @@ -26,13 +26,7 @@ impl crate::RawIngestRouteId { /// Returns all V1 route identifiers in stable UI order. #[must_use] pub(crate) fn all() -> std::vec::Vec { - return vec![ - Self::YellowstoneHydrated, - Self::StandardLogsHydrated, - Self::StandardBlockDirect, - Self::HeliusTransactionHydrated, - Self::HttpBlockPolling, - ]; + return vec![Self::YellowstoneHydrated, Self::StandardLogsHydrated, Self::StandardBlockDirect, Self::HeliusTransactionHydrated, Self::HttpBlockPolling]; } /// Returns the application-owned route family used by safe UI projections. @@ -263,11 +257,7 @@ impl crate::RawIngestRouteDto { /// Builds one route that is not composable from the current Config profile. #[must_use] - pub(crate) fn unavailable( - route_id: crate::RawIngestRouteId, - network: std::option::Option<&str>, - reason: crate::RawIngestRouteUnavailableReason, - ) -> Self { + pub(crate) fn unavailable(route_id: crate::RawIngestRouteId, network: std::option::Option<&str>, reason: crate::RawIngestRouteUnavailableReason) -> Self { return Self { family: route_id.family(), label: route_id.label().to_owned(), diff --git a/crates/ksp-app-raw-transaction-ingest-desk/src/errors.rs b/crates/ksp-app-raw-transaction-ingest-desk/src/errors.rs index b6020c9..beb7446 100644 --- a/crates/ksp-app-raw-transaction-ingest-desk/src/errors.rs +++ b/crates/ksp-app-raw-transaction-ingest-desk/src/errors.rs @@ -39,11 +39,9 @@ pub(crate) const ERROR_CODE_SPLASH_ORIGIN_INVALID: ksp_core_lib::ErrorCode = pub(crate) const ERROR_CODE_SPLASH_SETTING_INVALID: ksp_core_lib::ErrorCode = ksp_core_lib::ErrorCode::new("raw_transaction_ingest_desk", "splash_setting_invalid"); /// Tauri runtime assembly or execution failed. -pub(crate) const ERROR_CODE_TAURI_RUNTIME_FAILED: ksp_core_lib::ErrorCode = - ksp_core_lib::ErrorCode::new("raw_transaction_ingest_desk", "tauri_runtime_failed"); +pub(crate) const ERROR_CODE_TAURI_RUNTIME_FAILED: ksp_core_lib::ErrorCode = ksp_core_lib::ErrorCode::new("raw_transaction_ingest_desk", "tauri_runtime_failed"); /// A required Tauri window is missing from the configured application runtime. -pub(crate) const ERROR_CODE_TAURI_WINDOW_MISSING: ksp_core_lib::ErrorCode = - ksp_core_lib::ErrorCode::new("raw_transaction_ingest_desk", "tauri_window_missing"); +pub(crate) const ERROR_CODE_TAURI_WINDOW_MISSING: ksp_core_lib::ErrorCode = ksp_core_lib::ErrorCode::new("raw_transaction_ingest_desk", "tauri_window_missing"); /// A Tauri window show/focus/destroy/event operation failed. pub(crate) const ERROR_CODE_TAURI_WINDOW_OPERATION_FAILED: ksp_core_lib::ErrorCode = ksp_core_lib::ErrorCode::new("raw_transaction_ingest_desk", "tauri_window_operation_failed"); diff --git a/crates/ksp-app-raw-transaction-ingest-desk/src/lib.rs b/crates/ksp-app-raw-transaction-ingest-desk/src/lib.rs index e2d7d61..782a5aa 100644 --- a/crates/ksp-app-raw-transaction-ingest-desk/src/lib.rs +++ b/crates/ksp-app-raw-transaction-ingest-desk/src/lib.rs @@ -45,10 +45,10 @@ pub(crate) use self::constants::COMPOSITE_COMPONENT_ID_LOGGING; pub(crate) use self::constants::COMPOSITE_COMPONENT_ID_STORE; /// Composite-local identifier for the standard Transport component. pub(crate) use self::constants::COMPOSITE_COMPONENT_ID_TRANSPORT; -/// Prefix used by optional same-network Transport capability sources. -pub(crate) use self::constants::COMPOSITE_COMPONENT_ID_TRANSPORT_PREFIX; /// Composite-local optional Transport source for Helius WebSocket capabilities. pub(crate) use self::constants::COMPOSITE_COMPONENT_ID_TRANSPORT_HELIUS; +/// Prefix used by optional same-network Transport capability sources. +pub(crate) use self::constants::COMPOSITE_COMPONENT_ID_TRANSPORT_PREFIX; /// Composite-local optional Transport source for Yellowstone gRPC capabilities. pub(crate) use self::constants::COMPOSITE_COMPONENT_ID_TRANSPORT_YELLOWSTONE; /// Structured domain used while bootstrapping Config and Logging. diff --git a/crates/ksp-app-raw-transaction-ingest-desk/src/route_inventory.rs b/crates/ksp-app-raw-transaction-ingest-desk/src/route_inventory.rs index e948812..b027800 100644 --- a/crates/ksp-app-raw-transaction-ingest-desk/src/route_inventory.rs +++ b/crates/ksp-app-raw-transaction-ingest-desk/src/route_inventory.rs @@ -1,5 +1,5 @@ // file: crates/ksp-app-raw-transaction-ingest-desk/src/route_inventory.rs -// version: 4 +// version: 5 //! Config-only logical route inventory for Raw Transaction Ingest Desk. @@ -48,10 +48,7 @@ impl RouteCapabilities { } /// Rebuilds the complete safe route inventory from validated Config without opening any network, Store or Worker resource. -pub(crate) fn build_route_inventory( - management: &ksp_config_lib::ConfigManagement, - generation: u32, -) -> ksp_core_lib::Result { +pub(crate) fn build_route_inventory(management: &ksp_config_lib::ConfigManagement, generation: u32) -> ksp_core_lib::Result { let environment = ksp_config_lib::ConfigEnvironment::load(); let environment = match environment { std::result::Result::Ok(value) => value, @@ -61,7 +58,7 @@ pub(crate) fn build_route_inventory( } /// Rebuilds the complete safe route inventory from one already captured Config environment snapshot. -pub(crate) pub(crate) fn build_route_inventory_with_environment( +pub(crate) fn build_route_inventory_with_environment( management: &ksp_config_lib::ConfigManagement, environment: &ksp_config_lib::ConfigEnvironment, generation: u32, @@ -73,12 +70,7 @@ pub(crate) pub(crate) fn build_route_inventory_with_environment( }; let mut profiles = std::vec::Vec::with_capacity(catalog.profile_ids.len()); for profile_id in &catalog.profile_ids { - profiles.push(build_profile_inventory( - management, - environment, - profile_id.as_str(), - profile_id == &catalog.default_profile, - )); + profiles.push(build_profile_inventory(management, environment, profile_id.as_str(), profile_id == &catalog.default_profile)); } ksp_logging_lib::debug!( target: crate::TRACING_TARGET, @@ -164,11 +156,8 @@ fn build_profile_inventory( }, }; let network = store.settings().network().as_str().to_owned(); - let base_transport_profile = crate::required_composite_component_profile( - &composite, - crate::COMPOSITE_COMPONENT_ID_TRANSPORT, - ksp_config_lib::FILE_ID_STD_TRANSPORT, - ); + let base_transport_profile = + crate::required_composite_component_profile(&composite, crate::COMPOSITE_COMPONENT_ID_TRANSPORT, ksp_config_lib::FILE_ID_STD_TRANSPORT); let base_transport_profile = match base_transport_profile { std::result::Result::Ok(value) => value, std::result::Result::Err(_) => { @@ -184,12 +173,7 @@ fn build_profile_inventory( let base_transport = match base_transport { std::result::Result::Ok(value) => value, std::result::Result::Err(error) => { - return unavailable_profile( - profile_id, - is_default, - std::option::Option::Some(network.as_str()), - resolution_error_reason(&error), - ); + return unavailable_profile(profile_id, is_default, std::option::Option::Some(network.as_str()), resolution_error_reason(&error)); }, }; if !transport_matches_network(&base_transport, network.as_str()) { diff --git a/crates/ksp-app-raw-transaction-ingest-desk/src/route_start.rs b/crates/ksp-app-raw-transaction-ingest-desk/src/route_start.rs index a6fea1e..081764b 100644 --- a/crates/ksp-app-raw-transaction-ingest-desk/src/route_start.rs +++ b/crates/ksp-app-raw-transaction-ingest-desk/src/route_start.rs @@ -60,11 +60,8 @@ pub(crate) fn validate_route_start( "Raw Transaction Ingest Desk Start-time Store network no longer matches the selected route", )); } - let transport_profile = crate::required_composite_component_profile( - &composite, - crate::COMPOSITE_COMPONENT_ID_TRANSPORT, - ksp_config_lib::FILE_ID_STD_TRANSPORT, - ); + let transport_profile = + crate::required_composite_component_profile(&composite, crate::COMPOSITE_COMPONENT_ID_TRANSPORT, ksp_config_lib::FILE_ID_STD_TRANSPORT); let transport_profile = match transport_profile { std::result::Result::Ok(value) => value, std::result::Result::Err(error) => return route_start_error("Cannot resolve Start-time base Transport profile", error), @@ -115,12 +112,8 @@ fn prepare_standard_logs( network: &str, commitment: ksp_onchain_transport_lib::SolanaCommitment, ) -> ksp_core_lib::Result<()> { - let endpoint = single_ws_endpoint( - transport, - network, - ksp_onchain_transport_lib::WsProtocolKind::SolanaStandard, - ksp_onchain_transport_lib::WsSubscriptionKind::Logs, - ); + let endpoint = + single_ws_endpoint(transport, network, ksp_onchain_transport_lib::WsProtocolKind::SolanaStandard, ksp_onchain_transport_lib::WsSubscriptionKind::Logs); let endpoint = match endpoint { std::result::Result::Ok(value) => value, std::result::Result::Err(error) => return std::result::Result::Err(error), @@ -155,12 +148,8 @@ fn prepare_standard_block( network: &str, commitment: ksp_onchain_transport_lib::SolanaCommitment, ) -> ksp_core_lib::Result<()> { - let endpoint = single_ws_endpoint( - transport, - network, - ksp_onchain_transport_lib::WsProtocolKind::SolanaStandard, - ksp_onchain_transport_lib::WsSubscriptionKind::Block, - ); + let endpoint = + single_ws_endpoint(transport, network, ksp_onchain_transport_lib::WsProtocolKind::SolanaStandard, ksp_onchain_transport_lib::WsSubscriptionKind::Block); let endpoint = match endpoint { std::result::Result::Ok(value) => value, std::result::Result::Err(error) => return std::result::Result::Err(error), @@ -416,9 +405,7 @@ fn single_http_role( let matching = roles .into_iter() .filter(|role_name| { - return request_kinds - .iter() - .all(|request_kind| return http_role_supports_request_kind(settings, network, role_name.as_str(), request_kind)); + return request_kinds.iter().all(|request_kind| return http_role_supports_request_kind(settings, network, role_name.as_str(), request_kind)); }) .collect::>(); if matching.len() != 1 { @@ -427,12 +414,7 @@ fn single_http_role( return std::result::Result::Ok(ksp_onchain_transport_lib::HttpRoleName::new(matching[0].clone())); } -fn http_role_supports_request_kind( - settings: &ksp_onchain_transport_lib::HttpTransportSettings, - network: &str, - role_name: &str, - request_kind: &str, -) -> bool { +fn http_role_supports_request_kind(settings: &ksp_onchain_transport_lib::HttpTransportSettings, network: &str, role_name: &str, request_kind: &str) -> bool { for endpoint in settings.endpoints() { if !endpoint.enabled() || endpoint.cluster().as_str() != network { continue; diff --git a/crates/ksp-app-raw-transaction-ingest-desk/src/tauri.rs b/crates/ksp-app-raw-transaction-ingest-desk/src/tauri.rs index 64e789f..7672136 100644 --- a/crates/ksp-app-raw-transaction-ingest-desk/src/tauri.rs +++ b/crates/ksp-app-raw-transaction-ingest-desk/src/tauri.rs @@ -149,8 +149,6 @@ async fn validate_route_start( let result = state.validate_route_start(&request); return match result { std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(error) => { - std::result::Result::Err(project_command_error("validate_route_start", crate::TRACING_DOMAIN_ROUTE_START, &error)) - }, + std::result::Result::Err(error) => std::result::Result::Err(project_command_error("validate_route_start", crate::TRACING_DOMAIN_ROUTE_START, &error)), }; } diff --git a/crates/ksp-app-raw-transaction-ingest-desk/tests/desktop_security.rs b/crates/ksp-app-raw-transaction-ingest-desk/tests/desktop_security.rs index ddb0afa..ee4cabd 100644 --- a/crates/ksp-app-raw-transaction-ingest-desk/tests/desktop_security.rs +++ b/crates/ksp-app-raw-transaction-ingest-desk/tests/desktop_security.rs @@ -1,5 +1,5 @@ // file: crates/ksp-app-raw-transaction-ingest-desk/tests/desktop_security.rs -// version: 4 +// version: 5 //! Desktop security canaries for the Raw Transaction Ingest Desk scaffold. @@ -107,6 +107,6 @@ fn pre_007_start_request_and_acknowledgement_are_logical_only_and_resource_free( assert!(route_start.contains("ERROR_CODE_ROUTE_START_STALE_INVENTORY")); assert!(route_start.contains("build_route_inventory_with_environment")); assert!(route_start.contains("resolve_store_config_profile")); - assert!(!route_start.contains("with_context("endpoint")); - assert!(!route_start.contains("with_context("provider")); + assert!(!route_start.contains("with_context(\"endpoint\"")); + assert!(!route_start.contains("with_context(\"provider\"")); } diff --git a/crates/ksp-app-raw-transaction-ingest-desk/unit_tests/route_inventory.rs b/crates/ksp-app-raw-transaction-ingest-desk/unit_tests/route_inventory.rs index f5d2e76..ecfc7c7 100644 --- a/crates/ksp-app-raw-transaction-ingest-desk/unit_tests/route_inventory.rs +++ b/crates/ksp-app-raw-transaction-ingest-desk/unit_tests/route_inventory.rs @@ -27,12 +27,8 @@ fn pre_006_route_requirement_projection_is_fail_closed_and_ordered() { #[test] fn pre_006_unavailable_profile_projects_all_five_routes_without_physical_material() { - let profile = super::unavailable_profile( - "mainnet", - false, - std::option::Option::Some("mainnet"), - crate::RawIngestRouteUnavailableReason::MissingRequiredSecret, - ); + let profile = + super::unavailable_profile("mainnet", false, std::option::Option::Some("mainnet"), crate::RawIngestRouteUnavailableReason::MissingRequiredSecret); assert_eq!(profile.routes.len(), 5); assert_eq!(profile.network.as_deref(), std::option::Option::Some("mainnet")); for route in profile.routes { @@ -63,7 +59,10 @@ fn pre_006_fix_003_network_profiles_aggregate_same_network_capabilities_and_omit }; assert_eq!(inventory.generation, 7); assert_eq!(inventory.default_profile, "devnet"); - assert_eq!(inventory.profiles.iter().map(|profile| return profile.profile_id.as_str()).collect::>(), vec!["devnet", "mainnet", "testnet"]); + assert_eq!( + inventory.profiles.iter().map(|profile| return profile.profile_id.as_str()).collect::>(), + vec!["devnet", "mainnet", "testnet"] + ); let devnet = profile(&inventory, "devnet"); assert!(devnet.is_some()); if let std::option::Option::Some(devnet) = devnet { diff --git a/crates/ksp-app-raw-transaction-ingest-desk/unit_tests/route_start.rs b/crates/ksp-app-raw-transaction-ingest-desk/unit_tests/route_start.rs index 7953f31..4a7bca8 100644 --- a/crates/ksp-app-raw-transaction-ingest-desk/unit_tests/route_start.rs +++ b/crates/ksp-app-raw-transaction-ingest-desk/unit_tests/route_start.rs @@ -1,7 +1,6 @@ // file: crates/ksp-app-raw-transaction-ingest-desk/unit_tests/route_start.rs // version: 1 - #[test] fn pre_007_stale_generation_is_rejected_before_config_or_transport_reconstruction() { let management = crate::config_management(&[]); @@ -46,7 +45,8 @@ fn pre_007_public_standard_profiles_reconstruct_block_and_http_sources_without_n std::result::Result::Err(_) => return, }; for profile in inventory.profiles { - for route_id in [crate::RawIngestRouteId::StandardLogsHydrated, crate::RawIngestRouteId::StandardBlockDirect, crate::RawIngestRouteId::HttpBlockPolling] { + for route_id in [crate::RawIngestRouteId::StandardLogsHydrated, crate::RawIngestRouteId::StandardBlockDirect, crate::RawIngestRouteId::HttpBlockPolling] + { let route = profile.routes.iter().find(|route| return route.route_id == route_id); assert!(route.is_some(), "missing base route for {}", profile.profile_id); if let std::option::Option::Some(route) = route { diff --git a/deltas/0.3.15/pre.007-fix.001.md b/deltas/0.3.15/pre.007-fix.001.md new file mode 100644 index 0000000..8e5816c --- /dev/null +++ b/deltas/0.3.15/pre.007-fix.001.md @@ -0,0 +1,54 @@ + + + +# Delta `0.3.15-pre.007-fix.001` + +## Objet + +Corriger deux erreurs de syntaxe introduites dans `pre.007` qui empêchaient `cargo fmt`, `cargo check`, Clippy et les tests du Raw Transaction Ingest Desk de compiler la tranche. + +## Corrections + +Dans `route_inventory.rs`, la déclaration de `build_route_inventory_with_environment` contenait un doublon de visibilité : + +```text +pub(crate) pub(crate) fn +``` + +Elle redevient : + +```text +pub(crate) fn +``` + +Dans `tests/desktop_security.rs`, deux canaris recherchant des appels interdits à `with_context` contenaient des guillemets internes non échappés. Les littéraux Rust sont corrigés pour rechercher explicitement : + +```text +with_context(\"endpoint\" +with_context(\"provider\" +``` + +Le reexport crate-root de `COMPOSITE_COMPONENT_ID_TRANSPORT_PREFIX` est conservé : il est effectivement consommé par `route_inventory.rs`. L'avertissement `unused_import` observé dans le gate était une conséquence du fichier non parsable et non un export mort. + +## Périmètre + +Aucune sémantique de `pre.007` n'est modifiée : + +- même requête logique `profile_id + route_id + inventory_generation + commitment` ; +- même revalidation Config au Start ; +- mêmes cinq reconstructions de ressources Transport ; +- aucun `Store::open` ; +- aucune connexion réseau active ; +- aucun lancement de Worker ; +- aucun changement frontend fonctionnel. + +## Version + +```text +header racine : 606 -> 607 +workspace : 0.3.15-pre.7 -> 0.3.15-pre.7.fix.1 +``` + +## Gate opérateur + +Le gate complet de `pre.007` doit être rejoué après application de ce fix.