166 lines
4.5 KiB
Markdown
166 lines
4.5 KiB
Markdown
<!-- file: deltas/0.3.2/pre.007.md -->
|
|
<!-- version: 1 -->
|
|
|
|
# Delta `0.3.2-pre.007` — composition runtime et health/readiness portable
|
|
|
|
## 1. Base
|
|
|
|
Base exacte : `0.3.2-pre.006`.
|
|
|
|
Le gate opérateur du 29 août 2026 est entièrement vert : audits Rust/Markdown, workspace check/Clippy, tests `ksp-store-postgres-lib`, tests `ksp-store-lib` avec et sans feature PostgreSQL, compilation `--no-default-features` et graphes directs passent.
|
|
|
|
## 2. Objet
|
|
|
|
Fermer la composition runtime de la fondation PostgreSQL sans persistence métier :
|
|
|
|
```text
|
|
StoreSettings
|
|
-> Store::open
|
|
-> PostgresBackend
|
|
-> connexion/pool/TLS
|
|
-> bootstrap/history
|
|
-> Store prêt
|
|
|
|
Store::runtime_snapshot()
|
|
-> projection synchrone sans I/O
|
|
|
|
Store::health().await
|
|
-> readiness PostgreSQL légère et bornée
|
|
-> projection portable/redacted
|
|
```
|
|
|
|
## 3. Surface façade
|
|
|
|
`ksp-store-lib` ajoute :
|
|
|
|
```text
|
|
StoreHealthState::{Ready, NotReady}
|
|
StoreRuntimeSnapshot
|
|
StoreHealthSnapshot
|
|
Store::runtime_snapshot()
|
|
Store::health().await
|
|
store.postgres_health_failed
|
|
```
|
|
|
|
`StoreRuntimeSnapshot` expose uniquement :
|
|
|
|
```text
|
|
backend kind
|
|
network logique
|
|
pool capacity
|
|
pool size
|
|
pool available
|
|
pool waiting
|
|
```
|
|
|
|
`StoreHealthSnapshot` ajoute :
|
|
|
|
```text
|
|
state
|
|
migration version optionnelle
|
|
pending migration count
|
|
last safe ErrorCode optionnel
|
|
```
|
|
|
|
La façade atteint 84 exports crate-root : 60 réexports `ksp-store-api` et 24 éléments runtime Store.
|
|
|
|
## 4. Bridge backend
|
|
|
|
`ksp-store-postgres-lib` ajoute uniquement les projections safe nécessaires au bridge :
|
|
|
|
```text
|
|
PostgresBackendRuntimeSnapshot
|
|
PostgresBackendHealthSnapshot
|
|
```
|
|
|
|
Aucun `Pool`, `Client`, `Row`, `Statement`, URI, host, user, database, SQL ou texte serveur n'est exposé par ces snapshots.
|
|
|
|
Les compteurs Deadpool `max_size/size/available/waiting` sont saturés en `u32` avant de traverser le bridge.
|
|
|
|
## 5. Probe health
|
|
|
|
Le probe PostgreSQL reste privé au backend et exécute uniquement :
|
|
|
|
```text
|
|
acquisition Deadpool bornée
|
|
SELECT 1
|
|
lecture de MAX(version) dans la metadata privée
|
|
```
|
|
|
|
La deadline globale réutilise le `wait_timeout` configuré du pool ; un fallback interne de 5 secondes n'est utilisé que si ce timeout n'est pas présent dans le pool, état qui ne doit pas être produit par la construction KSP normale.
|
|
|
|
Classification :
|
|
|
|
```text
|
|
probe/query/decode failure -> HealthFailed
|
|
version absente/inférieure -> MigrationMismatch
|
|
version supérieure -> SchemaNewer
|
|
version attendue -> Ready
|
|
```
|
|
|
|
La vérification complète nom/checksum reste celle de `Store::open`/bootstrap. Le health est volontairement un diagnostic léger, pas un second moteur de migration.
|
|
|
|
## 6. Sémantique readiness
|
|
|
|
`Store::open` ne change pas de sémantique : une instance n'est rendue qu'après connexion physique et bootstrap/history validés.
|
|
|
|
Le health sert ensuite à observer l'état courant : une panne transitoire produit `NotReady` avec un code KSP sûr, pas une erreur contenant du texte PostgreSQL.
|
|
|
|
Une instance reste attachée à exactement un réseau/target Store ; aucun routage ou multiplexage multi-réseaux n'est ajouté.
|
|
|
|
## 7. Scope négatif
|
|
|
|
Toujours absent de `0.3.2-pre.007` :
|
|
|
|
```text
|
|
RawTransaction PostgreSQL
|
|
RawAccountState PostgreSQL
|
|
repository RAW
|
|
SQL métier
|
|
CORE/DECODE/SPECIALIZED
|
|
health HTTP/service global
|
|
scheduler/polling de health
|
|
```
|
|
|
|
## 8. Tests/canaris
|
|
|
|
Les tests sans serveur couvrent :
|
|
|
|
```text
|
|
projection pool safe/bornée
|
|
Ready vs NotReady
|
|
migration version/pending safe
|
|
absence d'URI/SQL/credential dans les snapshots
|
|
surface façade health crate-root
|
|
bridge backend health crate-root
|
|
frontières dépendances et absence de SQL métier
|
|
```
|
|
|
|
La preuve réelle `Ready`, panne/mismatch et close reste au smoke PostgreSQL opt-in de `pre.008`.
|
|
|
|
## 9. Version
|
|
|
|
```text
|
|
workspace.package.version = 0.3.2-pre.7
|
|
```
|
|
|
|
## 10. Gate opérateur
|
|
|
|
```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
|
|
```
|
|
|
|
## 11. Suite
|
|
|
|
Après gate propre, `pre.008` ajoute le test PostgreSQL réel opt-in non destructif couvrant bootstrap initial/idempotent/concurrent, mismatch, rollback/failure, health Ready et close borné.
|