v0.3.3-pre.006
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/plans/024-V0_3_3_STORE_POSTGRES_RAW_TRANSACTION_PLAN.md -->
|
||||
<!-- version: 6 -->
|
||||
<!-- version: 7 -->
|
||||
|
||||
# Plan `0.3.3` — Store/PostgreSQL RawTransaction vertical slice
|
||||
|
||||
@@ -28,15 +28,18 @@ Tranches techniques validées :
|
||||
```text
|
||||
0.3.3-pre.001 — audit, threat model, physical design, sizing et planning
|
||||
0.3.3-pre.002 — moteur de migrations multi-version
|
||||
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
|
||||
```
|
||||
|
||||
Tranche technique courante :
|
||||
|
||||
```text
|
||||
0.3.3-pre.003 — V001 physique + binding réseau
|
||||
0.3.3-pre.006 — pagination keyset + cursor V1
|
||||
```
|
||||
|
||||
Les gates opérateur de `pre.001` et `pre.002` sont verts. `pre.003` matérialise le schéma physique V001 et le binding mono-réseau atomique, mais n'ouvre encore ni repository PostgreSQL métier, ni capability RAW, ni dispatch dans `ksp-store-lib`.
|
||||
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`.
|
||||
|
||||
## 2. Sources et autorité
|
||||
|
||||
@@ -1108,12 +1111,23 @@ Tranche matérialisée :
|
||||
|
||||
### `0.3.3-pre.006` — pagination/cursor
|
||||
|
||||
- ordre total ;
|
||||
- index utilisé ;
|
||||
- cursor V1 opaque ;
|
||||
- binding de query ;
|
||||
- limites physiques explicites ;
|
||||
- matrice hostile.
|
||||
Tranche matérialisée :
|
||||
|
||||
- `PostgresBackend::list_raw_transactions` retourne uniquement `RawPage<RawTransactionReference>` ;
|
||||
- mauvais réseau rejeté avant acquisition d'un client du pool ;
|
||||
- lignes `Purged` exclues de la liste ;
|
||||
- bornes `RawSlotRange` appliquées de façon inclusive ;
|
||||
- ordre total `Ascending = (slot ASC, signature ASC)` et `Descending = (slot DESC, signature DESC)` ;
|
||||
- continuation keyset stricte `(slot, signature) > cursor` ou `< cursor`, sans `OFFSET` ;
|
||||
- requêtes alignées avec l'index partiel V001 `(slot, signature) WHERE retention_state <> 'purged'` ;
|
||||
- cursor V1 backend-private de 109 octets : magic `KSPT`, version 1, `last_slot`, `last_signature`, digest SHA-256 ;
|
||||
- digest lié avec domaine séparé au network, à la direction, aux flags/valeurs des bornes et à la dernière clé ;
|
||||
- replay sous autre network/range/direction, taille/magic/version/digest hostiles et `last_slot` hors range -> `QueryInvalid` avant pool I/O ;
|
||||
- `RawPageLimit` sans cap métier : `LIMIT requested + 1`, borne PostgreSQL exacte `requested <= i64::MAX - 1`, sinon `PageLimitUnsupported` sans clamp ;
|
||||
- la row `limit+1` est décodée elle aussi afin de ne pas masquer une corruption physique ;
|
||||
- aucune promesse de snapshot inter-pages ; une mutation concurrente placée avant le cursor peut ne pas être observée ;
|
||||
- aucune transition de rétention mutante et aucune implémentation complète de trait dans cette tranche ;
|
||||
- V000/V001 restent byte-identiques.
|
||||
|
||||
### `0.3.3-pre.007` — archive, purge, tombstone, ForceRehydrate
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/validation/020-V0_3_3_STORE_POSTGRES_RAW_TRANSACTION.md -->
|
||||
<!-- version: 8 -->
|
||||
<!-- version: 9 -->
|
||||
|
||||
# Validation `0.3.3` — Store/PostgreSQL RawTransaction vertical slice
|
||||
|
||||
@@ -580,12 +580,21 @@ cap 500/1000 dans Store pagination
|
||||
- observation write séparée, key identique/divergente, absent/purged : PASS statique/unit design ;
|
||||
- `Conflict` / `ReferenceNotFound` / `WriteFailed` sans texte serveur : PASS statique ;
|
||||
- preuve PostgreSQL concurrente/rollback réelle : différée à `pre.009` ;
|
||||
- gate Cargo opérateur : À EXÉCUTER.
|
||||
- gate opérateur complet du 2026-08-30 : PASS (`check`, Clippy, Store/API/PostgreSQL/Config, no-default-features ; 30 tests unit backend).
|
||||
|
||||
### `pre.006`
|
||||
|
||||
- list/cursor/order/ranges ;
|
||||
- hostile cursor matrix.
|
||||
- `list_raw_transactions` backend-specific et mauvais réseau pré-I/O : PASS statique/unit design ;
|
||||
- ordre total ASC/DESC `(slot, signature)` et keyset stricte sans OFFSET : PASS statique ;
|
||||
- bornes inclusives et exclusion `Purged` : PASS statique ;
|
||||
- cursor V1 fixe 109 octets, magic/version/last key/digest : PASS unit design ;
|
||||
- binding digest network/direction/range + replay hostile rejeté : PASS unit design ;
|
||||
- taille/magic/version/digest/random bytes hostiles : PASS unit design ;
|
||||
- `last_slot` hors range rejeté : PASS unit design ;
|
||||
- `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.
|
||||
|
||||
### `pre.007`
|
||||
|
||||
@@ -622,7 +631,7 @@ cap 500/1000 dans Store pagination
|
||||
|
||||
- publication stable.
|
||||
|
||||
## 22. Gate courant `pre.005`
|
||||
## 22. Gate courant `pre.006`
|
||||
|
||||
```bash
|
||||
cargo fmt --all
|
||||
@@ -687,4 +696,15 @@ cargo check -p ksp-store-lib --no-default-features
|
||||
- [PASS] référence canonique absente classée `ReferenceNotFound` ;
|
||||
- [PASS] erreurs physiques d'écriture classées `WriteFailed` sans conserver le texte PostgreSQL ;
|
||||
- [PASS] aucune migration SQL modifiée et aucun scope pagination/rétention mutante ouvert ;
|
||||
- [À FAIRE] gate Cargo opérateur complet de `pre.005`.
|
||||
- [PASS] gate Cargo opérateur complet de `pre.005` fourni le 2026-08-30.
|
||||
### `pre.006` — état de la tranche
|
||||
|
||||
- [PASS] bridge `list_raw_transactions` ajouté sans type PostgreSQL public ;
|
||||
- [PASS] keyset stricte ASC/DESC sur `(slot, signature)`, sans `OFFSET` ;
|
||||
- [PASS] bornes de slots inclusives et tombstones `Purged` exclus ;
|
||||
- [PASS] cursor V1 fixe 109 octets et digest lié à la query ;
|
||||
- [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`.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user