v0.3.2-pre.003
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/validation/019-V0_3_2_STORE_POSTGRES_FOUNDATION.md -->
|
||||
<!-- version: 3 -->
|
||||
<!-- version: 4 -->
|
||||
|
||||
# Validation `0.3.2` — Store/PostgreSQL runtime foundation
|
||||
|
||||
@@ -70,6 +70,8 @@ Le gate opérateur après application de `pre.001`, fourni le 29 août 2026, est
|
||||
|
||||
Le gate opérateur de `pre.002`, fourni le 29 août 2026, confirme également les tests ciblés, `--no-default-features` et les `cargo tree`. `cargo check`/Clippy terminent avec succès mais signalent deux warnings par nouvelle crate (`TRACING_TARGET` importé mais inutilisé et constant `dead_code`) ; `pre.002-fix.001` traite cet écart par un canari compile-time privé, tout en conservant les invariants KSP-TRACE-102/103 et sans ajouter de logging runtime.
|
||||
|
||||
Le gate opérateur de `pre.002-fix.001`, fourni le 29 août 2026, est entièrement vert et sans warning : audits Rust/Markdown, workspace check/Clippy, tests des deux crates et compilation `ksp-store-lib --no-default-features` passent. Cette base est l'entrée effective de `pre.003`.
|
||||
|
||||
## 3. Frontières Cargo
|
||||
|
||||
### V32-DEP-001 — Façade -> API
|
||||
@@ -150,13 +152,17 @@ Statut : `TODO gate final`, baseline `v0.3.1` déjà verte.
|
||||
|
||||
Critère : `StoreSettings` est constructible sans `ksp-config-lib`, sans env et sans serde requis par la façade.
|
||||
|
||||
Statut : `TODO pre.003`.
|
||||
Matérialisé par `pre.003` : `StoreSettings`, `StoreBackendSettings`, `PostgresStoreSettings`, pool/bootstrap/TLS typés, sans dépendance Config/serde/env.
|
||||
|
||||
Statut : `TODO gate opérateur pre.003`.
|
||||
|
||||
### V32-API-002 — Backend connu non compilé
|
||||
|
||||
Critère : `Postgres` reste un backend connu sans feature et `Store::open` échoue avant I/O avec un code stable.
|
||||
|
||||
Statut : `TODO pre.003`.
|
||||
Matérialisé par `pre.003` : le test `feature_mismatch` appelle réellement `Store::open` sous `--no-default-features` et exige `store.backend_not_compiled`.
|
||||
|
||||
Statut : `TODO gate opérateur pre.003 / TODO pre.009 final`.
|
||||
|
||||
### V32-API-003 — Aucun type backend physique public
|
||||
|
||||
@@ -175,7 +181,9 @@ Statut : `TODO pre.009`.
|
||||
|
||||
Critère : un consumer de `ksp-store-lib` accède aux contrats Store API utiles sans dépendre directement de la crate backend.
|
||||
|
||||
Statut : `TODO pre.003`.
|
||||
`pre.003` réexporte explicitement les 60 symboles crate-root acquis de `ksp-store-api` depuis `ksp-store-lib`, sans glob et sans réexport backend.
|
||||
|
||||
Statut : `TODO gate opérateur pre.003 / TODO pre.009 exact exports`.
|
||||
|
||||
### V32-API-005 — Lifecycle
|
||||
|
||||
@@ -189,7 +197,9 @@ close borné
|
||||
Drop best-effort seulement
|
||||
```
|
||||
|
||||
Statut : `TODO pre.003/pre.007`.
|
||||
`pre.003` fixe les signatures `Store::open(settings).await` et `Store::close(self).await` et garde `Store` opaque/non constructible par un consumer. Aucun succès d'ouverture n'est simulé avant la connexion réelle : le backend compilé s'arrête avec `store.backend_open_failed` et le contexte sûr `runtime_foundation_pending`.
|
||||
|
||||
Statut : `TODO gate opérateur pre.003` pour les signatures et le staging ; `TODO pre.007` pour le shutdown physique borné.
|
||||
|
||||
## 5. Config ownership
|
||||
|
||||
@@ -485,11 +495,15 @@ Statut : `TODO pre.009`.
|
||||
|
||||
Cas : zéro, inversion, dépassement bornes pour pool/connect/migration/close.
|
||||
|
||||
Statut : `TODO pre.003/pre.005/pre.009`.
|
||||
Les bornes backend-neutral décidées en `pre.001` sont matérialisées et couvertes par tests unitaires en `pre.003`. Le parsing PostgreSQL et les timeouts physiques restent à `pre.005`.
|
||||
|
||||
Statut : `TODO gate opérateur pre.003 / TODO pre.005 / TODO pre.009`.
|
||||
|
||||
### V32-SEC-004 — Feature mismatch avant I/O
|
||||
|
||||
Statut : `TODO pre.003/pre.009`.
|
||||
`pre.003` matérialise un canari d'intégration compilé avec et sans `postgres`. Sans feature, `Store::open` retourne le code stable `store.backend_not_compiled` avant tout chemin backend physique.
|
||||
|
||||
Statut : `TODO gate opérateur pre.003 / TODO pre.009`.
|
||||
|
||||
### V32-SEC-005 — Server error sanitization
|
||||
|
||||
@@ -514,6 +528,7 @@ Après création des crates :
|
||||
```bash
|
||||
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 test -p ksp-config-lib
|
||||
cargo check -p ksp-store-lib --no-default-features
|
||||
|
||||
Reference in New Issue
Block a user