# Delta 0.1.4-pre.002 — inventaire public du registre Config ## Base requise ```text 0.1.4-pre.001-fix.003 workspace.package.version = "0.1.4-pre.1" ``` Le plan `docs/plans/006-V0_1_4_CONFIG_DESKTOP_PLAN.md` est considéré comme validé dans sa révision issue de `pre.001-fix.003`. ## Objectif Traiter la première lacune `ksp-config-lib` identifiée par `pre.001` avant la construction du shell desktop : permettre à un consumer de management d'inventorier les fichiers enregistrés dans `ConfigFileRegistry` sans maintenir une liste parallèle de `file_id` et sans obtenir de capacité de mutation supplémentaire. Cette tranche reste volontairement limitée à l'inventaire public du registre. La soumission/réparation d'un source candidat invalide reste réservée à `pre.003`. ## Version Cargo Conformément à `VER-ID-009`, `workspace.package.version` passe de : ```text 0.1.4-pre.1 ``` à : ```text 0.1.4-pre.2 ``` L'identifiant de livraison est : ```text 0.1.4-pre.002 ``` ## 1. API publique du registre `ConfigFileRegistry` expose désormais : ```rust pub fn descriptors(&self) -> impl std::iter::Iterator + '_ ``` Le contrat est volontairement read-only : - aucun descripteur n'est copié dans une seconde structure propriétaire ; - aucune mutation du registre n'est exposée ; - l'itération reflète les éventuels overrides de filename déjà appliqués ; - `file_id`, `kind` et association de schema restent ceux du descripteur enregistré ; - l'ordre est déterministe et correspond à l'ordre logique des `ConfigFileId` porté par le `BTreeMap` interne. Avec le registre par défaut actuel, l'ordre est : ```text cfg.std.logging schema.composite schema.std.logging ``` L'API ne crée pas de DTO applicatif. `ksp-app-config-desk` pourra convertir ces descripteurs vers ses propres DTO Tauri dans sa frontière applicative. ## 2. Tests unitaires `unit_tests/registry.rs` couvre maintenant explicitement : - l'inventaire complet du registre par défaut ; - l'ordre déterministe par `file_id` ; - le `ConfigFileKind` de chaque famille ; - l'association `cfg.std.logging -> schema.std.logging` ; - la conservation de ces métadonnées après un override de filename ; - la visibilité du filename effectivement overridé depuis l'inventaire. Les tests existants de lookup, résolution de path, validation des mappings, doublons et associations de schema restent inchangés dans leur responsabilité. ## 3. Test de surface publique `tests/public_api.rs` vérifie que le consumer externe peut appeler `ConfigFileRegistry::descriptors()` depuis la racine de crate et exploiter les `ConfigFileDescriptor` publics sans accès à une API interne. Le test couvre l'ordre et les métadonnées nécessaires au futur panneau Documents de Config Desk. ## 4. Documentation Config `README.md` précise maintenant que le registre possède un inventaire public read-only ordonné par `file_id`. `USAGE.md` ajoute un exemple version-neutral montrant comment parcourir : - `file_id` ; - `kind` ; - filename courant ; - schema associé éventuel. `TODO.md` distingue désormais les deux lacunes révélées par `0.1.4` : - inventaire public du registre : **traité par `pre.002`** ; - réparation/persistence d'un source candidat par `file_id` connu : **reste à traiter dans `pre.003`**. ## 5. Ownership et extensibilité Cette tranche conserve les frontières décidées : ```text ConfigFileRegistry -> possède les descripteurs connus -> expose leur inventaire read-only ksp-app-config-desk -> consommera l'inventaire -> construira ses DTO applicatifs -> ne maintiendra pas de liste parallèle de file_id ``` L'ajout futur d'un nouveau descripteur au registre le rendra donc automatiquement découvrable par le shell de management, indépendamment de la présence ou non d'un éditeur spécialisé pour ce `file_id`. ## Hors scope confirmé Cette tranche n'ajoute pas : - `ksp-app-config-desk` ; - Tauri ou dépendance frontend ; - DTO TS-RS ; - API de modification arbitraire du registre ; - API de réparation/persistence de source candidat ; - nouveau document Config ou nouveau schema ; - variable `.env` ; - modification du runtime Logging. ## Fichiers ajoutés ```text deltas/0.1.4/pre.002.md ``` ## Fichiers modifiés | Fichier | Version précédente | Nouvelle version | |------------------------------------------------|-------------------:|-----------------:| | `Cargo.toml` | 62 | 63 | | `crates/ksp-config-lib/src/registry.rs` | 3 | 4 | | `crates/ksp-config-lib/unit_tests/registry.rs` | 3 | 4 | | `crates/ksp-config-lib/tests/public_api.rs` | 10 | 11 | | `crates/ksp-config-lib/README.md` | 1 | 2 | | `crates/ksp-config-lib/USAGE.md` | 2 | 3 | | `crates/ksp-config-lib/TODO.md` | 1 | 2 | ## Fichiers supprimés Aucun. ## Validations exécutées Dans l'environnement de préparation disponible : - contrôle statique du diff borné à l'inventaire du registre ; - vérification de `workspace.package.version = "0.1.4-pre.2"` ; - vérification des headers `file:` / `version:` des fichiers modifiés ; - vérification de l'absence de `?`, `unwrap`, `expect`, `panic` et `unsafe` dans le nouveau code Rust ; - vérification des lignes Rust modifiées vis-à-vis de la limite KSP de 160 colonnes ; - vérification de la documentation publique de `ConfigFileRegistry::descriptors()` ; - vérification que les tests couvrent ordre, kind, schema et override ; - vérification syntaxique TOML du `Cargo.toml` avec le parseur disponible ; - contrôle des fences Markdown et des espaces de fin de ligne dans les fichiers livrés. ## Validations non exécutées Le sandbox de préparation ne fournit pas les binaires Rust/Cargo. Les validations obligatoires suivantes ne peuvent donc pas être exécutées ici : ```text cargo fmt --all cargo check --workspace cargo clippy --workspace --all-targets cargo test -p ksp-config-lib cargo tree -p ksp-config-lib ``` Elles doivent être exécutées sur le workspace de développement après application du delta et avant validation/commit de `pre.002`. `cargo test --workspace` n'est pas requis pour cette tranche ciblée selon le plan de `0.1.4`; il reste réservé aux frontières globales justifiées et à la clôture de la release. ## Décisions prises - l'inventaire reste une vue du registre existant, pas une collection dupliquée ; - l'ordre public est déterministe par `file_id` ; - les overrides restent visibles sans altérer l'identité logique et les associations de schema ; - aucun DTO Config spécifique au desktop n'entre dans `ksp-config-lib` ; - `pre.003` reste la tranche dédiée à la réparation validée/persistée d'un source candidat. ## Questions ouvertes Aucune question bloquante pour `pre.002`.