v0.1.4-pre.011-fix.001

This commit is contained in:
2026-08-16 15:18:02 +02:00
parent 00361f22f4
commit 8609d335a3
3 changed files with 89 additions and 3 deletions

View File

@@ -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"

View File

@@ -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<String, usize> {
let mut assignments = std::collections::BTreeMap::<String, usize>::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::<String>::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();

View File

@@ -0,0 +1,57 @@
<!-- file: deltas/0.1.4/pre.011-fix.001.md -->
<!-- version: 1 -->
# 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.