v0.3.2-pre.008

This commit is contained in:
2026-08-29 21:54:00 +02:00
parent e39cf656b2
commit 80eea82398
5 changed files with 618 additions and 33 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/023-V0_3_2_STORE_POSTGRES_FOUNDATION_PLAN.md -->
<!-- version: 9 -->
<!-- version: 10 -->
# Plan `0.3.2` — Store/PostgreSQL runtime foundation
@@ -863,7 +863,7 @@ Mesures : conversion immédiate vers code KSP + contexte allowlisté ; source er
## 16. PostgreSQL integration test réel
Le test opt-in sera dans `ksp-store-postgres-lib/tests/` et ignoré par défaut.
Le test opt-in est matérialisé par `ksp-store-postgres-lib/tests/postgres_foundation_live.rs` et reste ignoré par défaut.
Entrée :
@@ -891,13 +891,15 @@ second bootstrap idempotent
deux bootstrap concurrents après reset contrôlé
corruption test-only du checksum sentinel -> mismatch explicite
restore/reset contrôlé
migration failure injectée sous cfg(test) -> rollback/history inchangée
échec SQL contrôlé dans une transaction de test exécutant le V000 exact -> drop implicite de `tokio-postgres::Transaction` -> rollback DDL/history prouvé
health ready
close explicite borné
cleanup metadata
```
Le gate de référence visera PostgreSQL 18.6. Le test peut accepter un serveur >= 15, mais le rapport opérateur doit enregistrer le major réellement utilisé sans imprimer d'identité sensible.
Le gate de référence visera PostgreSQL 18.6. Le test accepte un serveur >= 15, n'imprime que le major et refuse tout serveur plus ancien. La connexion d'administration du test et le backend live utilisent `Disabled` afin que ce gate porte sur la fondation PostgreSQL/migrations ; la policy TLS `VerifyFull` reste prouvée séparément par les canaris déterministes de `pre.005`. Le test ne lit aucune variable d'environnement.
La preuve de rollback n'ajoute aucun hook public ou feature de test à la crate de production : le test réutilise par `include_str!` le V000 committed exact, ouvre une transaction PostgreSQL, exécute le DDL et un sentinel transitoire, injecte ensuite une erreur SQL contrôlée puis droppe la transaction. `tokio-postgres 0.7.18` garantit le rollback implicite d'une `Transaction` droppée ; le test vérifie ensuite physiquement l'absence de la table metadata avant de relancer le bootstrap KSP normal.
## 17. Validation de dépendances et API
@@ -1018,7 +1020,7 @@ Avec les quatre codes PostgreSQL ajoutés en `pre.005` puis les trois codes migr
### `pre.007` — Composition end-to-end + health
Statut : matérialisé par `0.3.2-pre.007`, gate Cargo opérateur requis.
Statut : matérialisé par `0.3.2-pre.007`, gate Cargo opérateur `PASS` le 2026-08-29.
La façade ferme la projection runtime/health sans exposer de type physique :
@@ -1036,7 +1038,28 @@ Avec `StoreHealthState`, `StoreRuntimeSnapshot`, `StoreHealthSnapshot` et `ERROR
### `pre.008` — PostgreSQL integration réelle
Ajouter/exécuter le smoke opt-in non destructif : initial/idempotent/concurrent/mismatch/failure/close sur serveur réel.
Statut : test opt-in matérialisé par `0.3.2-pre.008`; compilation/gates déterministes puis exécution PostgreSQL réelle opérateur requises.
Le scénario `postgres_foundation_live` :
```text
lit une URI dédiée uniquement depuis stdin
refuse si ksp_store_schema_migrations existe avant le test
refuse PostgreSQL < 15 et n'imprime que le major
bootstrap initial + health Ready + close borné
réouverture idempotente + health Ready
reset contrôlé de la metadata possédée par le test
deux bootstrap concurrents sérialisés par advisory lock
corruption checksum sentinel -> MigrationMismatch
restauration checksum -> recovery Ready
reset contrôlé
transaction test avec V000 exact + sentinel transitoire + erreur injectée
Drop Transaction -> rollback implicite -> metadata absente
re-bootstrap normal + health Ready + close borné
cleanup uniquement de la metadata prouvée créée par le test
```
Aucun hook test-only n'est ajouté au runtime de production et aucune table RAW métier n'est créée.
### `pre.009` — Hardening/completeness/dependency matrix
@@ -1109,12 +1132,7 @@ Store Desk
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
DDL précis de ksp_store_schema_migrations en pre.006
forme finale des snapshots health en pre.007
```
Les décisions foundation encore ouvertes après `pre.008` sont uniquement des preuves de hardening/completeness et de clôture ; le DDL metadata, le health/readiness et la stratégie du test PostgreSQL réel sont désormais matérialisés.
Toute découverte qui exigerait :