0.3.16-pre.009

This commit is contained in:
2026-09-22 08:59:09 +02:00
parent f2227dce21
commit 40add02ac2
16 changed files with 498 additions and 105 deletions

View File

@@ -1,11 +1,11 @@
<!-- file: docs/validation/033-V0_3_16_RAW_RESILIENCE_CONFLICT.md -->
<!-- version: 2 -->
<!-- version: 3 -->
# Validation `0.3.16` -> `0.3.18` — résilience RAW et gestion des conflits
## 1. Objet
Ce document suit le programme de résilience RAW depuis le gate `0.3.16-pre.001` jusqu'à la fermeture prévue de `0.3.18`.
Ce document suit le programme de résilience RAW depuis le gate `0.3.16-pre.001` jusqu'à la fermeture prévue de `0.3.18`. La présente révision réconcilie spécifiquement l'état réellement validé de `0.3.16` avant sa lane de préparation de publication.
La première tranche ne prétend pas valider une implémentation qui n'existe pas encore. Elle valide le point de départ, les contrats acquis, les décisions d'architecture et la liste des preuves à construire. Le fix documentaire `0.3.16-pre.001-fix.001` répartit ensuite cette matrice sur trois releases stables afin de respecter la contrainte opérationnelle d'une version par session au maximum.
@@ -412,3 +412,171 @@ Le fix `0.3.16-pre.001-fix.001` ne supprime aucune preuve de la matrice ; il cha
Chaque stable possède son propre gate de fermeture. Une preuve non nécessaire au périmètre de la stable courante n'est pas déclarée manquante : elle reste explicitement attendue par la version suivante du programme.
Les scopes Backfill initialement réservés à `0.3.17` et `0.3.18` sont déplacés après ce programme afin d'éviter une collision de roadmap ; les cibles de planning par défaut deviennent respectivement `0.3.19` et `0.3.20`.
## 12. Réconciliation finale `0.3.16-pre.009`
### 12.1 Périmètre réellement acquis par `0.3.16`
La vertical slice `0.3.16` ferme les éléments suivants :
```text
Store API
RawTransactionVariantId / relation / reason code
comparateur partagé fail-closed
RawTransactionVariantWriteOutcome
RawAcquisitionWriteOutcome::transaction_variant()
PostgreSQL V003
ksp_raw_transaction_variants
ksp_raw_transaction_canonical_selectors
ksp_raw_transaction_observation_variants
ksp_raw_transaction_conflicts
Convergence
Exact -> observation/réutilisation de variante
CompatibleLessComplete -> variante observée, canonique inchangé
CompatibleMoreComplete -> promotion atomique
Conflict / Incomparable -> variante durable + conflict case Open, canonique inchangé
Worker
toute acquisition atteint le Store après sérialisation run-local par identité
QuarantinedConflict -> succès durable, Running + Degraded
identité suivante -> continue à être traitée
ERROR_CODE_RAW_CONFLICT legacy -> terminal de compatibilité
Job Backfill
QuarantinedConflict -> BackfillEntityPersistence::Conflict
outcome observation -> conservé, y compris AlreadyPresent
```
`content_hash` reste un préfiltre/intégrité et ne remplace jamais la comparaison des bytes lorsque ceux-ci sont disponibles. La seule dominance automatique admise en `0.3.16` reste la troncature `meta.logMessages` strictement prouvée ; les autres différences restent fail-closed.
### 12.2 Atomicité et rollback validés
Le hardening `pre.008` verrouille les invariants suivants :
- la branche de conflit ne modifie ni le sélecteur canonique ni la projection V001 ;
- les helpers de promotion et de conflict case restent dans la transaction d'acquisition externe ;
- un échec tardif après création de la variante divergente et du conflict case mais avant `COMMIT` annule ces écritures ;
- après rollback, selector et projection V001 restent cohérents avec le canonique antérieur ;
- deux écritures divergentes concurrentes produisent un canonique et une quarantaine durable, pas une erreur terminale de contenu.
### 12.3 Gate opérateur `0.3.16-pre.008-fix.001`
Le 22 septembre 2026, l'opérateur a exécuté :
```bash
cargo fmt --all
cargo fmt --all -- --check
python3 scripts/audit_rust_workspace_rules.py
python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas
cargo check --workspace
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo test -p ksp-store-api --all-targets --all-features
cargo test -p ksp-store-lib --all-targets --all-features
cargo test -p ksp-store-postgres-lib --all-targets --all-features
cargo test -p ksp-job-backfill-lib --all-targets --all-features
cargo test -p ksp-worker-raw-transaction-ingest-lib --all-targets --all-features
```
Résultats observés :
```text
cargo fmt --all -- --check PASS
General Rust rule audit clean
Rust export completeness audit 0 candidate(s)
KSP workspace Rust rule audit clean
Markdown table audit clean (352 table(s), 958 file(s))
cargo check --workspace PASS
cargo clippy --workspace --all-targets --all-features -D warnings PASS
ksp-store-api
29 unit + 2 dependency + 1 external backend + 9 public API
+ 5 release completeness + 5 security hardening PASS
ksp-store-lib
10 unit + 3 dependency + 1 feature mismatch
+ 6 hardening completeness + 5 public API PASS
ksp-store-postgres-lib
88 unit + 13 dependency + 16 hardening completeness
+ 13 public API + 3 V003 migration + 8 V003 variant PASS
foundation/raw-account/raw-transaction live tests ignored in normal gate as designed
ksp-job-backfill-lib
53 unit + 4 dependency + 9 hardening + 1 HTTP block material
+ 6 public API + 3 release + 2 WS parity + 1 Yellowstone PASS
ksp-worker-raw-transaction-ingest-lib
163 unit + 12 cross-layer + 21 dependency + 41 hardening
+ 22 public API + 18 release completeness PASS
```
Aucun warning Clippy n'est toléré par ce gate.
### 12.4 Preuve PostgreSQL réelle
Le live RawTransaction a été exécuté séparément avec une URI dédiée fournie silencieusement sur stdin :
```bash
read -rsp 'PostgreSQL URI: ' KSP_TEST_POSTGRES_URI
printf '\n'
printf '%s\n' "$KSP_TEST_POSTGRES_URI" \
| cargo test -p ksp-store-postgres-lib \
--test postgres_raw_transaction_live \
-- --ignored --nocapture
unset KSP_TEST_POSTGRES_URI
```
Résultat observé :
```text
KSP Store RawTransaction live proof: server major 17
test pre_009_real_postgres_raw_transaction_vertical_slice_is_atomic_concurrent_and_recoverable ... ok
1 passed; 0 failed
```
Cette preuve couvre notamment la concurrence divergente, la quarantaine durable, la cohérence selector/projection et le rollback tardif ajoutés au hardening `pre.008`.
### 12.5 Périmètre explicitement reporté
Ne sont **pas** revendiqués comme acquis par `0.3.16` :
```text
résolution/reopen/historique complet des conflict cases
rétention/pins/purge guards propres aux variantes
classification Store Transient/Terminal complète
retry Store / Blocked / backoff Worker
reconnexion WebSocket/Yellowstone configurable étendue
inspection/résolution de variantes via ksp-store-lib
Store Desk conflits/variantes/résolutions
Backfill multi-route/multi-stratégie
Backfill Desk multi-route
```
Les six premiers groupes appartiennent à `0.3.17`, Store Desk à `0.3.18`, puis les extensions Backfill sont ciblées par défaut sur `0.3.19`/`0.3.20`.
### 12.6 État de fermeture avant publication
```text
architecture/sizing CLOSED
Store API variantes/comparateur CLOSED
migration V003 CLOSED
variant ledger + observation mapping CLOSED
promotion canonique atomique CLOSED
conflit durable minimal CLOSED
Worker non terminal sur quarantaine CLOSED
régression Backfill CLOSED
hardening concurrence/rollback CLOSED
PostgreSQL RawTransaction live PASS sur PostgreSQL 17
gate technique pre.008-fix.001 PASS
réconciliation documentaire pre.009 CURRENT LANE
préparation publication pre.010 PENDING
rel.001 PENDING
```
La lane `pre.009` ne doit modifier ni `CHANGELOG.md`, ni `ROADMAP.md`, ni le prompt de démarrage `0.3.17`. Ces trois responsabilités appartiennent exclusivement à `pre.010`.