From 10515d1562195854587e66547b705206e41e3c73 Mon Sep 17 00:00:00 2001 From: SinuS Von SifriduS Date: Thu, 3 Sep 2026 18:59:39 +0200 Subject: [PATCH] v0.3.8-pre.007-fix.003 --- Cargo.toml | 4 +- .../tests/desktop_security.rs | 34 +++++++----- deltas/0.3.8/pre.007-fix.003.md | 53 +++++++++++++++++++ docs/validation/025-V0_3_8_STORE_DESK.md | 15 +++++- 4 files changed, 89 insertions(+), 17 deletions(-) create mode 100644 deltas/0.3.8/pre.007-fix.003.md diff --git a/Cargo.toml b/Cargo.toml index 761754c..7b7f107 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,12 +1,12 @@ # file: Cargo.toml -# version: 460 +# version: 461 [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.7.fix.2" +version = "0.3.8-pre.7.fix.3" edition = "2024" license = "MIT" repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project" diff --git a/crates/ksp-app-store-desk/tests/desktop_security.rs b/crates/ksp-app-store-desk/tests/desktop_security.rs index 1123e4d..9892e90 100644 --- a/crates/ksp-app-store-desk/tests/desktop_security.rs +++ b/crates/ksp-app-store-desk/tests/desktop_security.rs @@ -1,5 +1,5 @@ // file: crates/ksp-app-store-desk/tests/desktop_security.rs -// version: 7 +// version: 8 //! Security boundary tests for the Store Desk scaffold. @@ -130,21 +130,27 @@ fn pre_007_transaction_request_rejects_datatables_search_order_draw_and_physical } #[test] -fn pre_007_fix_001_copy_tracing_never_logs_long_identifier_values() { +fn pre_007_fix_003_copy_tracing_is_field_id_only_without_value_material() { let frontend = include_str!("../frontend/ts/main.ts"); - assert!(frontend.contains("Store Desk long text copy requested")); - assert!(frontend.contains("Store Desk long text copy completed")); - assert!(frontend.contains("Store Desk long text copy failed")); - assert!(frontend.contains("{ fieldId }")); - for forbidden in [ - r#"{ fieldId, value }"#, - r#"{ value, fieldId }"#, - r#"{ value }"#, - r#"{ signature }"#, - r#"{ fieldId, signature }"#, - r#"{ signature, fieldId }"#, + for allowed in [ + r#"frontendDebug("main", "Store Desk long text copy requested", { fieldId })"#, + r#"frontendError("main", "Store Desk long text copy failed", { fieldId })"#, + r#"frontendDebug("main", "Store Desk long text copy completed", { fieldId })"#, ] { - assert!(!frontend.contains(forbidden), "long identifier value leaked into copy tracing: {forbidden}"); + assert!(frontend.contains(allowed), "expected field-id-only copy tracing call is missing: {allowed}"); + } + for forbidden in [ + r#"frontendDebug("main", "Store Desk long text copy requested", { fieldId, value })"#, + r#"frontendDebug("main", "Store Desk long text copy requested", { value, fieldId })"#, + r#"frontendDebug("main", "Store Desk long text copy requested", { value })"#, + r#"frontendError("main", "Store Desk long text copy failed", { fieldId, value })"#, + r#"frontendError("main", "Store Desk long text copy failed", { value, fieldId })"#, + r#"frontendError("main", "Store Desk long text copy failed", { value })"#, + r#"frontendDebug("main", "Store Desk long text copy completed", { fieldId, value })"#, + r#"frontendDebug("main", "Store Desk long text copy completed", { value, fieldId })"#, + r#"frontendDebug("main", "Store Desk long text copy completed", { value })"#, + ] { + assert!(!frontend.contains(forbidden), "copy tracing leaked copied value material: {forbidden}"); } } diff --git a/deltas/0.3.8/pre.007-fix.003.md b/deltas/0.3.8/pre.007-fix.003.md new file mode 100644 index 0000000..1b6d0d4 --- /dev/null +++ b/deltas/0.3.8/pre.007-fix.003.md @@ -0,0 +1,53 @@ + + + +# Delta `0.3.8-pre.007-fix.003` — rescope du canari de sécurité de copie + +## Base requise + +Base directe attendue : `0.3.8-pre.007-fix.002` (`workspace.package.version = 0.3.8-pre.7.fix.2`). + +## Objet + +Corriger le dernier canari de sécurité frontend trop large sans modifier le comportement runtime de copie introduit par les fixes précédents. + +## Défaut observé + +Le gate opérateur de `pre.007-fix.002` valide le runtime Store Desk et la copie du preview payload, mais le test `pre_007_fix_001_copy_tracing_never_logs_long_identifier_values` échoue parce qu'il interdit globalement la séquence `{ signature }` dans tout `frontend/ts/main.ts`. Cette séquence est légitime dans la requête de détail transaction et n'est pas un appel de tracing. + +## Correction + +Le canari est remplacé par un contrôle contextuel des trois appels du helper de copie : + +- `Store Desk long text copy requested` doit transporter exactement `{ fieldId }` ; +- `Store Desk long text copy failed` doit transporter exactement `{ fieldId }` ; +- `Store Desk long text copy completed` doit transporter exactement `{ fieldId }` ; +- les variantes transportant `value` restent explicitement interdites. + +Le canari n'interdit plus des variables métier hors contexte de tracing. + +## Hors scope + +Aucun changement frontend, backend, IPC, Store API, Store façade, PostgreSQL, SQL, Config ou capability Tauri. + +## Version + +```text +delivery = 0.3.8-pre.007-fix.003 +workspace.package.version = 0.3.8-pre.7.fix.3 +commit = v0.3.8-pre.007-fix.003 +tag = aucun +``` + +## Gate 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 +cargo test -p ksp-app-store-desk +cargo test -p ksp-store-lib +cargo check -p ksp-store-lib --no-default-features +``` diff --git a/docs/validation/025-V0_3_8_STORE_DESK.md b/docs/validation/025-V0_3_8_STORE_DESK.md index 882c0ee..6f25795 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 @@ -625,3 +625,16 @@ Le même smoke montre également le badge `Preview tronquée à 512 bytes`. Cett - [X] aucun changement Store API, Store façade, PostgreSQL, SQL, DTO IPC ou capability Tauri n'est introduit. Le gate Cargo de ce fix reste à rejouer après application du delta. + +## 31. `pre.007-fix.003` — rescope du canari de sécurité de copie + +Le gate opérateur de `pre.007-fix.002` confirme le comportement runtime attendu : le preview payload tronqué à 512 bytes est copiable et le tracing réel ne transporte que `fieldId = transaction-payload-preview`. Un seul test de sécurité reste rouge parce que son canari interdit globalement la séquence TypeScript `{ signature }`, qui existe légitimement dans la construction de la requête de détail hors tracing. + +`pre.007-fix.003` rescope ce canari sur les trois appels de tracing du helper de copie : + +- [X] `requested`, `failed` et `completed` doivent chacun transporter exactement `{ fieldId }` ; +- [X] les variantes transportant `value` avec ou sans `fieldId` restent explicitement interdites ; +- [X] aucune interdiction globale de variable métier comme `signature` n'est appliquée hors contexte de tracing ; +- [X] aucun frontend, backend, IPC, Store, SQL ou capability Tauri n'est modifié. + +Le gate Cargo de ce fix reste à rejouer après application du delta.