v0.3.2-pre.005
This commit is contained in:
135
deltas/0.3.2/pre.005.md
Normal file
135
deltas/0.3.2/pre.005.md
Normal file
@@ -0,0 +1,135 @@
|
||||
<!-- file: deltas/0.3.2/pre.005.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta `0.3.2-pre.005` — PostgreSQL connection + pool + TLS
|
||||
|
||||
## 1. Base
|
||||
|
||||
Base exacte : `0.3.2-pre.004-fix.001`, incluant l'ajustement opérateur de `.env.example` version `13`.
|
||||
|
||||
Le gate opérateur du 29 août 2026 est entièrement vert : audits Rust/Markdown, workspace check/Clippy, 126 tests Config, ownership, Store avec et sans feature PostgreSQL, compilation `--no-default-features` et Config Desk passent.
|
||||
|
||||
## 2. Objet
|
||||
|
||||
Matérialiser la première ouverture PostgreSQL physique sans ouvrir encore les migrations ou le SQL métier :
|
||||
|
||||
```text
|
||||
tokio-postgres 0.7.18+
|
||||
deadpool-postgres 0.14.x
|
||||
tokio-postgres-rustls 0.14.x
|
||||
rustls 0.23.x / AWS-LC
|
||||
roots système
|
||||
pool borné
|
||||
Store::open physique
|
||||
Store::close borné
|
||||
```
|
||||
|
||||
## 3. Frontière façade/backend
|
||||
|
||||
`ksp-store-lib` reste l'unique surface consumer et ne dépend directement d'aucun driver/pool/TLS. Il convertit ses settings vers un bridge `ksp-store-postgres-lib`, puis mappe les erreurs backend vers des `ErrorCode` Store stables.
|
||||
|
||||
`ksp-store-postgres-lib` possède seul :
|
||||
|
||||
```text
|
||||
parse/normalisation tokio_postgres::Config
|
||||
Deadpool Manager/Pool
|
||||
connector Rustls
|
||||
roots système
|
||||
première acquisition physique
|
||||
fermeture/drain physique
|
||||
```
|
||||
|
||||
Les types physiques `Pool`, `Client`, `Row` et `Statement` ne sont jamais réexportés par la façade.
|
||||
|
||||
## 4. Normalisation de l'URI
|
||||
|
||||
Le backend consomme uniquement l'URI déjà résolue par Config. Après parsing, KSP impose :
|
||||
|
||||
```text
|
||||
application_name = ksp-store
|
||||
connect_timeout = settings typés
|
||||
sslnegotiation = postgres
|
||||
Disabled -> sslmode=disable
|
||||
VerifyFull -> sslmode=require
|
||||
```
|
||||
|
||||
`options=` est rejeté dans cette fondation. `VerifyFull` exige un host TCP afin de disposer d'une identité serveur à vérifier : `hostaddr` seul et les sockets Unix sont rejetés. Les erreurs de parsing ne conservent jamais le texte de l'URI.
|
||||
|
||||
## 5. Pool et lifecycle
|
||||
|
||||
Le pool applique les limites validées en `pre.003` : taille maximale et deadlines `wait/create/recycle`. Le manager utilise `RecyclingMethod::Verified`; la requête de vérification éventuelle reste interne à Deadpool et aucun SQL KSP n'est ajouté.
|
||||
|
||||
La création du pool est lazy, donc `Store::open` exécute explicitement une première `pool.get().await`. Le succès signifie ainsi qu'une connexion physique/auth/TLS a réellement été établie.
|
||||
|
||||
`Store::close(self)` appelle `Pool::close()` puis attend un drain `size == 0` sous `shutdown_timeout`. `Drop` ne fait qu'un close best-effort.
|
||||
|
||||
## 6. TLS
|
||||
|
||||
Modes exacts :
|
||||
|
||||
```text
|
||||
Disabled
|
||||
VerifyFull
|
||||
```
|
||||
|
||||
`VerifyFull` charge les roots système dans `rustls::RootCertStore`, utilise explicitement le provider AWS-LC et conserve la vérification standard de certificat + identité serveur. Aucun mode `Prefer`, aucun verifier permissif et aucun fallback plaintext ne sont introduits.
|
||||
|
||||
## 7. Erreurs sûres
|
||||
|
||||
Le backend retourne uniquement une classification et une phase statique :
|
||||
|
||||
```text
|
||||
ConfigInvalid
|
||||
ConnectFailed
|
||||
PoolTimeout
|
||||
ShutdownTimeout
|
||||
TlsFailed
|
||||
```
|
||||
|
||||
La façade mappe vers :
|
||||
|
||||
```text
|
||||
store.postgres_config_invalid
|
||||
store.postgres_connect_failed
|
||||
store.postgres_pool_timeout
|
||||
store.postgres_tls_failed
|
||||
store.shutdown_timeout
|
||||
```
|
||||
|
||||
Aucune erreur `tokio-postgres`, Deadpool, Rustls ou native-certs n'est attachée comme source publique.
|
||||
|
||||
## 8. Hors scope
|
||||
|
||||
```text
|
||||
migrations/bootstrap SQL
|
||||
ksp_store_schema_migrations
|
||||
health snapshot public
|
||||
RAW transaction/account persistence
|
||||
routing multi-target/multi-réseau dans Store
|
||||
live PostgreSQL integration test
|
||||
```
|
||||
|
||||
Ces éléments restent respectivement aux tranches `pre.006`, `pre.007`, `0.3.3/0.3.4` et `pre.008`.
|
||||
|
||||
## 9. Version
|
||||
|
||||
```text
|
||||
workspace.package.version = 0.3.2-pre.5
|
||||
```
|
||||
|
||||
## 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-postgres-lib
|
||||
cargo test -p ksp-store-lib
|
||||
cargo test -p ksp-store-lib --no-default-features
|
||||
cargo check -p ksp-store-lib --no-default-features
|
||||
cargo tree -p ksp-store-postgres-lib --edges normal
|
||||
cargo tree -p ksp-store-lib --edges normal
|
||||
cargo tree --duplicates
|
||||
```
|
||||
Reference in New Issue
Block a user