From 03a94f4fb614629da913e706cb7b04d8afaaf252 Mon Sep 17 00:00:00 2001 From: SinuS Von SifriduS Date: Wed, 2 Sep 2026 10:55:57 +0200 Subject: [PATCH] v0.3.7-pre.003-fix.001 --- Cargo.toml | 4 +- crates/ksp-app-backfill-desk/src/errors.rs | 16 ++- .../tests/desktop_contract.rs | 21 +++- .../tests/desktop_security.rs | 16 ++- .../composite.ksp-app-backfill-desk.json | 12 +- deltas/0.3.7/pre.003-fix.001.md | 116 ++++++++++++++++++ docs/plans/028-V0_3_7_BACKFILL_DESK_PLAN.md | 4 +- docs/validation/024-V0_3_7_BACKFILL_DESK.md | 37 +++++- 8 files changed, 200 insertions(+), 26 deletions(-) create mode 100644 deltas/0.3.7/pre.003-fix.001.md diff --git a/Cargo.toml b/Cargo.toml index e39c189..bd84307 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,12 +1,12 @@ # file: Cargo.toml -# version: 418 +# version: 419 [workspace] resolver = "3" members = ["crates/ksp-app-backfill-desk", "crates/ksp-app-config-desk", "crates/ksp-app-solprices-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.7-pre.3" +version = "0.3.7-pre.3.fix.1" edition = "2024" license = "MIT" repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project" diff --git a/crates/ksp-app-backfill-desk/src/errors.rs b/crates/ksp-app-backfill-desk/src/errors.rs index 6eac950..406b75e 100644 --- a/crates/ksp-app-backfill-desk/src/errors.rs +++ b/crates/ksp-app-backfill-desk/src/errors.rs @@ -1,20 +1,24 @@ // file: crates/ksp-app-backfill-desk/src/errors.rs -// version: 2 +// version: 3 //! Application-local error codes for Backfill Desk composition and desktop runtime surfaces. -/// Backfill Desk composite configuration is missing or references an unexpected document. -pub(crate) const ERROR_CODE_CONFIG_COMPOSITE_INVALID: ksp_core_lib::ErrorCode = ksp_core_lib::ErrorCode::new("backfill_desk", "config_composite_invalid"); /// Shared Backfill Desk runtime state is internally inconsistent. pub(crate) const ERROR_CODE_APP_STATE_INVALID: ksp_core_lib::ErrorCode = ksp_core_lib::ErrorCode::new("backfill_desk", "app_state_invalid"); /// Shared Backfill Desk runtime state cannot be locked safely. pub(crate) const ERROR_CODE_APP_STATE_LOCK_FAILED: ksp_core_lib::ErrorCode = ksp_core_lib::ErrorCode::new("backfill_desk", "app_state_lock_failed"); +/// Backfill Desk composite configuration is missing or references an unexpected document. +pub(crate) const ERROR_CODE_CONFIG_COMPOSITE_INVALID: ksp_core_lib::ErrorCode = + ksp_core_lib::ErrorCode::new("backfill_desk", "config_composite_invalid"); /// Frontend logging requested an unsupported level. -pub(crate) const ERROR_CODE_FRONTEND_LOG_LEVEL_INVALID: ksp_core_lib::ErrorCode = ksp_core_lib::ErrorCode::new("backfill_desk", "frontend_log_level_invalid"); +pub(crate) const ERROR_CODE_FRONTEND_LOG_LEVEL_INVALID: ksp_core_lib::ErrorCode = + ksp_core_lib::ErrorCode::new("backfill_desk", "frontend_log_level_invalid"); /// Frontend logging requested a target outside the application whitelist. -pub(crate) const ERROR_CODE_FRONTEND_LOG_TARGET_INVALID: ksp_core_lib::ErrorCode = ksp_core_lib::ErrorCode::new("backfill_desk", "frontend_log_target_invalid"); +pub(crate) const ERROR_CODE_FRONTEND_LOG_TARGET_INVALID: ksp_core_lib::ErrorCode = + ksp_core_lib::ErrorCode::new("backfill_desk", "frontend_log_target_invalid"); /// Backfill Desk could not install the managed Logging runtime or its safe fallback. -pub(crate) const ERROR_CODE_LOGGING_BOOTSTRAP_FAILED: ksp_core_lib::ErrorCode = ksp_core_lib::ErrorCode::new("backfill_desk", "logging_bootstrap_failed"); +pub(crate) const ERROR_CODE_LOGGING_BOOTSTRAP_FAILED: ksp_core_lib::ErrorCode = + ksp_core_lib::ErrorCode::new("backfill_desk", "logging_bootstrap_failed"); /// Splash readiness was invoked from a window other than the splash window. pub(crate) const ERROR_CODE_SPLASH_ORIGIN_INVALID: ksp_core_lib::ErrorCode = ksp_core_lib::ErrorCode::new("backfill_desk", "splash_origin_invalid"); /// A KSP desk splash environment duration is malformed or exceeds its safety bound. diff --git a/crates/ksp-app-backfill-desk/tests/desktop_contract.rs b/crates/ksp-app-backfill-desk/tests/desktop_contract.rs index 72e1bb6..cf07695 100644 --- a/crates/ksp-app-backfill-desk/tests/desktop_contract.rs +++ b/crates/ksp-app-backfill-desk/tests/desktop_contract.rs @@ -1,5 +1,5 @@ // file: crates/ksp-app-backfill-desk/tests/desktop_contract.rs -// version: 2 +// version: 3 //! Structural desktop contract checks for the Backfill Desk scaffold. @@ -99,7 +99,13 @@ fn pre_002_package_dependencies_match_desk_baseline() { fn pre_002_splash_assets_and_styles_match_existing_desk_template() { let root = app_root(); let reference = workspace_root().join("crates/ksp-app-solprices-desk"); - for relative in ["frontend/fonts/DOS_Amazigh.ttf", "frontend/imgs/logo.png", "frontend/imgs/splash.png", "icons/favicon.png", "icons/favicon.ico"] { + for relative in [ + "frontend/fonts/DOS_Amazigh.ttf", + "frontend/imgs/logo.png", + "frontend/imgs/splash.png", + "icons/favicon.png", + "icons/favicon.ico", + ] { assert_eq!(read_bytes(root.join(relative).as_path()), read_bytes(reference.join(relative).as_path()), "Desk asset differs: {relative}"); } let splash = read_text(root.join("frontend/splash.html").as_path()); @@ -107,7 +113,9 @@ fn pre_002_splash_assets_and_styles_match_existing_desk_template() { assert!(splash.contains("Backfill Desk")); let splash_style = read_text(root.join("frontend/sass/splash.scss").as_path()); let reference_style = read_text(reference.join("frontend/sass/splash.scss").as_path()); - let normalized = splash_style.replace("crates/ksp-app-backfill-desk", "crates/ksp-app-solprices-desk").replace("// version: 1", "// version: 2"); + let normalized = splash_style + .replace("crates/ksp-app-backfill-desk", "crates/ksp-app-solprices-desk") + .replace("// version: 1", "// version: 2"); assert_eq!(normalized, reference_style); } @@ -134,7 +142,12 @@ fn pre_002_shell_and_splash_use_shared_frontend_tooling() { fn pre_003_composite_packaging_follows_atomic_config_registry_contract() { let root = app_root(); let config = read_json(root.join("tauri.conf.json").as_path()); - let resources = config.get("bundle").and_then(|value| value.get("resources")).and_then(serde_json::Value::as_object); + let resources = config + .get("bundle") + .and_then(|value| { + return value.get("resources"); + }) + .and_then(serde_json::Value::as_object); assert!(resources.is_some()); let resources = match resources { std::option::Option::Some(value) => value, diff --git a/crates/ksp-app-backfill-desk/tests/desktop_security.rs b/crates/ksp-app-backfill-desk/tests/desktop_security.rs index 3652192..2f377df 100644 --- a/crates/ksp-app-backfill-desk/tests/desktop_security.rs +++ b/crates/ksp-app-backfill-desk/tests/desktop_security.rs @@ -1,5 +1,5 @@ // file: crates/ksp-app-backfill-desk/tests/desktop_security.rs -// version: 2 +// version: 3 //! Security and dependency-boundary checks for the Backfill Desk scaffold. @@ -53,9 +53,15 @@ fn pre_002_capability_surface_is_core_plus_tracing_only() { } let manifest = read_text(root.join("Cargo.toml").as_path()); assert!(manifest.contains("tauri-plugin-tracing.workspace = true")); - for forbidden in - ["ksp-job-backfill-lib", "ksp-onchain-transport-lib", "ksp-store-lib", "ksp-store-api", "ksp-store-postgres-lib", "reqwest", "tokio-postgres"] - { + for forbidden in [ + "ksp-job-backfill-lib", + "ksp-onchain-transport-lib", + "ksp-store-lib", + "ksp-store-api", + "ksp-store-postgres-lib", + "reqwest", + "tokio-postgres", + ] { assert!(!manifest.contains(forbidden), "pre.002 opens a later-layer dependency: {forbidden}"); } } @@ -118,7 +124,7 @@ fn pre_002_frontend_instrumentation_avoids_business_or_secret_payloads() { fn pre_003_keeps_config_only_composition_boundary() { let root = app_root(); let manifest = read_text(root.join("Cargo.toml").as_path()); - assert!(manifest.contains("ksp-config-lib.workspace = true")); + assert!(manifest.contains("ksp-config-lib = { path = \"../ksp-config-lib\" }")); for forbidden in ["ksp-job-backfill-lib", "ksp-onchain-transport-lib", "ksp-store-lib", "ksp-store-api", "ksp-store-postgres-lib"] { assert!(!manifest.contains(forbidden), "pre.003 opens a later-layer dependency: {forbidden}"); } diff --git a/crates/ksp-config-lib/unit_tests/fixtures/composite.ksp-app-backfill-desk.json b/crates/ksp-config-lib/unit_tests/fixtures/composite.ksp-app-backfill-desk.json index 11a2914..a9ad328 100644 --- a/crates/ksp-config-lib/unit_tests/fixtures/composite.ksp-app-backfill-desk.json +++ b/crates/ksp-config-lib/unit_tests/fixtures/composite.ksp-app-backfill-desk.json @@ -8,12 +8,12 @@ { "component_id": "logging", "file_id": "cfg.std.logging", - "profile_id": "supertrace" + "profile_id": "local_dev" }, { "component_id": "transport", "file_id": "cfg.std.transport", - "profile_id": "devnet_public" + "profile_id": "secret_test" }, { "component_id": "store", @@ -28,12 +28,12 @@ { "component_id": "logging", "file_id": "cfg.std.logging", - "profile_id": "console_info" + "profile_id": "local_dev" }, { "component_id": "transport", "file_id": "cfg.std.transport", - "profile_id": "mainnet_public" + "profile_id": "secret_test" }, { "component_id": "store", @@ -48,12 +48,12 @@ { "component_id": "logging", "file_id": "cfg.std.logging", - "profile_id": "console_info" + "profile_id": "local_dev" }, { "component_id": "transport", "file_id": "cfg.std.transport", - "profile_id": "publicnode_testnet" + "profile_id": "secret_test" }, { "component_id": "store", diff --git a/deltas/0.3.7/pre.003-fix.001.md b/deltas/0.3.7/pre.003-fix.001.md new file mode 100644 index 0000000..6707fc4 --- /dev/null +++ b/deltas/0.3.7/pre.003-fix.001.md @@ -0,0 +1,116 @@ + + + +# Delta `0.3.7-pre.003-fix.001` — correction du gate Config/composition + +## 1. Base requise + +```text +0.3.7-pre.003 +workspace.package.version = 0.3.7-pre.3 +``` + +Le gate opérateur du 2026-09-02 a validé `cargo check --workspace`, le Markdown et la majorité des suites ciblées, mais a isolé quatre défauts locaux : une violation `RUST-FMT-104`, un lint Clippy `implicit_return`, une incohérence de fixture Config Desk et un canari de manifeste Backfill Desk obsolète. + +## 2. Objectif + +Corriger uniquement ces quatre défauts de `pre.003` sans ouvrir `pre.004`, sans modifier le comportement runtime et sans changer le composite Backfill Desk de production. + +## 3. Corrections + +- remettre le bloc de constantes `ERROR_CODE_*` de `ksp-app-backfill-desk/src/errors.rs` dans l'ordre alphabétique attendu ; +- utiliser un `return` explicite dans la closure `bundle.resources` du test `desktop_contract` ; +- adapter la fixture composite Backfill aux profils réduits réellement présents dans les fixtures Config (`local_dev` pour Logging, `secret_test` pour Transport), conformément aux fixtures Desk existantes ; +- faire vérifier au canari `desktop_security` la déclaration KSP interne réelle par `path`, au lieu d'exiger à tort `workspace = true`. + +La source `config/composite.ksp-app-backfill-desk.json` reste inchangée : `devnet` continue d'utiliser `supertrace + devnet_public + devnet`. + +## 4. Version + +Le correctif modifie des fichiers Rust compilés. `VER-ID-007` et `VER-ID-010` imposent donc : + +```text +workspace.package.version = 0.3.7-pre.3.fix.1 +label = 0.3.7-pre.003-fix.001 +``` + +## 5. Fichiers ajoutés + +```text +deltas/0.3.7/pre.003-fix.001.md +``` + +## 6. Fichiers modifiés + +```text +Cargo.toml +crates/ksp-app-backfill-desk/src/errors.rs +crates/ksp-app-backfill-desk/tests/desktop_contract.rs +crates/ksp-app-backfill-desk/tests/desktop_security.rs +crates/ksp-config-lib/unit_tests/fixtures/composite.ksp-app-backfill-desk.json +docs/plans/028-V0_3_7_BACKFILL_DESK_PLAN.md +docs/validation/024-V0_3_7_BACKFILL_DESK.md +``` + +## 7. Fichiers supprimés + +Aucun. + +## 8. Invariants conservés + +- aucune modification de `config/composite.ksp-app-backfill-desk.json` ; +- `devnet` de production reste sur le profil Logging `supertrace` et le fallback Backfill Desk reste `trace` ; +- registre Config et packaging restent à 14 resources ; +- aucune dépendance `ksp-onchain-transport-lib`, `ksp-store-lib`, `ksp-store-api`, `ksp-store-postgres-lib` ou `ksp-job-backfill-lib` n'est ajoutée à Backfill Desk ; +- aucune construction `HttpTransportPool`, ouverture Store ou exécution Backfill n'est introduite ; +- capabilities Tauri et frontend inchangés. + +## 9. Gate opérateur ayant déclenché le fix + +```text +Rust rule audit FAIL — 1 x RUST-FMT-104 +Markdown table audit PASS — 270 tables / 150 files +cargo check --workspace PASS +cargo clippy --workspace --all-targets FAIL — implicit_return dans desktop_contract.rs +cargo test -p ksp-config-lib PASS +cargo test -p ksp-app-config-desk FAIL — fixture composite / profil Logging absent +cargo test -p ksp-app-wallet-desk PASS +cargo test -p ksp-app-solprices-desk PASS +cargo test -p ksp-app-backfill-desk FAIL — canari de manifeste obsolète +``` + +## 10. Validations exécutées dans l'environnement d'assemblage + +```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/0.3.7 +``` + +Des contrôles ciblés vérifient également la cohérence des profils référencés par la fixture Backfill et l'absence de modification du composite de production. + +## 11. Validations non exécutées dans l'environnement d'assemblage + +`cargo` et `rustfmt` ne sont pas disponibles dans cet environnement. Le gate opérateur du fix reste à rejouer : + +```text +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/0.3.7 +cargo check --workspace +cargo clippy --workspace --all-targets +cargo test -p ksp-config-lib +cargo test -p ksp-app-config-desk +cargo test -p ksp-app-wallet-desk +cargo test -p ksp-app-solprices-desk +cargo test -p ksp-app-backfill-desk +cargo tree -p ksp-app-backfill-desk --edges normal +cargo tree -p ksp-app-backfill-desk -e features +``` + +## 12. Décisions + +Les quatre défauts ont été introduits ou révélés par la composition Config de `pre.003`. Ils restent donc dans `pre.003-fix.001` conformément à `VER-ID-006` et `VER-LIFECYCLE-009`. `pre.004` reste bloquée jusqu'à un gate opérateur propre du correctif. + +## 13. Questions ouvertes + +Aucune. diff --git a/docs/plans/028-V0_3_7_BACKFILL_DESK_PLAN.md b/docs/plans/028-V0_3_7_BACKFILL_DESK_PLAN.md index 53a1246..81b7f8d 100644 --- a/docs/plans/028-V0_3_7_BACKFILL_DESK_PLAN.md +++ b/docs/plans/028-V0_3_7_BACKFILL_DESK_PLAN.md @@ -1,5 +1,5 @@ - + # Plan v0.3.7 — Backfill Desk @@ -237,6 +237,8 @@ Créer package lib+bin, shell/splash/tracing/capability, frontend minimal, ports Ajouter le composite Backfill Desk et l'enregistrer dans Config, mettre à jour atomiquement les quatre bundles Desk vers les 14 resources du registre, puis brancher le bootstrap Config/Logging et ses canaries sans encore ouvrir Transport/Store réel. Pendant le développement de l'application, `devnet` sélectionne le profil Logging `supertrace` et le fallback local Backfill Desk reste au niveau `trace`; ce choix est local au Desk et devra être resserré avant publication stable. +Le gate opérateur de `pre.003` ouvre `pre.003-fix.001` pour quatre corrections strictement locales : ordre `RUST-FMT-104` d'un bloc de constantes, `return` explicite dans un canari Clippy, réconciliation de la fixture composite Backfill avec les profils réellement disponibles dans le corpus de fixtures Config, et correction d'un canari de dépendance qui doit reconnaître la syntaxe `path` utilisée par les crates KSP internes. Le composite de production, son profil `supertrace` et les frontières runtime de `pre.003` restent inchangés. + ### pre.004 — Transport readiness Construire `HttpTransportPool`, dériver réseau/role inventory sûr, vérifier support des deux RPC et produire options DTO sans provider/URL. diff --git a/docs/validation/024-V0_3_7_BACKFILL_DESK.md b/docs/validation/024-V0_3_7_BACKFILL_DESK.md index 7cd2d6a..fb8153b 100644 --- a/docs/validation/024-V0_3_7_BACKFILL_DESK.md +++ b/docs/validation/024-V0_3_7_BACKFILL_DESK.md @@ -1,5 +1,5 @@ - + # Validation v0.3.7 — Backfill Desk @@ -164,4 +164,37 @@ La découverte du contrat réel de `prepare_packaged_runtime()` a réconcilié l - [X] audit Rust workspace propre, zéro candidat d'export ; - [X] audit Markdown propre : 270 tableaux / 150 fichiers ; - [X] parsing JSON/TOML, validation JSON Schema et audit structurel Config/package propres ; -- [ ] `cargo fmt/check/clippy/test` pre.003 : à exécuter par l'opérateur, `cargo`/`rustfmt` absents du sandbox. +- [X] gate opérateur `pre.003` exécuté le 2026-09-02 : **FIX REQUIRED** ; `cargo check --workspace` passe, mais l'audit Rust, Clippy, Config Desk et un canari Backfill Desk isolent quatre défauts locaux détaillés ci-dessous. +## 11. Correctif `pre.003-fix.001` + +Le gate opérateur de `pre.003` a isolé quatre défauts qui appartiennent tous au couloir Config/composition de `pre.003` : + +- `RUST-FMT-104` dans `src/errors.rs` : `ERROR_CODE_CONFIG_COMPOSITE_INVALID` précédait les constantes `ERROR_CODE_APP_STATE_*` ; le bloc est remis dans l'ordre alphabétique sans changer aucune valeur ; +- Clippy `implicit_return` dans `tests/desktop_contract.rs` : la closure qui lit `bundle.resources` utilise désormais un `return` explicite, conformément aux lints workspace ; +- la fixture `composite.ksp-app-backfill-desk.json` reprenait les profils de production (`supertrace`, `devnet_public`, `mainnet_public`, `publicnode_testnet`) alors que les fixtures réduites Logging/Transport n'exposent que `local_dev` et `secret_test` pour ces besoins ; comme les fixtures Wallet/SOL Prices existantes, la fixture Backfill utilise donc les profils disponibles du corpus de test, sans modifier le composite de production ; +- `tests/desktop_security.rs` attendait littéralement `ksp-config-lib.workspace = true`, alors que les Desk KSP déclarent leurs dépendances internes par chemin local ; le canari vérifie désormais la forme réelle `ksp-config-lib = { path = "../ksp-config-lib" }` et conserve les interdictions des couches Transport/Store/Backfill. + +Le correctif ne modifie ni le profil `supertrace` de production, ni les 14 resources packagées, ni le bootstrap runtime, ni les capabilities Tauri, ni les dépendances fonctionnelles de Backfill Desk. + +La version Cargo devient `0.3.7-pre.3.fix.1` conformément à `VER-ID-007` et `VER-ID-010`, car le correctif touche des fichiers Rust compilés. + +### Gate opérateur ayant déclenché le fix + +```text +cargo fmt --all exécuté +python3 scripts/audit_rust_workspace_rules.py FAIL — 1 x RUST-FMT-104 +python3 scripts/audit_markdown_tables.py ... deltas/0.3.7 PASS +cargo check --workspace PASS +cargo clippy --workspace --all-targets FAIL — implicit_return dans desktop_contract.rs +cargo test -p ksp-config-lib PASS — 128 tests unitaires + suites associées +cargo test -p ksp-app-config-desk FAIL — fixture Backfill / profil supertrace absent +cargo test -p ksp-app-wallet-desk PASS +cargo test -p ksp-app-solprices-desk PASS +cargo test -p ksp-app-backfill-desk FAIL — canari Cargo.toml obsolète +``` + +### Gate du fix + +- [X] audits statiques Rust/Markdown rejoués dans l'environnement d'assemblage ; +- [ ] `cargo fmt --all`, `cargo check --workspace`, Clippy et suites Cargo à rejouer par l'opérateur ; `cargo`/`rustfmt` restent absents du sandbox. +