v0.1.3-pre.003

This commit is contained in:
2026-08-15 19:17:09 +02:00
parent 9207919d47
commit 0629a48e97
8 changed files with 898 additions and 11 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/005-V0_1_3_CONFIG_FOUNDATION_PLAN.md -->
<!-- version: 5 -->
<!-- version: 6 -->
# Plan `0.1.3` — Configuration foundation
@@ -1580,7 +1580,7 @@ Implémentation candidate livrée par `pre.002` :
- un path inexistant est accepté à ce stade, un path vide ou un path existant non répertoire est refusé ;
- le registre `file_id`, `--filemap`, JSON, schemas, profils et environnement restent strictement hors de `pre.002`.
La validation utilisateur de cette implémentation reste requise avant l'ouverture de `pre.003`.
Validation utilisateur acquise après `pre.002-fix.001` : `cargo fmt --all`, `cargo check --workspace`, `cargo clippy --workspace --all-targets`, `cargo test --workspace` et les trois vues `cargo tree` demandées sont propres. La seule alerte initiale `missing_docs` du test d'intégration a été corrigée par `pre.002-fix.001` puis revalidée sans warning.
### `0.1.3-pre.003` — registre logique `file_id -> filename`
@@ -1597,6 +1597,23 @@ Objectif unique : rendre les noms physiques remplaçables sans modifier l'identi
- tests du registre et des overrides ;
- aucune lecture JSON/schema encore nécessaire.
Implémentation candidate livrée par `pre.003` :
- `ConfigFileId` possède l'identité logique stable et valide une nomenclature ASCII minuscule segmentée par `.` ;
- `ConfigFileKind::{Config, Schema}` détermine exclusivement la racine physique utilisée ;
- `ConfigFileDescriptor` conserve `file_id`, kind et filename relatif ;
- `ConfigFileRegistry::defaults()` enregistre uniquement les deux fichiers actuellement connus : `cfg.std.logging -> std.logging.json` et `schema.std.logging -> std.logging.schema.json` ;
- un descriptor Config doit utiliser un `file_id` `cfg.*`, un descriptor Schema un `file_id` `schema.*` ;
- `ConfigFileRegistry::from_args(...)` possède le parsing répétable `--filemap=<file_id>=<filename>`, ignore les arguments étrangers et applique le dernier override d'un même ID ;
- un override ne peut pas créer un ID inconnu : il remplace uniquement le filename d'un descriptor possédé par Config ;
- `ConfigFileRegistry::with_filename_override(...)` fournit le même mécanisme par API programmatique ;
- les filenames doivent rester relatifs à leur root, sans composant `.` / `..`, préfixe ou racine absolue ; les sous-répertoires relatifs normaux restent autorisés ;
- `ConfigFileRegistry::resolve_path(...)` joint le filename à `cfgpath` ou `schemapath` selon le kind, sans lire le fichier ;
- l'unicité des `file_id`, les erreurs d'ID/mapping et les overrides config/schema sont couverts par tests unitaires et API publique ;
- aucune dépendance externe, lecture JSON, validation schema ou `.env` n'est introduite par cette tranche.
La validation utilisateur de `pre.003` reste requise avant l'ouverture de `pre.004`.
### `0.1.3-pre.004` — `ksp-logging-lib` : modèle public multi-output
Objectif unique : compléter les **contrats/settings publics** de Logging sans encore implémenter tout le routing runtime.