From 62d6cf9dace526ff41cb2807f83e4cb78da0c23b Mon Sep 17 00:00:00 2001 From: SinuS Von SifriduS Date: Thu, 3 Sep 2026 14:21:47 +0200 Subject: [PATCH] v0.3.8-pre.005-fix.003 --- Cargo.toml | 4 +- .../tests/hardening_completeness.rs | 13 +------ deltas/0.3.8/pre.005-fix.003.md | 38 +++++++++++++++++++ docs/validation/025-V0_3_8_STORE_DESK.md | 24 +++++++++++- 4 files changed, 65 insertions(+), 14 deletions(-) create mode 100644 deltas/0.3.8/pre.005-fix.003.md diff --git a/Cargo.toml b/Cargo.toml index b1eb57e..8fe9a9c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,12 +1,12 @@ # file: Cargo.toml -# version: 454 +# version: 455 [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.5.fix.2" +version = "0.3.8-pre.5.fix.3" edition = "2024" license = "MIT" repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project" diff --git a/crates/ksp-store-postgres-lib/tests/hardening_completeness.rs b/crates/ksp-store-postgres-lib/tests/hardening_completeness.rs index c9a1eec..e54ee4c 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: 20 +// version: 21 #![warn(missing_docs)] #![deny(unreachable_pub)] @@ -417,16 +417,7 @@ fn pre_010_raw_account_private_sql_is_non_destructive_keyset_and_family_local() ] { assert!(source.contains(required), "required hardened RawAccount SQL contract missing: {required}"); } - for forbidden in [ - " OFFSET ", - "SELECT *", - "ON CONFLICT DO UPDATE", - "UPDATE ksp_raw_account", - "DELETE FROM ksp_raw_account", - "TRUNCATE", - "batch_size", - "priority", - ] { + for forbidden in ["SELECT *", "ON CONFLICT DO UPDATE", "UPDATE ksp_raw_account", "DELETE FROM ksp_raw_account", "TRUNCATE", "batch_size", "priority"] { assert!(!source.contains(forbidden), "forbidden RawAccount scope/policy SQL detected: {forbidden}"); } for required in ["b\"KSPA\"", "KSP/raw-account-state-cursor/v1", "CURSOR_BYTES: usize = 109"] { diff --git a/deltas/0.3.8/pre.005-fix.003.md b/deltas/0.3.8/pre.005-fix.003.md new file mode 100644 index 0000000..5eed3d9 --- /dev/null +++ b/deltas/0.3.8/pre.005-fix.003.md @@ -0,0 +1,38 @@ + + + +# Delta `0.3.8-pre.005-fix.003` — rescope final du canari hardening Account `OFFSET` + +## Base requise + +Base directe attendue : `0.3.8-pre.005-fix.002`. + +## Objet + +Corriger exclusivement le dernier canari historique PostgreSQL Account qui interdit encore `OFFSET` sur tout `raw_account.rs` malgré l'introduction volontaire du chemin d'inspection random-access de `pre.005`. + +## Modifications + +- `Cargo.toml` : version workspace `0.3.8-pre.5.fix.3` ; +- `crates/ksp-store-postgres-lib/tests/hardening_completeness.rs` : retrait de l'interdiction globale `OFFSET` du canari historique `pre_010_raw_account_private_sql_is_non_destructive_keyset_and_family_local` ; +- `docs/validation/025-V0_3_8_STORE_DESK.md` : consignation du gate opérateur et de la justification du rescope. + +Les canaris dédiés pagination/inspection continuent d'exiger que les quatre statements Account cursor/keyset restent sans `OFFSET`, que les deux statements d'inspection utilisent `LIMIT/OFFSET`, et que `raw_account.rs` ne contienne exactement que ces deux occurrences. Toutes les interdictions destructives du canari `pre.010` restent actives. + +## Hors scope + +Aucun changement de SQL, runtime PostgreSQL, Store API, façade Store, migration, capability, modèle, UI Desk ou protocole DataTables. + +## Validation attendue + +```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 +cargo test -p ksp-store-postgres-lib +cargo test -p ksp-store-lib +cargo check -p ksp-store-lib --no-default-features +cargo test -p ksp-store-api +``` diff --git a/docs/validation/025-V0_3_8_STORE_DESK.md b/docs/validation/025-V0_3_8_STORE_DESK.md index 77e6e7f..c3f5a48 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 @@ -442,3 +442,25 @@ Le live proof Account est de nouveau vert sur PostgreSQL 17 : KSP Store RawAccountState live proof: server major 17 test pre_009_real_postgres_raw_account_vertical_slice_is_atomic_concurrent_and_recoverable ... ok ``` + +## 24. Gate opérateur `pre.005-fix.002` et ouverture de `pre.005-fix.003` + +Le rejeu opérateur sur `0.3.8-pre.5.fix.2` confirme que `cargo fmt --all`, les audits Rust/Markdown, `cargo check --workspace`, `cargo clippy --workspace --all-targets`, les 69 tests unitaires PostgreSQL, `ksp-store-lib`, le mode `--no-default-features` et `ksp-store-api` sont verts. Les deux canaris `dependency_boundary` corrigés par `pre.005-fix.002` passent également. + +Il reste un unique canari historique trop large dans `hardening_completeness.rs` : + +```text +pre_010_raw_account_private_sql_is_non_destructive_keyset_and_family_local: FAIL +reason: raw_account.rs contient désormais OFFSET dans les deux statements d'inspection random-access +``` + +Ce canari `pre.010` interdit encore `OFFSET` sur l'intégralité de `raw_account.rs`, alors que ce fichier contient légitimement depuis `pre.005` deux statements `INSPECT_ACCOUNT_STATES_*` avec `LIMIT/OFFSET`. `pre.005-fix.003` retire uniquement cette interdiction globale devenue obsolète. + +Les garanties pertinentes restent strictes et redondantes : + +- `pre_007_raw_account_pagination_is_keyset_cursor_bound_and_policy_free` exige que les quatre statements `LIST_ACCOUNT_STATES_*` restent sans `OFFSET` ; +- `v0_3_8_pre_005_raw_account_keyset_sql_remains_offset_free_while_inspection_is_random_access` exige les quatre statements keyset sans `OFFSET`, les deux statements d'inspection random-access avec `LIMIT/OFFSET`, et exactement deux occurrences d'`OFFSET` dans `raw_account.rs` ; +- le canari `pre_010` conserve toutes ses interdictions destructives et de policy (`SELECT *`, `ON CONFLICT DO UPDATE`, `UPDATE`, `DELETE`, `TRUNCATE`, `batch_size`, `priority`). + +Aucun SQL, runtime PostgreSQL, contrat public, migration, capability, modèle ou comportement Store n'est modifié. +