Files
2026-08-16 06:18:16 +02:00

7.5 KiB

Delta 0.1.3-pre.014

Base requise

Livraison précédente validée :

0.1.3-pre.013-fix.001

Version technique de cette base :

workspace.package.version = "0.1.3-pre.13.fix.1"
Cargo.toml header version = 58

Validations utilisateur exécutées le 2026-08-16 :

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 :

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 :

ksp-core-lib    -X-> ksp-config-lib
ksp-logging-lib -X-> ksp-config-lib

La direction autorisée reste :

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 :

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 :

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

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 :

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 :

ConfigBootstrapOptions / ConfigFileRegistry
ConfigDocumentEngine
ConfigEnvironment
ConfigManagement
ResolvedLoggingConfig adapter
ksp-logging-lib runtime ownership

Règles durables

Ajout de :

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 :

crates/ksp-config-lib/tests/ownership.rs

Quatre tests d'intégration workspace :

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

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

crates/ksp-config-lib/tests/ownership.rs
deltas/0.1.3/pre.014.md

Fichiers modifiés

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

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.