v0.3.2-pre.007

This commit is contained in:
2026-08-29 21:40:57 +02:00
parent c4f56d9e85
commit e39cf656b2
19 changed files with 849 additions and 53 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/019-V0_3_2_STORE_POSTGRES_FOUNDATION.md -->
<!-- version: 8 -->
<!-- version: 9 -->
# Validation `0.3.2` — Store/PostgreSQL runtime foundation
@@ -207,7 +207,7 @@ Drop best-effort seulement
`pre.003` fixe les signatures `Store::open(settings).await` et `Store::close(self).await`. `pre.005` remplace le stop de staging PostgreSQL par l'ouverture physique : un succès exige `pool.get().await` après construction du pool, puis `close(self)` ferme et draine ce pool sous la deadline configurée. Aucun pool/client n'est exposé par la façade.
Statut : `PASS pre.003-fix.001 opérateur` pour les signatures / `PASS pre.005-fix.001 opérateur` pour l'ouverture et le shutdown physiques / `TODO pre.007` pour la composition health.
Statut : `PASS pre.003-fix.001 opérateur` pour les signatures / `PASS pre.005-fix.001 opérateur` pour l'ouverture et le shutdown physiques / `TODO gate opérateur pre.007` pour la composition health.
## 5. Config ownership
@@ -331,7 +331,7 @@ aucune tâche volontairement laissée orpheline
`pre.005` matérialise déjà `Pool::close()` et un drain borné par `shutdown_timeout`; `Drop` ne fait qu'un `close()` best-effort. La preuve end-to-end avec backend réel reste réservée à `pre.007/pre.008`.
Statut : `PASS pre.005-fix.001 opérateur / TODO pre.007/pre.008`.
Statut : `PASS pre.005-fix.001 opérateur / TODO gate pre.007 / TODO pre.008 live`.
## 7. TLS
@@ -384,7 +384,7 @@ et aucune table métier RAW/CORE/DECODE/SPECIALIZED.
`pre.006` embarque exactement `migrations/V000__bootstrap.sql`, dont le seul DDL de production crée `ksp_store_schema_migrations`. Le canari source interdit les identifiants métier RAW/CORE/DECODE/SPECIALIZED dans le moteur et la ressource SQL.
Statut : `TODO gate opérateur pre.006 / TODO pre.008 live`.
Statut : `PASS pre.006 opérateur / TODO pre.008 live`.
### V32-MIG-002 — Version/checksum
@@ -400,7 +400,7 @@ mismatch historique terminal
`pre.006` calcule explicitement SHA-256 sur les octets exacts du SQL embarqué puis encode les 32 octets en 64 caractères hex minuscules. Le sentinel `(0, bootstrap, checksum)` est inséré dans la même transaction que la création metadata. Les tests unitaires figent le checksum du SQL committed et couvrent sentinel valide, missing, nom/checksum divergents et historique plus récent.
Statut : `TODO gate opérateur pre.006 / TODO pre.008 live`.
Statut : `PASS pre.006 opérateur / TODO pre.008 live`.
### V32-MIG-003 — Concurrence
@@ -408,7 +408,7 @@ Critère : deux runners concurrents sont sérialisés par advisory transaction l
`pre.006` utilise une clé KSP fixe et `pg_try_advisory_xact_lock($1)` dans une boucle bornée par `migration_lock_timeout`, avec polling de 25 ms maximum. Aucun lock bloquant illimité n'est utilisé.
Statut : `TODO gate opérateur pre.006 / TODO pre.008 concurrence réelle`.
Statut : `PASS pre.006 opérateur / TODO pre.008 concurrence réelle`.
### V32-MIG-004 — Atomicité/recovery
@@ -416,7 +416,7 @@ Critère : échec d'une migration du run courant rollback DDL + history de ce ru
`pre.006` place lock, metadata DDL, sentinel et validation dans une transaction unique ; toute sortie d'erreur avant `commit()` droppe la transaction et PostgreSQL rollback le run courant. Un timeout externe borne également l'ensemble du bootstrap. L'injection d'échec et la preuve physique du rollback restent au smoke réel.
Statut : `TODO gate opérateur pre.006 / TODO pre.008 rollback réel`.
Statut : `PASS pre.006 opérateur / TODO pre.008 rollback réel`.
### V32-MIG-005 — Newer runtime guard
@@ -424,7 +424,7 @@ Critère : migration appliquée inconnue/supérieure à la liste embarquée prod
`pre.006` connaît uniquement la version `0`; toute history `> 0` est classée `SchemaNewer` par le backend puis `store.postgres_schema_newer` par la façade. Aucun chemin de down migration n'existe.
Statut : `TODO gate opérateur pre.006`.
Statut : `PASS pre.006 opérateur`.
### V32-MIG-006 — SQL injection
@@ -438,7 +438,7 @@ aucun identifier physique user-configurable en 0.3.2
`pre.006` garde le DDL versionné sous `include_str!` et toutes les values variables des requêtes de contrôle (`lock key`, `statement_timeout`, history values) passent par paramètres. Les noms physiques sont des constantes KSP, jamais des settings.
Statut : `TODO gate opérateur pre.006 / TODO pre.009 hardening`.
Statut : `PASS pre.006 opérateur / TODO pre.009 hardening`.
### V32-MIG-007 — No business capability
@@ -456,21 +456,27 @@ Statut : `TODO pre.009/gate final`.
### V32-HEALTH-001 — Projection portable
Critère : façade expose uniquement état/backend/counts/migration safe, jamais URI/SQL/pool/client.
Critère : façade expose uniquement état/backend/network/counts/migration safe, jamais URI/SQL/pool/client.
Statut : `TODO pre.007`.
`pre.007` matérialise `StoreRuntimeSnapshot`, `StoreHealthState::{Ready, NotReady}` et `StoreHealthSnapshot`. Les compteurs pool sont bornés en `u32`; la version migration est optionnelle si le probe ne peut pas la lire.
Statut : `TODO gate opérateur pre.007`.
### V32-HEALTH-002 — Readiness réelle
Critère : `Store::open` ne retourne Ready qu'après connect + bootstrap/verify selon settings.
Critère : `Store::open` ne retourne Ready qu'après connect + bootstrap/verify selon settings, et `Store::health()` sonde ensuite la disponibilité physique sous deadline.
Statut : `TODO pre.007/pre.008`.
`pre.007` conserve l'ouverture stricte acquise en `pre.006` et ajoute un probe borné par le `wait_timeout` du pool : acquisition, `SELECT 1`, lecture de version migration. Le smoke réel reste nécessaire pour prouver ce chemin contre PostgreSQL.
Statut : `TODO gate opérateur pre.007 / TODO pre.008 live`.
### V32-HEALTH-003 — Error redaction
Critère : un health failure n'expose pas server error string, query text ou credential.
Statut : `TODO pre.007/pre.009`.
Le backend ne conserve que `PostgresBackendErrorKind`; la façade mappe vers un `ErrorCode` KSP optionnel. Le snapshot public ne contient aucune string serveur, URI, SQL, host, user, database ou handle.
Statut : `TODO gate opérateur pre.007 / TODO pre.009 hardening`.
## 10. PostgreSQL integration réelle