v0.3.3-pre.007
This commit is contained in:
@@ -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.006 — pagination keyset + cursor V1
|
||||
0.3.3-pre.007 — archive, 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`
|
||||
|
||||
|
||||
@@ -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`.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user