v0.3.4-pre.009

This commit is contained in:
2026-08-30 23:39:43 +02:00
parent b756da5149
commit 13687ec2fe
7 changed files with 1555 additions and 19 deletions

View File

@@ -1,11 +1,11 @@
<!-- file: docs/validation/021-V0_3_4_STORE_POSTGRES_RAW_ACCOUNT.md -->
<!-- version: 13 -->
<!-- version: 14 -->
# Validation `0.3.4` — Store/PostgreSQL `RawAccountState` + complétude RAW
## 1. Portée
Cette matrice est ouverte par `0.3.4-pre.001`. `0.3.4-pre.002` matérialise la fondation V002 minimale et `pre.002-fix.001` corrige deux canaris sans modifier le SQL ; son gate opérateur complet est PASS. `0.3.4-pre.003` complète les contraintes de domaine, l'index de navigation, la compatibilité externe et le checksum V002 final ; `pre.003-fix.001` corrige uniquement l'ordre alphabétique du bloc `const` et son gate opérateur complet est PASS. `pre.004` à `pre.007` matérialisent successivement mapping/read, writes, observation supplémentaire et pagination account ; `pre.007-fix.001` clôt son gate opérateur en PASS. `pre.008` ouvre les quatre capabilities account dans `PostgresBackend` et `Store`, portant l'inventaire RAW statique à 10/10 ; son gate initial échoue uniquement sur un canari `dependency_boundary` mal réconcilié et `pre.008-fix.001` corrige ce déplacement de variable sans toucher à la verticale. La preuve PostgreSQL live reste réservée à `pre.009`.
Cette matrice est ouverte par `0.3.4-pre.001`. `0.3.4-pre.002` matérialise la fondation V002 minimale et `pre.002-fix.001` corrige deux canaris sans modifier le SQL ; son gate opérateur complet est PASS. `0.3.4-pre.003` complète les contraintes de domaine, l'index de navigation, la compatibilité externe et le checksum V002 final ; `pre.003-fix.001` corrige uniquement l'ordre alphabétique du bloc `const` et son gate opérateur complet est PASS. `pre.004` à `pre.007` matérialisent successivement mapping/read, writes, observation supplémentaire et pagination account ; `pre.007-fix.001` clôt son gate opérateur en PASS. `pre.008` ouvre les quatre capabilities account dans `PostgresBackend` et `Store`, portant l'inventaire RAW statique à 10/10 ; `pre.008-fix.001` corrige son unique canari mal réconcilié et son gate opérateur complet est PASS. `pre.009` matérialise la preuve PostgreSQL live account, la concurrence/cancellation réelle et la coexistence RawTransaction sans modifier les migrations.
Base :
@@ -278,8 +278,8 @@ Le test live account devra être opt-in/ignored, URI stdin, sans environnement n
| pre.005 | acquisition atomique state+observation + idempotence/conflict | PASS |
| pre.006 | observation supplémentaire + races/cancellation unitaires | PASS |
| pre.007 | list RawAccountStateQuery + keyset cursor V1 account | PASS |
| pre.008 | 4 impl backend + 4 dispatch Store + conformance 10/10 | CURRENT |
| pre.009 | preuve PostgreSQL live account + coexistence RawTransaction | PLANNED |
| pre.008 | 4 impl backend + 4 dispatch Store + conformance 10/10 | PASS |
| pre.009 | preuve PostgreSQL live account + coexistence RawTransaction | CURRENT |
| pre.010 | hardening/completeness cross-family + canaries ownership | PLANNED |
| pre.011 | gate technique final + replay live ciblé + graphes | PLANNED |
| pre.012 | réconciliation docs finale sans rouvrir le code | PLANNED |
@@ -599,4 +599,63 @@ let runtime = include_str!("../src/runtime.rs");
vers le canari qui le consomme effectivement. Les assertions de placement 10/10 restent inchangées : les implémentations account demeurent uniques dans `runtime.rs`, absentes de `raw_account.rs`, et les couches migration/schema restent sans capability métier. Aucun fichier de production, SQL runtime ou migration V000/V001/V002 n'est modifié.
Le checksum V002 reste `ff21605ed45f7ab4c0f92bbb692700b4118a9488b04d50a31d259ac59bdb550e`. Le gate opérateur complet doit être rejoué sur `0.3.4-pre.8.fix.1`.
Le checksum V002 reste `ff21605ed45f7ab4c0f92bbb692700b4118a9488b04d50a31d259ac59bdb550e`. Le gate opérateur complet du 2026-08-30 sur `0.3.4-pre.8.fix.1` est **PASS** : audits Rust/Markdown, workspace check, Clippy all-targets, Store API, Store façade, backend PostgreSQL (63 tests unitaires + 13 dependency + 7 hardening + 13 public), Config et `--no-default-features` sont verts.
## 28. Verdict `pre.009`
Preuve PostgreSQL live `RawAccountState` : **matérialisée ; gate opérateur standard et exécution live opt-in à rejouer**.
Nouveau test :
```text
crates/ksp-store-postgres-lib/tests/postgres_raw_account_live.rs
#[ignore = "opt-in real PostgreSQL RawAccountState proof; reads one dedicated URI from stdin"]
```
Invariants d'exploitation :
```text
URI dédiée lue depuis stdin uniquement
aucune lecture d'environnement
aucun affichage de l'URI
refus si une table KSP managée existe déjà
PostgreSQL >= 15
cleanup uniquement après preuve d'absence initiale
reopen health migration_version = 2
```
Matrice matérialisée :
| Scénario | Preuve `pre.009` |
|--------------------------------------------|--------------------------------------|
| bootstrap/reopen V002 | oui |
| schema_autoupdate index account | oui |
| slot/lamports/rent_epoch/write_version u64 | oui, `u64::MAX` |
| data account vide | oui |
| data account 16 MiB exact | oui |
| acquisition insert/idempotence | oui |
| même référence / contenu divergent | `Conflict` |
| même pubkey+slot / hashes distincts | oui |
| collision observation + rollback state | oui |
| observation supplémentaire identique | `AlreadyPresent` |
| observation supplémentaire divergente | `Conflict` |
| référence state absente | `ReferenceNotFound` |
| metadata Yellowstone | round-trip exact |
| pagination ASC/DESC | oui |
| filtre pubkey | oui |
| cursor cross-query / digest hostile | `QueryInvalid` |
| cursor cross-family `KSPT` | `QueryInvalid` |
| concurrence identique | Inserted + AlreadyPresent |
| concurrence divergente | Inserted + Conflict |
| cancellation réelle | `JoinHandle::abort()` + state absent |
| coexistence RawTransaction | oui |
| cleanup isolation | oui |
Le test `postgres_raw_transaction_live.rs` est ajusté uniquement sur son inventaire de schéma managé : il probe et supprime désormais aussi `ksp_raw_account_states` et `ksp_raw_account_observations`, nécessaires depuis V002. Aucun scénario métier RawTransaction n'est modifié.
Les migrations V000/V001/V002 restent byte-inchangées ; le checksum V002 reste :
```text
ff21605ed45f7ab4c0f92bbb692700b4118a9488b04d50a31d259ac59bdb550e
```