3.4 KiB
3.4 KiB
Guide de configuration
Objectif
Ce guide décrit le chargement et l’utilisation de la configuration bot3. La référence d’API détaillée reste ks-config/USAGE.md.
Fichiers actifs
config/example.config.json: exemple utilisateur complet ;config/schema.config.json: contrat JSON formel ;.env, ou le fichier sélectionné parKS_ENV_FILE: valeurs d’environnement 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
L’API recommandée est read_config_json_file_with_environment. Elle :
- charge
.env, ou le fichier explicitement sélectionné parKS_ENV_FILE, sans écraser les variables du processus ; - lit le JSON ;
- résout les placeholders namespacés
${KS_*}/${KB_*}et les fallbacks éventuels ; - valide le schéma JSON ;
- désérialise les types de configuration et applique les invariants métier ;
- laisse ensuite
active_profilesélectionner le profil actif.
Exemple opérateur
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),
};
let profile = match ks_config::active_profile(&config) {
std::result::Result::Ok(value) => value,
std::result::Result::Err(error) => return std::result::Result::Err(error),
};
println!("active profile={}", profile.name);
Invariants
- aucun secret ne doit être ajouté à l’exemple versionné ;
- les placeholders non résolus doivent provoquer un diagnostic explicite ;
- le schéma embarqué et
config/schema.config.jsondoivent rester identiques ; - tant que
0.5.1-pre.006n’a 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 d’endpoints doivent rester cohérents avec leurs consommateurs.
Quotas HTTP cumulés
Les limites HTTP sont déclarées par rôle, mais les quotas d’un endpoint public s’appliquent généralement à l’endpoint ou à l’adresse IP entière. Pour un endpoint unique, il faut donc considérer au minimum :
- la somme des
requests_per_secondde tous les rôles actifs ; - la somme des bursts pouvant partir dans la même fenêtre ;
- la limite propre à une méthode RPC répétée ;
- les autres processus utilisant la même IP ou le même fournisseur.
Le profil public Devnet de l’exemple utilise 3 r/s pour http_queries et 1 r/s pour http_transactions. Un profil privé ou payant peut utiliser d’autres valeurs, mais elles doivent suivre le contrat réel du fournisseur.
Diagnostic
Pour isoler une erreur :
- afficher la liste des fichiers d’environnement chargés ;
- résoudre le JSON sans l’écrire dans les logs s’il contient des secrets ;
- valider le schéma ;
- valider le modèle typé ;
- vérifier le profil actif ;
- vérifier les rôles HTTP, WebSocket, stockage et logging.
Références
ks-config/README.md;ks-config/USAGE.md;ks-config/TODO.md;config/README.md;docs/decisions/WINCODE_COMPATIBILITY_POLICY.md.