# Delta `0.3.2-pre.004` — Config `std.store` ## 1. Base requise Base exacte : ```text 0.3.2-pre.003-fix.001 workspace.package.version = 0.3.2-pre.3.fix.1 ``` Le gate opérateur fourni le 29 août 2026 est entièrement vert : audits Rust/Markdown, `cargo check`, Clippy, tests Store avec et sans features par défaut, backend et compilation `--no-default-features` passent. ## 2. Objet Matérialiser exclusivement la frontière Config de la fondation Store : ```text config/std.store.json config/schemas/std.store.schema.json config/examples/std.store.example.json registry cfg.std.store / schema.std.store KSP_SECRET_STORE_POSTGRES_URI adapter Config -> ksp_store_lib::StoreSettings provenance/sensitivity/redaction resources desktop strictement nécessaires ``` Aucune connexion, pool physique, TLS connector, migration ou SQL n'est ajouté. ## 3. Graphe de dépendance `ksp-config-lib` ajoute : ```text ksp-config-lib -> ksp-store-lib (default-features = false) ``` Config peut ainsi construire les types publics de settings sans forcer `postgres`. `ksp-store-lib` et `ksp-store-postgres-lib` restent interdits de dépendance vers Config. ## 4. Document V1 Le profil `postgres_default` sélectionne `backend = postgres` et fournit exactement les groupes `connection_uri`, `pool`, `tls`, `bootstrap` et `shutdown_timeout_ms` décidés en `pre.001/pre.003`. Les bornes JSON Schema reflètent les bornes runtime Store ; la validation runtime reste l'autorité finale. Le `connection_uri` committed utilise : ```text ${KSP_SECRET_STORE_POSTGRES_URI:-postgresql://localhost/ksp} ``` Le fallback reste classé `Secret`, donc la safe projection et `Debug` ne rendent jamais l'URI. L'adapter rejette aussi un URI literal ou provenant d'un namespace non secret, même si le JSON Schema l'accepte syntaxiquement. ## 5. Adapter `ResolvedStoreConfig` possède la Config effective et un `StoreSettings`. Il expose un emprunt sûr et `into_settings(self)` pour transférer les settings au runtime. Aucun getter de l'URI n'est ajouté. Mapping : ```text postgres -> StoreBackendSettings::Postgres disabled -> PostgresTlsMode::Disabled verify_full -> PostgresTlsMode::VerifyFull ms -> Duration ``` Les erreurs du contrat Store sont projetées par domaine/code seulement, sans recopier de message ou de contexte arbitraire. ## 6. Packaging `prepare_packaged_runtime` parcourt tout le registry Config. Les trois applications desktop qui utilisent cette préparation doivent donc embarquer les deux nouvelles resources runtime/schema. Leur inventaire passe de 11 à 13 resources. Aucun écran Store n'est ajouté. ## 7. Réconciliation du plan Le prompt de démarrage et les conventions Config utilisent `std.store.schema.json` / `std.store.example.json`. Deux mentions `store.schema.json` / `store.example.json` du plan `pre.001` étaient incohérentes ; elles sont corrigées au moment de la matérialisation, sans changement de contrat. ## 8. Version ```text workspace.package.version = 0.3.2-pre.4 ``` ## 9. Gate opérateur requis ```bash cargo fmt --all python3 scripts/audit_rust_workspace_rules.py python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas/0.3.2 cargo check --workspace cargo clippy --workspace --all-targets cargo test -p ksp-config-lib cargo test -p ksp-store-lib cargo test -p ksp-store-lib --no-default-features cargo check -p ksp-store-lib --no-default-features cargo test -p ksp-app-config-desk cargo test -p ksp-app-solprices-desk cargo test -p ksp-app-wallet-desk cargo tree -p ksp-config-lib --edges normal cargo tree -p ksp-store-lib -e features ``` Les builds Tauri sont recommandés dans cette tranche car les resources packagées ont réellement changé. ## 10. Suite Si le gate est vert, `pre.005` ouvre la connexion PostgreSQL réelle, Deadpool et Rustls.