0.5.1-pre.004

This commit is contained in:
2026-08-09 22:52:37 +02:00
parent 6151bb25e7
commit ec07ddbd80
53 changed files with 989 additions and 886 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/guides/CONFIGURATION.md -->
<!-- version: 3 -->
<!-- version: 4 -->
# Guide de configuration
@@ -11,32 +11,28 @@ Ce guide décrit le chargement et lutilisation de la configuration bot3. La r
- `config/example.config.json` : exemple utilisateur complet ;
- `config/schema.config.json` : contrat JSON formel ;
- `.env` et variantes locales : valeurs denvironnement non versionnées ;
- `.env`, ou le fichier sélectionné par `KS_ENV_FILE` : valeurs denvironnement non versionnées ;
- `.env.example` : noms de variables attendues sans secrets.
Le format actif est JSON. Le futur split de configuration prévu en `0.5.x` ne modifie pas le contrat actuel.
## Séquence de chargement
1. charger les fichiers denvironnement autorisés avec `load_workspace_environment` ;
2. lire le fichier JSON ;
3. résoudre les placeholders `${NAME}` ou `${NAME:-fallback}` ;
4. parser avec `load_config_from_str` ou `load_config_from_path` ;
5. valider le schéma et les invariants typés ;
6. sélectionner le profil actif avec `active_profile`.
LAPI recommandée est `read_config_json_file_with_environment`. Elle :
1. charge `.env`, ou le fichier explicitement sélectionné par `KS_ENV_FILE`, sans écraser les variables du processus ;
2. lit le JSON ;
3. résout les placeholders namespacés `${KS_*}` / `${KB_*}` et les fallbacks éventuels ;
4. valide le schéma JSON ;
5. désérialise les types de configuration et applique les invariants métier ;
6. laisse ensuite `active_profile` sélectionner le profil actif.
## Exemple opérateur
```rust
let environment = match ks_config::load_workspace_environment(
std::path::Path::new("."),
) {
std::result::Result::Ok(value) => value,
std::result::Result::Err(error) => return std::result::Result::Err(error),
};
let config = match ks_config::load_config_from_path(
let config = match ks_config::read_config_json_file_with_environment(
std::path::Path::new("config/example.config.json"),
std::path::Path::new("."),
) {
std::result::Result::Ok(value) => value,
std::result::Result::Err(error) => return std::result::Result::Err(error),
@@ -47,7 +43,6 @@ let profile = match ks_config::active_profile(&config) {
std::result::Result::Err(error) => return std::result::Result::Err(error),
};
println!("loaded environment files={}", environment.loaded_files.len());
println!("active profile={}", profile.name);
```
@@ -56,7 +51,7 @@ println!("active profile={}", profile.name);
- aucun secret ne doit être ajouté à lexemple versionné ;
- les placeholders non résolus doivent provoquer un diagnostic explicite ;
- le schéma embarqué et `config/schema.config.json` doivent rester identiques ;
- une sérialisation publique doit être précédée dune validation ;
- tant que `0.5.1-pre.006` na pas introduit les DTO publics sûrs, la configuration runtime résolue reste strictement backend et ne doit pas être exposée telle quelle ;
- les noms de profils et rôles dendpoints doivent rester cohérents avec leurs consommateurs.
## Quotas HTTP cumulés