v0.3.2-pre.003

This commit is contained in:
2026-08-29 17:43:52 +02:00
parent ced653bfc0
commit a8c90107b5
13 changed files with 1193 additions and 47 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/023-V0_3_2_STORE_POSTGRES_FOUNDATION_PLAN.md -->
<!-- version: 3 -->
<!-- version: 4 -->
# Plan `0.3.2` — Store/PostgreSQL runtime foundation
@@ -366,7 +366,26 @@ migration_lock_ms défaut 10_000 plage 100..120_000
Il n'existe pas de `Default` qui invente une URI de production. Config et les callers programmatiques doivent construire explicitement le backend settings.
### 8.3 URI et secrets
### 8.3 Surface exacte matérialisée en `pre.003`
Les noms publics sont figés comme suit :
```text
StoreBackendKind::Postgres
StoreBackendSettings::Postgres(PostgresStoreSettings)
PostgresTlsMode::{Disabled, VerifyFull}
PostgresPoolSettings
PostgresBootstrapSettings
PostgresStoreSettings
StoreSettings
Store
```
`PostgresPoolSettings::default()` et `PostgresBootstrapSettings::default()` portent exactement les bornes décidées par le gate `pre.001`. `StoreSettings::with_default_shutdown(...)` fournit uniquement la borne commune de shutdown à 5 s. Il n'existe toujours aucun `Default` pour `PostgresStoreSettings` ou `StoreSettings`, afin de ne jamais inventer une URI ou un backend de production.
Les validations `pre.003` restent backend-neutral et sans parsing PostgreSQL : URI non vide, pool 1..64, timeouts pool/connect 100..60 000 ms, migration 1 000..300 000 ms, lock 100..120 000 ms et shutdown 100..30 000 ms. Le parsing/normalisation de l'URI et les options réellement honorées restent propriétaires de `pre.005`.
### 8.4 URI et secrets
La connexion URI est considérée sensible intégralement, même lorsqu'elle ne contient pas de mot de passe visible.
@@ -421,16 +440,16 @@ La fermeture consomme le Store, ferme le pool, interdit de nouvelles acquisition
Cette forme limite structurellement le risque de close concurrent avec une opération qui emprunte encore le Store.
### 9.3 Erreurs stables candidates
### 9.3 Erreurs stables matérialisées
Domaine Store commun :
Domaine Store commun, figé en `pre.003` :
```text
STORE_SETTINGS_INVALID
STORE_BACKEND_NOT_COMPILED
STORE_BACKEND_OPEN_FAILED
STORE_BACKEND_CLOSED
STORE_SHUTDOWN_TIMEOUT
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
```
Backend PostgreSQL :
@@ -899,6 +918,23 @@ Les deux crates possèdent déjà leur `src/constants.rs` et leur `TRACING_TARGE
Matérialiser `StoreSettings`, `StoreBackendSettings`, `PostgresStoreSettings`, erreurs stable, façade `Store` sans connexion lourde et réexports API. Tester la feature mismatch.
**Statut : matérialisé par `0.3.2-pre.003`, gate opérateur requis.**
La tranche fixe :
```text
73 exports crate-root de ksp-store-lib : 60 reexports ksp-store-api + 13 éléments runtime Store
settings Config-independent sans serde/env
URI PostgreSQL intégralement redacted et sans getter public
pool/bootstrap/shutdown bornés selon pre.001
Store::open(settings).await
Store::close(self).await
postgres absent de la build -> store.backend_not_compiled avant I/O
postgres compilé avant pre.005 -> store.backend_open_failed/runtime_foundation_pending avant I/O
```
Le dernier comportement est volontairement transitoire : `pre.003` ne retourne jamais un faux `Store` prêt. `pre.005` remplacera uniquement ce stop de staging par la construction physique, puis `pre.007` fermera le shutdown/health end-to-end. Aucun type PostgreSQL physique n'est public.
### `pre.004` — Config `std.store`
Document/schema/example/registry/adaptor, `.env.example`, provenance/sensitivity/redaction, packaging resources strictement nécessaires. Aucun env dans Store/backend.
@@ -993,8 +1029,6 @@ Aucune question architecturale ne bloque `pre.002`.
Les détails suivants sont réservés à leur tranche sans rouvrir les décisions du gate :
```text
nom exact des structs/methods settings en pre.003
codes numériques/strings finaux des ErrorCode en pre.003
mapping exact deadpool timeouts en pre.005
construction exacte du rustls RootCertStore en pre.005
DDL précis de ksp_store_schema_migrations en pre.006