From 9fc30d3ab92d29d40ad4b7b45cb666217013d0fe Mon Sep 17 00:00:00 2001 From: SinuS Von SifriduS Date: Sat, 12 Sep 2026 08:04:19 +0200 Subject: [PATCH] v0.3.14-pre.007-fix.001 --- Cargo.toml | 4 +- .../src/runtime_resources.rs | 8 +- .../unit_tests/runtime_resources.rs | 4 +- deltas/0.3.14/pre.007-fix.001.md | 172 ++++++++++++++++++ 4 files changed, 180 insertions(+), 8 deletions(-) create mode 100644 deltas/0.3.14/pre.007-fix.001.md diff --git a/Cargo.toml b/Cargo.toml index f217ee7..49bf349 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,12 +1,12 @@ # file: Cargo.toml -# version: 574 +# version: 575 [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.14-pre.7" +version = "0.3.14-pre.7.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 2998c69..2f52dfb 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: 33 +// version: 34 use sha2::Digest; // rust-rules: trait-import @@ -4033,7 +4033,7 @@ enum RawTransactionIngestKnownReferenceMissingDisposition { } enum RawTransactionIngestKnownReferenceHydrationResolution { - Available(crate::RawTransactionIngress), + Available(std::boxed::Box), Missing { disposition: RawTransactionIngestKnownReferenceMissingDisposition, obligation: crate::RawTransactionIngestKnownReferenceObligation, @@ -4239,7 +4239,7 @@ impl RawTransactionIngestHydrationCoordinator { std::result::Result::Err(error) => return std::result::Result::Err(error), }; let ingress = match resolution { - RawTransactionIngestKnownReferenceHydrationResolution::Available(value) => value, + RawTransactionIngestKnownReferenceHydrationResolution::Available(value) => *value, RawTransactionIngestKnownReferenceHydrationResolution::Missing { disposition, obligation } => { if obligation.commitment() != hydration.commitment || obligation.reference().network() != &hydration.network @@ -4431,7 +4431,7 @@ fn resolve_known_reference_hydration( std::result::Result::Err(error) => return std::result::Result::Err(error), }; if let std::option::Option::Some(value) = ingress { - return std::result::Result::Ok(RawTransactionIngestKnownReferenceHydrationResolution::Available(value)); + return std::result::Result::Ok(RawTransactionIngestKnownReferenceHydrationResolution::Available(std::boxed::Box::new(value))); } let block_slot_supported = match http_role_supports_rpc_method(&hydration.http_pool, &hydration.hydration_role, "getBlock", hydration.network.as_str()) { std::result::Result::Ok(value) => value, 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 1c72f0b..b81c6e5 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: 27 +// version: 28 fn grpc_endpoint(cluster: &str) -> std::option::Option { return grpc_endpoint_with_identity(cluster, "yellowstone-fixture", "fixture-provider"); @@ -3238,7 +3238,7 @@ async fn v0_3_14_pre_007_known_reference_hydration_reuses_global_registry_and_av _ => return, }; 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.14/pre.007-fix.001.md b/deltas/0.3.14/pre.007-fix.001.md new file mode 100644 index 0000000..2113d13 --- /dev/null +++ b/deltas/0.3.14/pre.007-fix.001.md @@ -0,0 +1,172 @@ + + + +# Delta `0.3.14-pre.007-fix.001` — correction `large_enum_variant` + +## Base requise + +```text +0.3.14-pre.007 +workspace.package.version = 0.3.14-pre.7 +deltas/0.3.14/pre.007.md présent +``` + +## Objectif + +Corriger strictement la tranche `pre.007` après le gate opérateur, sans modifier sa responsabilité fonctionnelle : + +```text +faire passer Clippy -D warnings sans allow/expect +conserver exactement la distinction Available/Missing de l'hydration known-reference +conserver le registre global d'hydration unique +ne pas avancer la réconciliation prévue en pre.008 +``` + +## Défaut observé + +Le gate opérateur sur `0.3.14-pre.7` a produit : + +```text +cargo fmt --all : PASS +cargo fmt --all -- --check : PASS +audit Rust workspace rules : PASS +audit Markdown tables : PASS +cargo check --workspace : PASS +cargo clippy --workspace --all-targets --all-features -- -D warnings : FAIL +cargo test -p ksp-worker-raw-transaction-ingest-lib --all-targets --all-features : PASS +``` + +Clippy refuse `RawTransactionIngestKnownReferenceHydrationResolution` avec `clippy::large_enum_variant` : + +```text +Available(RawTransactionIngress) : au moins 488 octets +Missing { ... } : au moins 105 octets +``` + +Les `133` unit tests Worker ainsi que les suites d'intégration exécutées passent ; le défaut est donc un défaut de représentation mémoire détecté par le gate strict, pas un échec fonctionnel observé. + +## Cause + +`pre.007` transporte directement `RawTransactionIngress` dans la variante `Available` de l'enum privé de résolution known-reference. + +`RawTransactionIngress` est nettement plus volumineux que la variante `Missing`, ce qui force chaque valeur de l'enum à avoir la taille de la variante la plus grande et déclenche le lint `large_enum_variant` sous `-D warnings`. + +## Correction + +La variante disponible devient : + +```text +Available(Box) +``` + +La valeur est boxée uniquement au moment où `finalize_hydration` fournit un ingress disponible, puis immédiatement déboxée au point de consommation avant admission dans le pipeline commun. + +Le unit test `pre.007` qui injecte directement cette résolution dans `RawTransactionAdmission` déboxe également la valeur. + +Aucune variante, disposition, obligation, clé de coalescence, requête HTTP, provenance ou décision de runtime ne change. + +## Fichiers ajoutés + +```text +deltas/0.3.14/pre.007-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 +``` + +## Fichiers supprimés + +```text +aucun +``` + +## Version Cargo + +Le fix modifie du code Rust ; conformément à `VER-ID-007` et `VER-ID-010` : + +```text +header Cargo.toml : 574 -> 575 +workspace.package.version : 0.3.14-pre.7 -> 0.3.14-pre.7.fix.1 +``` + +Versions de fichiers : + +```text +src/runtime_resources.rs : 33 -> 34 +unit_tests/runtime_resources.rs : 27 -> 28 +``` + +## Frontières préservées + +```text +aucune nouvelle tâche +aucun nouveau scheduler +aucun nouveau registre d'hydration +aucun nouveau retry Worker +aucune nouvelle requête HTTP +aucune nouvelle dépendance +aucune nouvelle feature +aucun accès Config depuis Worker +aucun accès Job Backfill depuis Worker +aucun backend Store physique depuis Worker +aucune extension de surface publique +aucune intégration anticipée du gap ledger/supervisor de pre.008 +``` + +## Validations exécutées + +Dans le sandbox de préparation : + +```text +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 +scan des usages de RawTransactionIngestKnownReferenceHydrationResolution +comparaison exacte pre.007 -> pre.007-fix.001 +contrôle du contenu de l'archive delta +unzip -t de l'archive delta +``` + +## Validations non exécutées + +Le sandbox de préparation ne fournit pas le toolchain Cargo/Rust. Les gates suivants restent à exécuter côté opérateur : + +```text +cargo fmt --all +cargo fmt --all -- --check +cargo check --workspace +cargo clippy --workspace --all-targets --all-features -- -D warnings +cargo test -p ksp-worker-raw-transaction-ingest-lib --all-targets --all-features +``` + +## Décisions prises + +```text +fix strict de pre.007 +indirection uniquement sur la grosse variante Available +aucun allow/expect Clippy +aucune modification fonctionnelle de l'hydration known-reference +pre.008 reste la première tranche autorisée à intégrer la réconciliation au supervisor/gap ledger +``` + +## Questions ouvertes + +```text +aucune pour ce fix +``` + +## Gate opérateur après application + +```bash +cargo fmt --all +cargo fmt --all -- --check +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-worker-raw-transaction-ingest-lib --all-targets --all-features +```