6.2 KiB
Delta 0.3.2-pre.003 — Store settings, backend selection et lifecycle contract
1. Base requise
Base exacte :
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 :
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 :
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 :
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 :
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 :
StoreBackendKind::Postgres
Le dispatch Store::open valide d'abord tous les settings puis :
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 :
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 :
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 :
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 :
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 :
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 :
0.3.2-pre.3
Identifiant de livraison :
0.3.2-pre.003
9. Validations exécutées pendant la préparation
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
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 :
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.