Files
khadhroony-solana-project/deltas/0.3.2/pre.003.md
2026-08-29 17:43:52 +02:00

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.