diff --git a/Cargo.toml b/Cargo.toml index a2c2f59..54bdb25 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,12 +1,12 @@ # file: Cargo.toml -# version: 542 +# version: 543 [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.13-pre.3" +version = "0.3.13-pre.3.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/unit_tests/runtime_resources.rs b/crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/runtime_resources.rs index 15f4239..02c8279 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: 13 +// version: 14 fn grpc_endpoint(cluster: &str) -> std::option::Option { return grpc_endpoint_with_identity(cluster, "yellowstone-fixture", "fixture-provider"); @@ -826,8 +826,8 @@ async fn v0_3_13_pre_002_multi_source_activation_fails_closed_until_supervisor_t }; let mut resources = crate::RawTransactionIngestRuntimeResources::new(first); assert!(resources.try_push_yellowstone_source(second).is_ok()); - let error = match resources.into_yellowstone_source() { - std::result::Result::Ok(_) => return, + let error = match resources.validate_single_source_activation() { + std::result::Result::Ok(()) => return, std::result::Result::Err(error) => error, }; assert_eq!(error.code(), crate::ERROR_CODE_RAW_TRANSACTION_INGEST_RUNTIME_INVALID); @@ -1044,7 +1044,9 @@ async fn pre_005_block_hydration_uses_distinct_composite_method() { std::result::Result::Ok(value) => value, std::result::Result::Err(_) => return, }; + let hydration = source.hydration_context(); let provenance = match super::build_hydration_provenance( + &hydration, &settings, &signal, "fixture-http-provider", @@ -1465,7 +1467,9 @@ async fn pre_004_status_provenance_and_future_source_timestamp_are_bounded_and_r std::result::Result::Ok(value) => value, std::result::Result::Err(_) => return, }; + let hydration = source.hydration_context(); let provenance = match super::build_hydration_provenance( + &hydration, &settings, &signal, "fixture-http-provider", @@ -1777,8 +1781,6 @@ async fn v0_3_13_pre_003_standard_logs_reference_hydrates_once_to_exact_common_r }; assert_eq!(ingress.provenance.protocol().as_str(), "solana_ws_http"); assert_eq!(ingress.provenance.acquisition_method().as_str(), "logs_get_transaction"); - assert_eq!(ingress.material.slot(), 42); - assert_eq!(ingress.material.signature(), &ksp_store_lib::RawTransactionSignature::new([0_u8; 64])); let (mut admission, sender) = crate::RawTransactionAdmission::new(1); if sender.send(ingress).await.is_err() { return; diff --git a/deltas/0.3.13/pre.003-fix.001.md b/deltas/0.3.13/pre.003-fix.001.md new file mode 100644 index 0000000..333bd25 --- /dev/null +++ b/deltas/0.3.13/pre.003-fix.001.md @@ -0,0 +1,210 @@ + + + +# Delta 0.3.13-pre.003-fix.001 — correction des tests Worker après généralisation source-neutral + +## Base requise + +```text +delivery précédente : 0.3.13-pre.003 +Cargo base : 0.3.13-pre.3 +delta base : deltas/0.3.13/pre.003.md +archive delta base : ksp-general-0.3.13-pre.003.zip +SHA-256 delta base : 669b875410799b8a2c5806cddad81740bdd4dd78e36c68f6b268a6b0257f18f4 +``` + +Le gate opérateur de `pre.003` confirme que le formatage, les audits et `cargo check --workspace` sont propres, mais que les cibles de tests Worker ne compilent plus après la généralisation source-neutral de `runtime_resources`. `cargo clippy --workspace --all-targets --all-features -- -D warnings` et `cargo test -p ksp-worker-raw-transaction-ingest-lib` échouent sur sept diagnostics provenant du même fichier de tests. + +## Objectif + +Corriger uniquement les tests devenus obsolètes par rapport au contrat production de `pre.003`, sans rouvrir l'API ni modifier la logique runtime : + +```text +aucun code production modifié +aucune API publique ajoutée ou supprimée +aucune dépendance modifiée +aucune logique réseau/hydration/admission modifiée +aucun avancement vers blockSubscribe pre.004 +``` + +## Version + +```text +livraison : 0.3.13-pre.003-fix.001 +workspace.package.version : 0.3.13-pre.3.fix.1 +archive : ksp-general-0.3.13-pre.003-fix.001.zip +``` + +Conformément aux règles de versionnement KSP, le fix modifie un fichier `.rs`; le `workspace.package.version` est donc synchronisé avec l'identifiant SemVer technique du correctif. + +## Diagnostic opérateur + +Les sept diagnostics se répartissent en trois causes. + +### Ancien extracteur mono-Yellowstone supprimé + +Le test `v0_3_13_pre_002_multi_source_activation_fails_closed_until_supervisor_tranche` appelait encore : + +```text +RawTransactionIngestRuntimeResources::into_yellowstone_source +``` + +Cette méthode a été supprimée en `pre.003` lorsque l'aggregate a été rendu source-neutral. La barrière correspondante est désormais : + +```text +RawTransactionIngestRuntimeResources::validate_single_source_activation +``` + +Le test utilise donc le contrat actuel et continue de vérifier exactement l'erreur : + +```text +runtime_resources.multi_source_activation_pending +``` + +Les deux erreurs d'inférence `E0282` étaient secondaires à l'absence de l'ancienne méthode et disparaissent avec cette correction. + +### Contexte d'hydration manquant + +Deux tests appelaient encore l'ancienne signature de : + +```text +build_hydration_provenance +``` + +`pre.003` a ajouté en premier argument le contexte source-neutral : + +```text +&RawTransactionIngestHydrationContext +``` + +Les tests construisent maintenant ce contexte via : + +```text +source.hydration_context() +``` + +puis le transmettent à `build_hydration_provenance`. Aucun contrat production n'est élargi pour les tests. + +### Accesseurs volontairement absents de RawTransactionMaterial + +Le nouveau test Standard Logs tentait d'appeler : + +```text +ingress.material.slot() +ingress.material.signature() +``` + +`RawTransactionMaterial` garde ces champs privés et ne fournit volontairement pas ces accesseurs. Le test ne doit pas provoquer l'ajout d'une API uniquement pour introspection. + +Les deux assertions sont donc supprimées à ce niveau. La même preuve reste effectuée après passage dans l'admission centrale et canonicalisation, via : + +```text +acquisition.transaction().slot() == 42 +acquisition.transaction().reference().signature().as_bytes() == [0; 64] +``` + +Cela vérifie en plus le chemin réellement consommé par le Worker. + +## Fichiers modifiés + +```text +Cargo.toml +crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/runtime_resources.rs +``` + +## Fichiers ajoutés + +```text +deltas/0.3.13/pre.003-fix.001.md +``` + +## Fichiers supprimés + +```text +aucun +``` + +## Versions de fichiers incrémentées + +```text +Cargo.toml : 542 -> 543 +worker unit_tests/runtime_resources.rs : 13 -> 14 +``` + +## Validation opérateur de la base pre.003 + +Le log fourni confirme avant fix : + +```text +cargo fmt --all : exécuté +cargo fmt --all -- --check : PASS / silencieux +General Rust rule audit : clean +Rust export completeness audit : 0 candidate(s) +KSP workspace Rust rule audit : clean +Markdown table audit : clean (340 tables, 831 files) +cargo check --workspace : PASS +cargo clippy --workspace --all-targets --all-features -- -D warnings : FAIL sur compilation des tests Worker +cargo test -p ksp-worker-raw-transaction-ingest-lib : FAIL sur les mêmes 7 diagnostics +``` + +Diagnostics observés : + +```text +E0599 : into_yellowstone_source supprimé +E0282 : 2 erreurs d'inférence secondaires +E0061 : 2 appels build_hydration_provenance sans hydration context +E0599 : RawTransactionMaterial::slot absent +E0599 : RawTransactionMaterial::signature absent +``` + +## Validations dans l'environnement d'assemblage + +Le toolchain Rust n'est pas disponible dans l'environnement d'assemblage. Les validations statiques KSP exécutables localement et le contrôle exhaustif du delta sont réalisés avant packaging. + +Les commandes Cargo ne sont pas déclarées PASS localement : + +```bash +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 +``` + +## Résultats statiques finaux de l'assemblage + +```text +General Rust rule audit: clean +Rust export completeness audit: 0 candidate(s) +KSP workspace Rust rule audit: clean +Markdown table audit: clean (340 tables, 832 files) +Normative rule definitions: 489 +Unique normative IDs: 489 +Duplicates: 0 +``` + +## Gate opérateur avant pre.004 + +```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 +``` + +`pre.004` ne doit démarrer qu'après retour vert de ce gate. + +## Décisions + +- Le fix conserve l'encapsulation de `RawTransactionMaterial`; aucun getter n'est ajouté pour satisfaire un test. +- Le fix conserve l'aggregate source-neutral introduit en `pre.003`; l'ancien extracteur mono-Yellowstone n'est pas restauré. +- Le fix conserve le contexte d'hydration source-neutral et adapte les tests à sa signature actuelle. +- Aucun changement fonctionnel de `pre.003` n'est introduit. + +## Questions ouvertes + +```text +aucune +```