From df1dbbb8fb18bc9b2a917659d3735c95b8f58314 Mon Sep 17 00:00:00 2001 From: SinuS Von SifriduS Date: Wed, 9 Sep 2026 11:55:36 +0200 Subject: [PATCH] v0.3.12-pre.004-fix.001 --- Cargo.toml | 4 +- .../src/runtime_resources.rs | 19 ++-- .../unit_tests/runtime_resources.rs | 6 +- deltas/0.3.12/pre.004-fix.001.md | 97 +++++++++++++++++++ ...0_3_12_YELLOWSTONE_HYDRATION_CONTINUITY.md | 23 ++++- 5 files changed, 133 insertions(+), 16 deletions(-) create mode 100644 deltas/0.3.12/pre.004-fix.001.md diff --git a/Cargo.toml b/Cargo.toml index 7ca4679..8f3b925 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,12 +1,12 @@ # file: Cargo.toml -# version: 523 +# version: 524 [workspace] resolver = "3" members = ["crates/ksp-app-backfill-desk", "crates/ksp-app-config-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.12-pre.4" +version = "0.3.12-pre.4.fix.1" edition = "2024" license = "MIT" repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project" diff --git a/crates/ksp-worker-raw-transaction-ingest-lib/src/runtime_resources.rs b/crates/ksp-worker-raw-transaction-ingest-lib/src/runtime_resources.rs index 98c5ba5..cead8ca 100644 --- a/crates/ksp-worker-raw-transaction-ingest-lib/src/runtime_resources.rs +++ b/crates/ksp-worker-raw-transaction-ingest-lib/src/runtime_resources.rs @@ -1,5 +1,5 @@ // file: crates/ksp-worker-raw-transaction-ingest-lib/src/runtime_resources.rs -// version: 4 +// version: 5 #[cfg(test)] use sha2::Digest; // rust-rules: trait-import @@ -386,7 +386,7 @@ fn project_yellowstone_signal( #[cfg(test)] enum RawTransactionIngestHydrationOutcome { - Available(crate::RawTransactionIngress), + Available(std::boxed::Box), Missing(ksp_store_lib::RawTransactionReference), } @@ -434,12 +434,11 @@ async fn hydrate_yellowstone_signal( if transaction.slot() != signal.slot { return std::result::Result::Err(crate::runtime_error("hydration.slot_mismatch")); } - if let std::option::Option::Some(expected_index) = signal.transaction_index { - if let ksp_onchain_transport_lib::SolanaWireField::Value(actual_index) = transaction.transaction_index() { - if expected_index != u64::from(*actual_index) { - return std::result::Result::Err(crate::runtime_error("hydration.transaction_index_mismatch")); - } - } + if let std::option::Option::Some(expected_index) = signal.transaction_index + && let ksp_onchain_transport_lib::SolanaWireField::Value(actual_index) = transaction.transaction_index() + && expected_index != u64::from(*actual_index) + { + return std::result::Result::Err(crate::runtime_error("hydration.transaction_index_mismatch")); } let transaction_data = match transaction.transaction() { ksp_onchain_transport_lib::SolanaEncodedTransaction::Binary { data, encoding } @@ -482,12 +481,12 @@ async fn hydrate_yellowstone_signal( }), map_hydration_wire_field(transaction.transaction_index(), |value| return *value), ); - return std::result::Result::Ok(RawTransactionIngestHydrationOutcome::Available(crate::RawTransactionIngress { + return std::result::Result::Ok(RawTransactionIngestHydrationOutcome::Available(std::boxed::Box::new(crate::RawTransactionIngress { material, network: signal.network, provenance, source_key, - })); + }))); } #[cfg(test)] diff --git a/crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/runtime_resources.rs b/crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/runtime_resources.rs index 2000767..b602383 100644 --- a/crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/runtime_resources.rs +++ b/crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/runtime_resources.rs @@ -1,5 +1,5 @@ // file: crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/runtime_resources.rs -// version: 3 +// version: 4 fn grpc_endpoint(cluster: &str) -> std::option::Option { return grpc_endpoint_with_identity(cluster, "yellowstone-fixture", "fixture-provider"); @@ -749,7 +749,7 @@ async fn pre_004_observed_get_transaction_closes_signal_to_common_raw_ingress_wi assert_eq!(ingress.provenance.filter_id().map(ksp_store_lib::RawProvenanceCode::as_str), std::option::Option::Some("tx-fixture")); assert_eq!(ingress.provenance.observed_at().map(|value| return value.unix_millis()), std::option::Option::Some(1_760_000_123_456)); let (mut admission, sender) = crate::RawTransactionAdmission::new(1); - if sender.send(ingress).await.is_err() { + if sender.send(*ingress).await.is_err() { return; } std::mem::drop(sender); @@ -896,7 +896,7 @@ async fn pre_004_v0_null_and_omitted_wire_fields_preserve_common_raw_semantics() assert!(filter_id.starts_with("sha256.")); assert_eq!(filter_id.len(), 71); let (mut admission, sender) = crate::RawTransactionAdmission::new(1); - if sender.send(ingress).await.is_err() { + if sender.send(*ingress).await.is_err() { return; } std::mem::drop(sender); diff --git a/deltas/0.3.12/pre.004-fix.001.md b/deltas/0.3.12/pre.004-fix.001.md new file mode 100644 index 0000000..9f09f66 --- /dev/null +++ b/deltas/0.3.12/pre.004-fix.001.md @@ -0,0 +1,97 @@ + + + +# Delta `0.3.12-pre.004-fix.001` — correction du gate Clippy strict + +## Base requise + +```text +0.3.12-pre.004 +workspace.package.version = 0.3.12-pre.4 +``` + +Le gate opérateur communiqué confirme : + +```text +Rust rule audit : clean +Markdown table audit : clean (340 tables, 806 fichiers) +cargo check --workspace : PASS +cargo test -p ksp-raw-transaction-lib : PASS +cargo test -p ksp-worker-raw-transaction-ingest-lib : PASS +``` + +Le seul gate rouge est : + +```text +cargo clippy --workspace --all-targets --all-features -- -D warnings +``` + +avec `clippy::large_enum_variant` et deux occurrences de `clippy::collapsible_if` dans `runtime_resources.rs`. + +## Objectif + +Corriger exclusivement ces trois diagnostics sans `#[allow(...)]`, sans `#[expect(...)]`, sans changer le comportement de hydration et sans avancer le scope de `pre.005`. + +## Version + +```text +workspace.package.version = 0.3.12-pre.4.fix.1 +``` + +## Corrections + +`RawTransactionIngestHydrationOutcome::Available` devient : + +```text +Available(Box) +``` + +La box ne concerne que ce résultat privé `#[cfg(test)]`; elle supprime la disproportion de taille entre `Available` et `Missing`. Les unit tests déplacent explicitement l'ingress hors de la box avant admission. + +Le contrôle `transaction_index` utilise désormais une chaîne `if let` Rust 2024 unique. Il conserve exactement la règle précédente : un mismatch n'est rejeté que si le signal possède un index et si la réponse HTTP fournit un `SolanaWireField::Value` différent. `Omitted` et `Null` restent acceptés comme absence d'index HTTP comparable. + +## Fichiers ajoutés + +```text +deltas/0.3.12/pre.004-fix.001.md +``` + +## Fichiers modifiés + +```text +Cargo.toml +crates/ksp-worker-raw-transaction-ingest-lib/src/runtime_resources.rs +crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/runtime_resources.rs +docs/validation/029-V0_3_12_YELLOWSTONE_HYDRATION_CONTINUITY.md +``` + +## Fichiers supprimés + +Aucun. + +## Non-changements + +```text +aucune API publique +aucune dépendance +aucun changement de provenance +aucune politique retry Worker +aucun Block / BlockMeta / Slot +aucun source task Yellowstone productif +aucune continuité / replay +aucun lint neutralisé +``` + +## Gate opérateur requis + +```bash +cargo fmt --all +python3 scripts/audit_rust_workspace_rules.py +python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas +cargo check --workspace +cargo clippy --workspace --all-targets --all-features -- -D warnings +cargo test -p ksp-raw-transaction-lib +cargo test -p ksp-worker-raw-transaction-ingest-lib +``` + +Après gate vert, la suite reste `pre.005`. diff --git a/docs/validation/029-V0_3_12_YELLOWSTONE_HYDRATION_CONTINUITY.md b/docs/validation/029-V0_3_12_YELLOWSTONE_HYDRATION_CONTINUITY.md index 6b9d427..40a7624 100644 --- a/docs/validation/029-V0_3_12_YELLOWSTONE_HYDRATION_CONTINUITY.md +++ b/docs/validation/029-V0_3_12_YELLOWSTONE_HYDRATION_CONTINUITY.md @@ -1,5 +1,5 @@ - + # Validation v0.3.12 — Yellowstone + hydration HTTP + continuité de run du Worker RawTransaction @@ -947,3 +947,24 @@ exécuté un smoke live Worker La tranche suivante reste `pre.005` : adapters Block transactionnels et signaux continuity-only BlockMeta/Slot, toujours sans politique reconnect Worker. +## 40. Fix `pre.004-fix.001` — gate Clippy strict + +Le gate opérateur de `pre.004` confirme que `cargo check --workspace`, les audits et les suites de tests `ksp-raw-transaction-lib` / `ksp-worker-raw-transaction-ingest-lib` passent. En revanche, `cargo clippy --workspace --all-targets --all-features -- -D warnings` échoue sur trois diagnostics dans la chaîne de hydration test-only : + +```text +clippy::large_enum_variant sur RawTransactionIngestHydrationOutcome +clippy::collapsible_if sur le contrôle optionnel transaction_index +clippy::collapsible_if sur le même contrôle imbriqué +``` + +Le correctif ne neutralise aucun lint. `Available` stocke désormais `RawTransactionIngress` derrière `Box`, ce qui réduit la taille de l'enum de résultat test-only sans modifier le contrat fonctionnel. Les deux canaris qui transfèrent ensuite l'ingress vers `RawTransactionAdmission` déplacent explicitement la valeur hors de la box. + +Le contrôle d'index est réécrit avec une chaîne `if let` Rust 2024 unique : le mismatch n'est signalé que lorsque le signal possède un index, que la réponse HTTP fournit un index concret et que les deux valeurs diffèrent. La sémantique de `Omitted`/`Null` reste inchangée. + +Version du workspace après correctif : + +```text +0.3.12-pre.4.fix.1 +``` + +Aucune API publique, dépendance, provenance, politique retry, surface Block/continuity ou source task productive n'est modifiée.