From 01502678bf4dfee39d446a50fcb0fdf34f3ef045 Mon Sep 17 00:00:00 2001 From: SinuS Von SifriduS Date: Thu, 3 Sep 2026 20:52:31 +0200 Subject: [PATCH] v0.3.8-pre.009-fix.001 --- Cargo.toml | 4 +- .../ksp-store-api/src/model/raw_inspection.rs | 18 ++++---- .../ksp-store-postgres-lib/src/raw_account.rs | 10 ++--- .../src/raw_transaction.rs | 10 ++--- .../tests/hardening_completeness.rs | 4 +- deltas/0.3.8/pre.009-fix.001.md | 43 +++++++++++++++++++ docs/validation/025-V0_3_8_STORE_DESK.md | 13 +++++- 7 files changed, 78 insertions(+), 24 deletions(-) create mode 100644 deltas/0.3.8/pre.009-fix.001.md diff --git a/Cargo.toml b/Cargo.toml index 23662b5..a0b9c7a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,12 +1,12 @@ # file: Cargo.toml -# version: 464 +# version: 465 [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-store-api", "crates/ksp-store-lib", "crates/ksp-store-postgres-lib", "crates/ksp-wallet-lib"] [workspace.package] -version = "0.3.8-pre.9" +version = "0.3.8-pre.9.fix.1" edition = "2024" license = "MIT" repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project" diff --git a/crates/ksp-store-api/src/model/raw_inspection.rs b/crates/ksp-store-api/src/model/raw_inspection.rs index 837e58a..e51a5e8 100644 --- a/crates/ksp-store-api/src/model/raw_inspection.rs +++ b/crates/ksp-store-api/src/model/raw_inspection.rs @@ -1,5 +1,5 @@ // file: crates/ksp-store-api/src/model/raw_inspection.rs -// version: 2 +// version: 3 /// Random-access page request dedicated to bounded interactive RAW inspection. /// @@ -104,10 +104,10 @@ impl RawTransactionObservationInspectionQuery { direction: crate::RawSortDirection, page: crate::RawInspectionPageRequest, ) -> crate::Result { - if let std::option::Option::Some(reference) = transaction.as_ref() { - if reference.network() != &network { - return std::result::Result::Err(raw_model_error("transaction")); - } + if let std::option::Option::Some(reference) = transaction.as_ref() + && reference.network() != &network + { + return std::result::Result::Err(raw_model_error("transaction")); } return std::result::Result::Ok(Self { direction, network, page, transaction }); } @@ -154,10 +154,10 @@ impl RawAccountObservationInspectionQuery { direction: crate::RawSortDirection, page: crate::RawInspectionPageRequest, ) -> crate::Result { - if let std::option::Option::Some(reference) = account.as_ref() { - if reference.network() != &network { - return std::result::Result::Err(raw_model_error("account")); - } + if let std::option::Option::Some(reference) = account.as_ref() + && reference.network() != &network + { + return std::result::Result::Err(raw_model_error("account")); } return std::result::Result::Ok(Self { account, direction, network, page }); } diff --git a/crates/ksp-store-postgres-lib/src/raw_account.rs b/crates/ksp-store-postgres-lib/src/raw_account.rs index 667525d..e6404b6 100644 --- a/crates/ksp-store-postgres-lib/src/raw_account.rs +++ b/crates/ksp-store-postgres-lib/src/raw_account.rs @@ -1,5 +1,5 @@ // file: crates/ksp-store-postgres-lib/src/raw_account.rs -// version: 7 +// version: 8 pub(crate) mod cursor; @@ -421,10 +421,10 @@ pub(crate) async fn inspect_raw_account_observations( std::result::Result::Ok(value) => value, std::result::Result::Err(error) => return std::result::Result::Err(error), }; - if let std::option::Option::Some(reference) = query.account() { - if observation.account() != reference { - return std::result::Result::Err(data_invalid("raw_account_observation_inspection_reference")); - } + if let std::option::Option::Some(reference) = query.account() + && observation.account() != reference + { + return std::result::Result::Err(data_invalid("raw_account_observation_inspection_reference")); } items.push(ksp_store_api::RawAccountObservationSummary::new( observation.observation_key(), diff --git a/crates/ksp-store-postgres-lib/src/raw_transaction.rs b/crates/ksp-store-postgres-lib/src/raw_transaction.rs index 1e7c52e..b4f092b 100644 --- a/crates/ksp-store-postgres-lib/src/raw_transaction.rs +++ b/crates/ksp-store-postgres-lib/src/raw_transaction.rs @@ -1,5 +1,5 @@ // file: crates/ksp-store-postgres-lib/src/raw_transaction.rs -// version: 6 +// version: 7 pub(crate) mod cursor; @@ -404,10 +404,10 @@ pub(crate) async fn inspect_raw_transaction_observations( std::result::Result::Ok(value) => value, std::result::Result::Err(error) => return std::result::Result::Err(error), }; - if let std::option::Option::Some(reference) = query.transaction() { - if observation.transaction() != reference { - return std::result::Result::Err(data_invalid("raw_transaction_observation_inspection_reference")); - } + if let std::option::Option::Some(reference) = query.transaction() + && observation.transaction() != reference + { + return std::result::Result::Err(data_invalid("raw_transaction_observation_inspection_reference")); } items.push(ksp_store_api::RawTransactionObservationSummary::new( observation.observation_key(), diff --git a/crates/ksp-store-postgres-lib/tests/hardening_completeness.rs b/crates/ksp-store-postgres-lib/tests/hardening_completeness.rs index 16582a5..432aa31 100644 --- a/crates/ksp-store-postgres-lib/tests/hardening_completeness.rs +++ b/crates/ksp-store-postgres-lib/tests/hardening_completeness.rs @@ -1,5 +1,5 @@ // file: crates/ksp-store-postgres-lib/tests/hardening_completeness.rs -// version: 22 +// version: 23 #![warn(missing_docs)] #![deny(unreachable_pub)] @@ -428,7 +428,7 @@ fn v0_3_8_pre_009_observation_inspection_sql_is_counted_random_access_safe_and_f ] { assert!(statement.contains(required), "missing transaction-observation inspection SQL contract: {required}"); } - for forbidden in ["ksp_raw_transactions AS", "payload", "archive_payload", "SELECT *"] { + for forbidden in ["ksp_raw_transactions", "ksp_raw_transaction_archive_payloads", "page.payload", "SELECT payload", "SELECT *"] { assert!(!statement.contains(forbidden), "transaction-observation inspection leaked unrelated/raw material: {forbidden}"); } } diff --git a/deltas/0.3.8/pre.009-fix.001.md b/deltas/0.3.8/pre.009-fix.001.md new file mode 100644 index 0000000..2825e42 --- /dev/null +++ b/deltas/0.3.8/pre.009-fix.001.md @@ -0,0 +1,43 @@ + + + +# Delta `0.3.8-pre.009-fix.001` — Clippy et canari Observation + +## Base requise + +Base directe attendue : `0.3.8-pre.009` (`workspace.package.version = 0.3.8-pre.9`). + +## Objet + +Fermer les quatre warnings Clippy introduits par `pre.009` et rescopier le canari SQL Observation Transaction afin qu'il distingue les metadata de provenance sûres des bytes RAW interdits. + +## Corrections production + +Les quatre validations imbriquées `if let` + `if` des nouvelles queries/decoders Observation sont exprimées avec des let-chains Rust 2024. La logique, les erreurs statiques, les network guards et les références comparées restent identiques. + +## Correction du canari SQL + +Le canari ne bannit plus le token générique `payload`, car `source_payload_hash` et `source_payload_size_bytes` sont des metadata de provenance contractuelles et sûres. Il interdit à la place les surfaces RAW physiques exactes : + +```text +ksp_raw_transactions +ksp_raw_transaction_archive_payloads +page.payload +SELECT payload +SELECT * +``` + +Les statements Observation de production ne sont pas modifiés. + +## Hors scope + +Aucune UI, migration, index, Config, capability Tauri, projection Observation ou payload/data RAW n'est ajouté. + +## Version + +```text +delivery = 0.3.8-pre.009-fix.001 +workspace.package.version = 0.3.8-pre.9.fix.1 +commit = v0.3.8-pre.009-fix.001 +tag = aucun +``` diff --git a/docs/validation/025-V0_3_8_STORE_DESK.md b/docs/validation/025-V0_3_8_STORE_DESK.md index 5312080..a5dcdc5 100644 --- a/docs/validation/025-V0_3_8_STORE_DESK.md +++ b/docs/validation/025-V0_3_8_STORE_DESK.md @@ -1,5 +1,5 @@ - + # Validation v0.3.8 — Store Desk V1 RAW @@ -737,3 +737,14 @@ Store operation-network validation inventory: 18 Le gate Cargo de `pre.009` reste à rejouer après application du delta. +## 35. `pre.009-fix.001` — Clippy et canari SQL Observation Transaction + +Le gate opérateur de `0.3.8-pre.9` confirme que les audits KSP, `cargo check --workspace`, Store API, Store lib et les inventaires 14/14 sont fonctionnels. Deux défauts de qualité restent à corriger avant clôture de `pre.009` : + +- [X] quatre warnings `clippy::collapsible_if` dans les nouveaux chemins Observation (`ksp-store-api`, `raw_transaction.rs`, `raw_account.rs`) sont remplacés par des let-chains Rust 2024 sans modifier le contrat ; +- [X] le canari SQL Transaction Observation ne bannit plus le mot générique `payload`, car les metadata sûres `source_payload_hash` et `source_payload_size_bytes` en font légitimement usage ; +- [X] le canari interdit désormais les sources/colonnes RAW physiques précises : table transaction, table archive payload, `page.payload`, `SELECT payload` et `SELECT *` ; +- [X] aucune projection Observation ne gagne de byte payload/data et aucun SQL de production n'est élargi ; +- [X] la version workspace devient `0.3.8-pre.9.fix.1` car du code Rust de production et un test Rust sont modifiés. + +Le gate Cargo du fix reste à rejouer après application du delta.