Files
khadhroony-solana-project/deltas/0.1.3/pre.014.md
2026-08-16 06:18:16 +02:00

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`.