246 lines
7.5 KiB
Markdown
246 lines
7.5 KiB
Markdown
<!-- file: deltas/0.1.3/pre.014.md -->
|
|
<!-- version: 1 -->
|
|
|
|
# Delta 0.1.3-pre.014
|
|
|
|
## Base requise
|
|
|
|
Livraison précédente validée :
|
|
|
|
```text
|
|
0.1.3-pre.013-fix.001
|
|
```
|
|
|
|
Version technique de cette base :
|
|
|
|
```text
|
|
workspace.package.version = "0.1.3-pre.13.fix.1"
|
|
Cargo.toml header version = 58
|
|
```
|
|
|
|
Validations utilisateur exécutées le 2026-08-16 :
|
|
|
|
```text
|
|
cargo fmt --all OK
|
|
cargo check --workspace OK
|
|
cargo clippy --workspace --all-targets OK
|
|
cargo test --workspace OK
|
|
cargo tree -p ksp-config-lib OK
|
|
cargo tree -p ksp-config-lib -d OK, doublon transitif syn 2/3 déjà connu
|
|
cargo tree -p ksp-config-lib -e features OK
|
|
cargo tree -p ksp-logging-lib OK
|
|
```
|
|
|
|
`cargo test --workspace` confirme notamment 80 tests unitaires + 11 tests publics pour `ksp-config-lib`, 34 tests unitaires Logging et toutes les intégrations existantes vertes.
|
|
|
|
## Objet de pre.014
|
|
|
|
Transformer les principales frontières d'ownership Config en audits exécutables avant la clôture :
|
|
|
|
```text
|
|
workspace source/manifests/config
|
|
-> ownership audit
|
|
-> fail cargo test on boundary regression
|
|
|
|
config JSON + production Rust
|
|
-> concrete KSP/KSPB environment names
|
|
-> .env.example inventory coverage
|
|
```
|
|
|
|
Cette tranche ne crée aucun nouveau runtime Config et ne modifie aucune API métier.
|
|
|
|
## Audit de direction des dépendances fondatrices
|
|
|
|
Le nouveau test d'intégration vérifie explicitement que :
|
|
|
|
```text
|
|
ksp-core-lib -X-> ksp-config-lib
|
|
ksp-logging-lib -X-> ksp-config-lib
|
|
```
|
|
|
|
La direction autorisée reste :
|
|
|
|
```text
|
|
ksp-config-lib -> ksp-core-lib
|
|
ksp-config-lib -> ksp-logging-lib
|
|
```
|
|
|
|
L'audit est volontairement limité aux deux fondations qui ne doivent jamais dépendre de Config. Les futures applications/crates pourront, elles, dépendre normalement de `ksp-config-lib`.
|
|
|
|
## Audit des lectures d'environnement KSP/KSPB
|
|
|
|
Pour toutes les crates autres que `ksp-config-lib`, l'audit recherche les bypass directs simples de la frontière Config :
|
|
|
|
```text
|
|
std::env::var("KSP_...")
|
|
std::env::var("KSPB_...")
|
|
std::env::var_os("KSP_...")
|
|
std::env::var_os("KSPB_...")
|
|
env::var(...)
|
|
env::var_os(...)
|
|
std::env::vars()
|
|
std::env::vars_os()
|
|
```
|
|
|
|
L'audit ne prétend pas interdire toute utilisation possible de `std::env` pour des informations système non applicatives. Il verrouille spécifiquement la frontière des variables KSP/KSPB et l'énumération globale qui permettrait de la contourner.
|
|
|
|
## Audit des noms physiques gérés
|
|
|
|
Les crates hors Config ne doivent pas coder en dur les ressources physiques déjà possédées par Config :
|
|
|
|
```text
|
|
.env
|
|
std.logging.json
|
|
std.logging.schema.json
|
|
composite.schema.json
|
|
```
|
|
|
|
Un consumer doit utiliser les contrats publics, constantes et `file_id` Config plutôt que recréer localement la connaissance du layout physique.
|
|
|
|
L'audit ignore les lignes de commentaire Rust afin qu'une documentation locale ne soit pas confondue avec un accès runtime.
|
|
|
|
## Inventaire `.env.example`
|
|
|
|
Le test collecte automatiquement les noms KSP/KSPB concrets trouvés dans :
|
|
|
|
```text
|
|
config/**/*.json
|
|
crates/*/src/**/*.rs
|
|
```
|
|
|
|
Les préfixes génériques tels que `KSP_SECRET_` ou `KSPB_PUBLIC_` ne sont pas considérés comme des variables concrètes.
|
|
|
|
Chaque variable runtime concrète détectée doit apparaître dans `.env.example` sous forme d'assignment active ou commentée et cette assignment doit être précédée d'un commentaire explicatif distinct des headers de fichier/version.
|
|
|
|
Dans l'état actuel, l'inventaire concret reste :
|
|
|
|
```text
|
|
KSP_LOGS_DIRECTORY
|
|
```
|
|
|
|
Aucune nouvelle variable runtime n'est introduite par `pre.014`.
|
|
|
|
## Réaudit de robustesse existante
|
|
|
|
Les tests déjà acquis avant `pre.014` couvrent notamment :
|
|
|
|
- JSON malformed, schema invalid et document schema-invalide ;
|
|
- invariants sémantiques Logging ;
|
|
- profils dupliqués/default_profile invalide/profil explicite absent ;
|
|
- composite references et component ids invalides ;
|
|
- filenames/mappings `file_id` invalides ;
|
|
- `.env` syntaxiquement invalide, doublons, namespaces externes et valeurs vides ;
|
|
- placeholders malformés, variables absentes et fallbacks ;
|
|
- priorité process > `.env` > fallback ;
|
|
- sensibilité `Public/Internal/Secret`, real/safe/provenance et canaries de non-divulgation ;
|
|
- validation effective `logs_directory` et confinement des `files[].path` après interpolation ;
|
|
- rejet d'un secret dans `std.logging` ;
|
|
- management desired/effective/shadow, reveal explicite et persistence atomique ;
|
|
- candidate JSON invalide sans modification du destination ;
|
|
- permissions `.env` privées à la création Unix.
|
|
|
|
Aucune lacune nécessitant une nouvelle API publique n'a été identifiée dans cette tranche. Les responsabilités restent séparées entre :
|
|
|
|
```text
|
|
ConfigBootstrapOptions / ConfigFileRegistry
|
|
ConfigDocumentEngine
|
|
ConfigEnvironment
|
|
ConfigManagement
|
|
ResolvedLoggingConfig adapter
|
|
ksp-logging-lib runtime ownership
|
|
```
|
|
|
|
## Règles durables
|
|
|
|
Ajout de :
|
|
|
|
```text
|
|
KSP-CONFIG-017
|
|
KSP-CONFIG-018
|
|
```
|
|
|
|
pour figer :
|
|
|
|
- les audits exécutables d'ownership Config au niveau workspace ;
|
|
- la vérification automatique de la couverture `.env.example`.
|
|
|
|
## Dépendances
|
|
|
|
Aucune nouvelle dépendance Cargo.
|
|
|
|
Le seul doublon transitif attendu dans le graphe Config reste `syn 2` / `syn 3` via `jsonschema`. Aucun contournement de cette dépendance n'est introduit ici.
|
|
|
|
## Tests ajoutés
|
|
|
|
Nouveau fichier :
|
|
|
|
```text
|
|
crates/ksp-config-lib/tests/ownership.rs
|
|
```
|
|
|
|
Quatre tests d'intégration workspace :
|
|
|
|
```text
|
|
foundational_dependency_direction_does_not_point_back_to_config
|
|
workspace_crates_do_not_read_ksp_environment_directly
|
|
workspace_crates_do_not_hardcode_config_managed_physical_files
|
|
dotenv_example_covers_runtime_environment_names_with_comments
|
|
```
|
|
|
|
Les 80 tests unitaires et 11 tests de `tests/public_api.rs` restent inchangés ; `cargo test --workspace` exécute désormais en plus ce nouveau binaire d'intégration à 4 tests.
|
|
|
|
## Version technique
|
|
|
|
```text
|
|
workspace.package.version = "0.1.3-pre.14"
|
|
Cargo.toml header version = 59
|
|
```
|
|
|
|
La version change car la tranche ajoute du code Rust de test participant au build/test du workspace.
|
|
|
|
## Fichiers ajoutés
|
|
|
|
```text
|
|
crates/ksp-config-lib/tests/ownership.rs
|
|
deltas/0.1.3/pre.014.md
|
|
```
|
|
|
|
## Fichiers modifiés
|
|
|
|
```text
|
|
Cargo.toml
|
|
docs/rules/RULES_KSP.md
|
|
docs/plans/000-README.md
|
|
docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md
|
|
docs/plans/005-V0_1_3_CONFIG_FOUNDATION_PLAN.md
|
|
```
|
|
|
|
## Contrôles statiques réalisés avant livraison
|
|
|
|
Dans l'environnement de préparation :
|
|
|
|
- reconstruction de la base par application ordonnée de tous les deltas jusqu'à `pre.013-fix.001` ;
|
|
- inventaire workspace : aucune lecture directe `std::env::var*` KSP/KSPB hors Config détectée ;
|
|
- aucune référence physique gérée interdite détectée hors Config ;
|
|
- `KSP_LOGS_DIRECTORY` est la seule variable runtime concrète détectée et figure dans `.env.example` avec commentaire ;
|
|
- aucun `.env` runtime local n'est inclus dans le delta ;
|
|
- aucune nouvelle dépendance Cargo ;
|
|
- réapplication du delta sur la base reconstruite vérifiée séparément.
|
|
|
|
Aucune commande Cargo n'est déclarée réussie dans l'environnement de préparation lorsqu'elle n'y est pas disponible.
|
|
|
|
## Validation demandée
|
|
|
|
```bash
|
|
cargo fmt --all
|
|
cargo check --workspace
|
|
cargo clippy --workspace --all-targets
|
|
cargo test --workspace
|
|
cargo tree -p ksp-config-lib
|
|
cargo tree -p ksp-config-lib -d
|
|
cargo tree -p ksp-config-lib -e features
|
|
cargo tree -p ksp-logging-lib -d
|
|
```
|
|
|
|
Après validation, `0.1.3-pre.015` pourra ouvrir la clôture : validations finales, documentation durable, changelog, nettoyage/archivage et prompt `0.1.4 — ksp-app-config-desk`.
|