v0.3.3-pre.007

This commit is contained in:
2026-08-30 13:37:22 +02:00
parent 10996f11f7
commit aa56a12846
13 changed files with 683 additions and 41 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/024-V0_3_3_STORE_POSTGRES_RAW_TRANSACTION_PLAN.md -->
<!-- version: 7 -->
<!-- version: 8 -->
# Plan `0.3.3` — Store/PostgreSQL RawTransaction vertical slice
@@ -31,15 +31,16 @@ Tranches techniques validées :
0.3.3-pre.003 + fix.001/fix.002/fix.003 — V001 physique, compatibilité de schéma et binding réseau
0.3.3-pre.004 — mapping et lectures RAW
0.3.3-pre.005 — écriture atomique et observations
0.3.3-pre.006 + fix.001 — pagination keyset + cursor V1
```
Tranche technique courante :
```text
0.3.3-pre.006pagination keyset + cursor V1
0.3.3-pre.007archive, purge, compare-and-transition et rejet Compacted
```
Les gates opérateur jusqu'à `pre.005` sont verts. `pre.006` complète la surface backend-specific de lecture `RawTransaction` avec `list_raw_transactions`, sans ouvrir encore la rétention mutante, les implémentations complètes des six traits ni le dispatch dans `ksp-store-lib`.
Les gates opérateur jusqu'à `pre.006-fix.001` sont verts. `pre.007` complète la surface backend-specific `RawTransaction` avec les transitions physiques `Full -> Archived -> Purged`, sans implémenter encore les six traits ni leur dispatch dans `ksp-store-lib`.
## 2. Sources et autorité
@@ -1131,12 +1132,19 @@ Tranche matérialisée :
### `0.3.3-pre.007` — archive, purge, tombstone, ForceRehydrate
- `Full -> Archived -> Purged` ;
- compare-and-transition ;
- archive relation ;
- normal skip purged ;
- force rehydrate ;
- rejet sûr et stable de `Compacted`, sans fausse compression.
Matérialisation :
- `PostgresBackend::transition_raw_transaction_retention` ajouté sans implémentation directe de trait ;
- validation réseau et rejet de toute transition impliquant `Compacted` avant `pool.get()` ;
- `SELECT ... FOR UPDATE` du canonical avant toute décision/mutation ;
- `current == target` -> `AlreadyAtTarget` après validation de la forme physique ;
- `current != expected` -> `ExpectedStateMismatch` sans mutation ;
- `Full -> Archived` -> payload exact inséré dans la relation archive, puis payload hot `NULL` et état `archived`, dans la même transaction ;
- `Archived -> Purged` -> archive supprimée, block time effacé, état `purged`, tombstone minimal conservé ;
- unknown reference -> `ReferenceNotFound` ;
- `Compacted` -> `RetentionCompactionUnsupported` / `store.postgres_retention_compaction_unsupported` sans fausse compression ;
- acquisition normale et `ForceRehydrate` acquis en `pre.005` continuent d'utiliser le même verrou canonical et sont donc sérialisés avec archive/purge ;
- V000/V001 restent byte-identiques.
### `0.3.3-pre.008` — façade `ksp-store-lib`

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/020-V0_3_3_STORE_POSTGRES_RAW_TRANSACTION.md -->
<!-- version: 10 -->
<!-- version: 11 -->
# Validation `0.3.3` — Store/PostgreSQL RawTransaction vertical slice
@@ -594,12 +594,20 @@ cap 500/1000 dans Store pagination
- `LIMIT requested + 1`, limite `i64::MAX - 1`, aucun cap worker : PASS unit/statique ;
- index V001 `(slot, signature)` partiel réutilisé, migration inchangée : PASS statique ;
- snapshot inter-pages explicitement non garanti : PASS doc ;
- gate Cargo opérateur : À EXÉCUTER.
- premier gate opérateur : FAIL local sur re-export cursor inutilisé + placeholder manquant du canari hardening ;
- `pre.006-fix.001` corrige uniquement ces deux défauts ; gate opérateur complet du 2026-08-30 : PASS (`check`, Clippy, Store/API/PostgreSQL/Config, no-default-features ; 34 tests unit backend).
### `pre.007`
- archive/purge/tombstone/ForceRehydrate ;
- Compacted unsupported stable.
- méthode backend-specific de transition : PASS statique ;
- network + `Compacted` rejetés pré-I/O : PASS unit design ;
- `Full -> Archived` et `Archived -> Purged` sous `FOR UPDATE` : PASS statique/unit decision ;
- `AlreadyAtTarget` / `ExpectedStateMismatch` / `Applied` : PASS unit decision ;
- archive payload/hot payload/block time validés selon l'état avant mutation/no-op : PASS statique ;
- unknown reference -> `ReferenceNotFound` : PASS statique ;
- `RetentionCompactionUnsupported` stable, aucune représentation `compacted` SQL : PASS statique/unit ;
- preuve des races et atomicité PostgreSQL réelle : différée à `pre.009` ;
- gate Cargo opérateur : À EXÉCUTER.
### `pre.008`
@@ -631,7 +639,7 @@ cap 500/1000 dans Store pagination
- publication stable.
## 22. Gate courant `pre.006`
## 22. Gate courant `pre.007`
```bash
cargo fmt --all
@@ -706,12 +714,24 @@ cargo check -p ksp-store-lib --no-default-features
- [PASS] replay network/direction/range et cursor hostile classés `QueryInvalid` ;
- [PASS] limite physique `requested <= i64::MAX - 1`, au-delà `PageLimitUnsupported` sans clamp ;
- [PASS] aucune migration SQL modifiée, aucun scope rétention mutante/façade ouvert ;
- [À FAIRE] gate Cargo opérateur complet de `pre.006`.
- [PASS] premier gate a isolé deux défauts purement locaux, corrigés en `pre.006-fix.001`.
### `pre.006-fix.001` — correction du gate
- [PASS] re-export crate-private `RawTransactionDecodedCursor` inutilisé supprimé sans modifier le codec cursor ;
- [PASS] canari `hardening_completeness` corrigé pour concaténer les huit sources backend inspectées ;
- [PASS] aucune logique SQL, pagination, migration ou checksum V000/V001 modifiée ;
- [À FAIRE] gate Cargo opérateur complet de `pre.006-fix.001`.
- [PASS] gate Cargo opérateur complet fourni le 2026-08-30.
### `pre.007` — état de la tranche
- [PASS] bridge backend-specific `transition_raw_transaction_retention` ajouté ;
- [PASS] validation réseau et `Compacted` avant pool I/O ;
- [PASS] compare-and-transition sérialisé par verrou canonical `FOR UPDATE` ;
- [PASS] `Full -> Archived` copie le payload exact vers archive puis retire le payload hot atomiquement ;
- [PASS] `Archived -> Purged` supprime l'archive, efface block time et conserve le tombstone minimal ;
- [PASS] `AlreadyAtTarget`, `ExpectedStateMismatch`, `Applied` décidés depuis l'état verrouillé ;
- [PASS] `RetentionCompactionUnsupported` utilise le code stable déjà acquis ;
- [PASS] aucune migration SQL modifiée, aucun trait Store complet ni dispatch façade ouvert ;
- [À FAIRE] gate Cargo opérateur complet de `pre.007`.