v0.1.4-pre.011-fix.001
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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();
|
||||
|
||||
57
deltas/0.1.4/pre.011-fix.001.md
Normal file
57
deltas/0.1.4/pre.011-fix.001.md
Normal 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.
|
||||
Reference in New Issue
Block a user