215 lines
6.2 KiB
Markdown
215 lines
6.2 KiB
Markdown
# Delta `0.3.2-pre.003` — Store settings, backend selection et lifecycle contract
|
|
|
|
## 1. Base requise
|
|
|
|
Base exacte :
|
|
|
|
```text
|
|
0.3.2-pre.002-fix.001
|
|
workspace.package.version = 0.3.2-pre.2.fix.1
|
|
```
|
|
|
|
Le gate opérateur fourni le 29 août 2026 est entièrement vert et sans warning :
|
|
|
|
```text
|
|
cargo fmt --all PASS
|
|
audit Rust général / exports / workspace PASS
|
|
audit Markdown PASS — 186 tables / 126 files
|
|
cargo check --workspace PASS
|
|
cargo clippy --workspace --all-targets PASS
|
|
cargo test -p ksp-store-lib PASS
|
|
cargo test -p ksp-store-postgres-lib PASS
|
|
cargo check -p ksp-store-lib --no-default-features PASS
|
|
```
|
|
|
|
Le correctif `pre.002-fix.001` est déjà commité. `pre.003` ne réécrit pas ce delta. Le crate-root `ksp-store-lib` étant réellement modifié dans cette tranche, son ancrage `TRACING_TARGET` adopte désormais la forme canonique `const _: &str = crate::TRACING_TARGET;`. `crates/ksp-store-lib/src/constants.rs` n'est pas modifié et conserve donc son header/version existant.
|
|
|
|
## 2. Objectif
|
|
|
|
Matérialiser uniquement le contrat runtime backend-neutral prévu par le plan 023 :
|
|
|
|
```text
|
|
StoreBackendKind
|
|
StoreBackendSettings
|
|
PostgresStoreSettings
|
|
PostgresPoolSettings
|
|
PostgresBootstrapSettings
|
|
PostgresTlsMode
|
|
StoreSettings
|
|
Store::open(settings).await
|
|
Store::close(self).await
|
|
codes d'erreur Store stables
|
|
réexports ksp-store-api depuis la façade
|
|
```
|
|
|
|
Aucune connexion, pool physique, TLS connector, migration, Config `std.store` ou SQL n'est introduit.
|
|
|
|
## 3. Settings et bornes
|
|
|
|
`PostgresStoreSettings` possède une URI explicitement fournie par le caller. Il n'existe aucun `Default` qui invente une URI ou un backend.
|
|
|
|
La chaîne URI :
|
|
|
|
```text
|
|
est possédée par le settings
|
|
est intégralement redacted dans Debug
|
|
n'a aucun getter public
|
|
n'entre dans aucun ErrorContext
|
|
n'est pas parsée avant pre.005
|
|
```
|
|
|
|
Les settings typés matérialisent les bornes décidées en `pre.001` :
|
|
|
|
```text
|
|
max_connections défaut 8 plage 1..64
|
|
connect_timeout_ms défaut 10_000 plage 100..60_000
|
|
pool_wait_timeout_ms défaut 5_000 plage 100..60_000
|
|
pool_create_timeout_ms défaut 10_000 plage 100..60_000
|
|
pool_recycle_timeout_ms défaut 5_000 plage 100..60_000
|
|
shutdown_timeout_ms défaut 5_000 plage 100..30_000
|
|
auto_migrate défaut true
|
|
migration_timeout_ms défaut 30_000 plage 1_000..300_000
|
|
migration_lock_ms défaut 10_000 plage 100..120_000
|
|
```
|
|
|
|
Ces bornes restent des garde-fous de ressources/lifecycle et non une policy worker/job.
|
|
|
|
## 4. Backend selection et lifecycle
|
|
|
|
Backend connu :
|
|
|
|
```text
|
|
StoreBackendKind::Postgres
|
|
```
|
|
|
|
Le dispatch `Store::open` valide d'abord tous les settings puis :
|
|
|
|
```text
|
|
feature postgres absente -> store.backend_not_compiled avant I/O
|
|
feature postgres présente -> store.backend_open_failed / runtime_foundation_pending avant I/O
|
|
```
|
|
|
|
Le second résultat est volontairement transitoire : `pre.003` ne fabrique jamais un faux `Store` prêt avant la connexion réelle de `pre.005`. La signature finale `Store::close(self).await` est fixée maintenant, mais aucune ressource physique n'existe encore à fermer.
|
|
|
|
## 5. Erreurs Store communes
|
|
|
|
Codes crate-root :
|
|
|
|
```text
|
|
ERROR_CODE_BACKEND_CLOSED -> store.backend_closed
|
|
ERROR_CODE_BACKEND_NOT_COMPILED -> store.backend_not_compiled
|
|
ERROR_CODE_BACKEND_OPEN_FAILED -> store.backend_open_failed
|
|
ERROR_CODE_SETTINGS_INVALID -> store.settings_invalid
|
|
ERROR_CODE_SHUTDOWN_TIMEOUT -> store.shutdown_timeout
|
|
```
|
|
|
|
Aucune erreur externe ou chaîne distante n'est attachée à cette tranche.
|
|
|
|
## 6. Réexports API
|
|
|
|
`ksp-store-lib` réexporte explicitement les 60 éléments crate-root de `ksp-store-api` nécessaires à la consommation de la façade.
|
|
|
|
La façade compte donc à cette tranche :
|
|
|
|
```text
|
|
60 reexports ksp-store-api
|
|
13 éléments runtime Store propres
|
|
73 exports crate-root au total
|
|
```
|
|
|
|
Aucun type, handle ou symbole de `ksp-store-postgres-lib` n'est réexporté.
|
|
|
|
## 7. Fichiers
|
|
|
|
Modifiés :
|
|
|
|
```text
|
|
Cargo.toml
|
|
crates/ksp-store-lib/src/lib.rs
|
|
crates/ksp-store-lib/tests/dependency_boundary.rs
|
|
docs/plans/023-V0_3_2_STORE_POSTGRES_FOUNDATION_PLAN.md
|
|
docs/validation/019-V0_3_2_STORE_POSTGRES_FOUNDATION.md
|
|
```
|
|
|
|
Ajoutés :
|
|
|
|
```text
|
|
crates/ksp-store-lib/src/error.rs
|
|
crates/ksp-store-lib/src/settings.rs
|
|
crates/ksp-store-lib/src/store.rs
|
|
crates/ksp-store-lib/unit_tests/settings.rs
|
|
crates/ksp-store-lib/unit_tests/store.rs
|
|
crates/ksp-store-lib/tests/feature_mismatch.rs
|
|
crates/ksp-store-lib/tests/public_api.rs
|
|
deltas/0.3.2/pre.003.md
|
|
```
|
|
|
|
Non modifiés intentionnellement :
|
|
|
|
```text
|
|
crates/ksp-store-lib/src/constants.rs
|
|
crates/ksp-store-postgres-lib/**
|
|
ksp-store-api/**
|
|
config/**
|
|
CHANGELOG.md
|
|
ROADMAP.md
|
|
```
|
|
|
|
## 8. Version
|
|
|
|
La tranche touche le runtime/API Rust ; la version workspace devient :
|
|
|
|
```text
|
|
0.3.2-pre.3
|
|
```
|
|
|
|
Identifiant de livraison :
|
|
|
|
```text
|
|
0.3.2-pre.003
|
|
```
|
|
|
|
## 9. Validations exécutées pendant la préparation
|
|
|
|
```text
|
|
python3 scripts/audit_rust_workspace_rules.py PASS
|
|
```
|
|
|
|
Les validations Cargo ne sont pas disponibles dans l'environnement de génération et ne sont jamais déclarées PASS.
|
|
|
|
## 10. 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-store-api
|
|
cargo test -p ksp-store-lib
|
|
cargo test -p ksp-store-lib --no-default-features
|
|
cargo test -p ksp-store-postgres-lib
|
|
cargo check -p ksp-store-lib --no-default-features
|
|
cargo tree -p ksp-store-lib --edges normal
|
|
cargo tree -p ksp-store-lib -e features
|
|
cargo tree -p ksp-store-postgres-lib --edges normal
|
|
```
|
|
|
|
## 11. Hors scope et suite
|
|
|
|
Toujours absents :
|
|
|
|
```text
|
|
Config std.store
|
|
tokio-postgres
|
|
Deadpool
|
|
Rustls
|
|
connexion PostgreSQL
|
|
migrations/bootstrap physique
|
|
health/readiness physique
|
|
RawTransaction PostgreSQL
|
|
RawAccountState PostgreSQL
|
|
```
|
|
|
|
Si le gate est vert, `0.3.2-pre.004` ouvre exclusivement Config `std.store`, son schema/example/registry/adaptor et les impacts de packaging strictement requis.
|