Files
2026-08-29 18:42:37 +02:00

109 lines
3.8 KiB
Markdown

<!-- file: deltas/0.3.2/pre.004.md -->
<!-- version: 1 -->
# 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.