From 8609d335a35eb2f9bd976c779bd9e7fa5e53a8f3 Mon Sep 17 00:00:00 2001 From: SinuS Von SifriduS Date: Sun, 16 Aug 2026 15:18:02 +0200 Subject: [PATCH] v0.1.4-pre.011-fix.001 --- Cargo.toml | 4 +- crates/ksp-config-lib/tests/ownership.rs | 31 ++++++++++++- deltas/0.1.4/pre.011-fix.001.md | 57 ++++++++++++++++++++++++ 3 files changed, 89 insertions(+), 3 deletions(-) create mode 100644 deltas/0.1.4/pre.011-fix.001.md diff --git a/Cargo.toml b/Cargo.toml index 51cd69d..910a0b0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,12 +1,12 @@ # file: Cargo.toml -# version: 78 +# version: 79 [workspace] resolver = "3" members = ["crates/ksp-app-config-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-logging-lib"] [workspace.package] -version = "0.1.4-pre.11" +version = "0.1.4-pre.11.fix.1" edition = "2024" license = "MIT" repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project" diff --git a/crates/ksp-config-lib/tests/ownership.rs b/crates/ksp-config-lib/tests/ownership.rs index 11aef0b..6e82149 100644 --- a/crates/ksp-config-lib/tests/ownership.rs +++ b/crates/ksp-config-lib/tests/ownership.rs @@ -1,5 +1,5 @@ // file: crates/ksp-config-lib/tests/ownership.rs -// version: 1 +// version: 2 //! Workspace ownership audits for KSP application configuration boundaries. @@ -94,6 +94,7 @@ fn collect_environment_names(source: &str, names: &mut std::collections::BTreeSe if let std::result::Result::Ok(candidate) = candidate && candidate.len() > prefix_length && !candidate.ends_with('_') + && !is_environment_namespace_label(candidate) { names.insert(candidate.to_owned()); } @@ -101,6 +102,10 @@ fn collect_environment_names(source: &str, names: &mut std::collections::BTreeSe } } +fn is_environment_namespace_label(candidate: &str) -> bool { + return matches!(candidate, "KSP_PUBLIC" | "KSP_SECRET" | "KSPB_PUBLIC" | "KSPB_SECRET"); +} + fn dotenv_example_assignments(source: &str) -> std::collections::BTreeMap { let mut assignments = std::collections::BTreeMap::::new(); for (line_index, line) in source.lines().enumerate() { @@ -241,6 +246,30 @@ fn workspace_crates_do_not_hardcode_config_managed_physical_files() { } } +#[test] +fn environment_name_scanner_ignores_namespace_labels_but_keeps_concrete_names() { + let source = r#" + const KSP_PUBLIC_LABEL: &str = "KSP_PUBLIC"; + const KSP_SECRET_LABEL: &str = "KSP_SECRET"; + const KSPB_PUBLIC_LABEL: &str = "KSPB_PUBLIC"; + const KSPB_SECRET_LABEL: &str = "KSPB_SECRET"; + const KSP_PUBLIC_RPC_URL: &str = "KSP_PUBLIC_RPC_URL"; + const KSP_SECRET_API_KEY: &str = "KSP_SECRET_API_KEY"; + const KSPB_PUBLIC_ENDPOINT: &str = "KSPB_PUBLIC_ENDPOINT"; + const KSPB_SECRET_TOKEN: &str = "KSPB_SECRET_TOKEN"; + "#; + let mut names = std::collections::BTreeSet::::new(); + collect_environment_names(source, &mut names); + assert!(!names.contains("KSP_PUBLIC")); + assert!(!names.contains("KSP_SECRET")); + assert!(!names.contains("KSPB_PUBLIC")); + assert!(!names.contains("KSPB_SECRET")); + assert!(names.contains("KSP_PUBLIC_RPC_URL")); + assert!(names.contains("KSP_SECRET_API_KEY")); + assert!(names.contains("KSPB_PUBLIC_ENDPOINT")); + assert!(names.contains("KSPB_SECRET_TOKEN")); +} + #[test] fn dotenv_example_covers_runtime_environment_names_with_comments() { let root = workspace_root(); diff --git a/deltas/0.1.4/pre.011-fix.001.md b/deltas/0.1.4/pre.011-fix.001.md new file mode 100644 index 0000000..2ec4469 --- /dev/null +++ b/deltas/0.1.4/pre.011-fix.001.md @@ -0,0 +1,57 @@ + + + +# Delta `0.1.4-pre.011-fix.001` — audit `.env.example` et labels de namespace + +## Statut + +Correctif de `0.1.4-pre.011` après validation locale. + +## Défaut observé + +`cargo test -p ksp-config-lib` échouait dans l'audit d'ownership : + +```text +.env.example is missing runtime variable KSPB_PUBLIC +``` + +`KSPB_PUBLIC` n'est pourtant pas une variable runtime concrète. C'est un label de famille utilisé par Config Desk pour classifier les noms `KSPB_PUBLIC_*` dans la vue Environnement. + +Le scanner de l'audit interprétait à tort les quatre labels suivants comme des variables concrètes : + +- `KSP_PUBLIC` ; +- `KSP_SECRET` ; +- `KSPB_PUBLIC` ; +- `KSPB_SECRET`. + +Ajouter artificiellement ces labels à `.env.example` aurait dégradé son contrat en documentant de fausses variables. + +## Correction + +- le scanner `collect_environment_names()` ignore uniquement les quatre labels de namespace non concrets ; +- les noms possédant un suffixe réel restent détectés, par exemple : + - `KSP_PUBLIC_RPC_URL` ; + - `KSP_SECRET_API_KEY` ; + - `KSPB_PUBLIC_ENDPOINT` ; + - `KSPB_SECRET_TOKEN` ; +- ajout d'un test de non-régression qui vérifie simultanément l'exclusion des labels et la conservation des noms concrets ; +- `.env.example` reste inchangé : aucune fausse variable n'est ajoutée. + +## Version technique + +```text +workspace.package.version = "0.1.4-pre.11.fix.1" +``` + +## Validation locale demandée + +```bash +cargo fmt --all +cargo check --workspace +cargo clippy --workspace --all-targets +cargo test -p ksp-app-config-desk +cargo test -p ksp-config-lib +cargo tauri dev -c crates/ksp-app-config-desk/tauri.conf.json +``` + +Après correction, `tests/ownership.rs` doit contenir cinq tests et `dotenv_example_covers_runtime_environment_names_with_comments` doit repasser au vert.