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