0.3.15-pre.015

This commit is contained in:
2026-09-18 21:06:58 +02:00
parent b266019ea8
commit 582a286baa
9 changed files with 323 additions and 54 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/032-V0_3_15_RAW_TRANSACTION_INGEST_DESK.md -->
<!-- version: 31 -->
<!-- version: 32 -->
# Validation v0.3.15 — Raw Transaction Ingest Desk
@@ -276,7 +276,7 @@ Aucune de ces informations Web n'est convertie directement en route sélectionna
| Store open / network / partage `Arc<Store>` | aucun gap | Store + app | `ksp-store-lib` suffit |
| Lifecycle / stop / snapshots Worker | aucun gap | Worker + app | handles publics existants |
| Backfill / historical repair | hors scope | Job Backfill | aucune orchestration automatique |
| Taille release | pas de split de release | plan | forecast étendu jusquà `pre.016` |
| Taille release | pas de split de release | plan | forecast étendu jusquà `pre.018` |
Résultat : `0.3.15` reste une release cohérente. Aucun split vers `0.3.16` n'est nécessaire avant implémentation, mais le forecast interne est élargi.
@@ -465,19 +465,23 @@ Races, shutdown app, sécurité IPC, hardening hostile/stale inventory.
Découplage borné réception gRPC / `getBlock` / admission pour la route Yellowstone Block, conformément à `VER-LIFECYCLE-010`.
### `pre.014` — completeness
### `pre.014` — convergence inter-provider + completeness
Cross-layer completeness + canaris système sans expansion de frontières.
Diagnostic puis compatibilité étroite des `logMessages` explicitement tronqués, avec canaris cross-layer et sans expansion de frontières publiques.
### `pre.015` — gate technique/live
### `pre.015` — Yellowstone sustained gRPC backpressure
La saturation locale de la queue d'updates Yellowstone doit appliquer une backpressure asynchrone bornée au stream gRPC au lieu de produire un terminal `grpc_backpressure_overflow`.
### `pre.016` — gate technique/live
Gate technique/live accessible + frontend/Tauri + build final de validation technique.
### `pre.016` — réconciliation documentaire
### `pre.017` — réconciliation documentaire
Plan/validation/README/USAGE uniquement selon les surfaces réellement affectées.
### `pre.017` — préparation publication
### `pre.018` — préparation publication
Prompt suivant + CHANGELOG + ROADMAP + mécanique minimale de publication.
@@ -1005,3 +1009,46 @@ Le gate opérateur de `pre.014-fix.002` confirme la correction de typage : les a
Non-claim : ce fix ne traite pas le `grpc_backpressure_overflow` Yellowstone prolongé déjà identifié ; ce défaut ouvre toujours la prochaine prerelease acquisition dédiée après fermeture du gate `pre.014`.
### `pre.015` — backpressure gRPC Yellowstone soutenue sans overflow local
Le gate opérateur de `pre.014-fix.003` ferme la prerelease `pre.014` : audits Rust/Markdown propres, `cargo check --workspace`, Clippy strict, `ksp-store-postgres-lib` (`75/75` unitaires et `16/16` hardening completeness), Worker (`161/161` unitaires et suites externes), Raw Transaction Ingest Desk et `cargo test --workspace --all-targets --all-features` passent. Le canari de non-réécriture canonique resserré par `fix.003` est donc validé.
Le défaut acquisition restant provient du live prolongé précédent et ne relève pas du Store. Le WARN `Yellowstone subscribe update queue overflowed` apparaît à `22:09:54`, tandis que le Stop Yellowstone n'est demandé qu'à `22:12:03`. `content_conflict_total=0` au terminal. La chaîne de saturation est désormais établie :
```text
Worker Yellowstone Block pending plein (borne 256)
-> Worker suspend session.next_update()
-> queue Transport update bornée (borne 256) se remplit
-> ancien update_tx.try_send(...) retourne Full
-> grpc_backpressure_overflow local
-> source_failed / Faulted
```
`pre.015` ne change ni les valeurs `256/8`, ni le Store, ni le payload RAW, ni le reconnect budget. L'acteur Subscribe Yellowstone conserve sa queue d'updates bornée mais attend désormais asynchronement sa capacité avec `update_tx.send(...).await`. Le même `tokio::select!` donne priorité au shutdown afin qu'un Stop reste préemptif même lorsque le consumer ne draine plus la queue. Pendant l'attente, le stream Tonic n'est plus pollé ; la pression est donc propagée au transport gRPC/HTTP/2 au lieu d'être transformée en erreur locale ou en drop.
Canaris requis :
```text
yellowstone_slow_receiver_applies_bounded_backpressure_without_terminal_overflow
release_v0_3_15_pre_015_yellowstone_update_delivery_backpressures_without_local_overflow
```
Non-claims : aucune garantie lossless/exactly-once, aucune queue non bornée, aucun agrandissement de capacité, aucune modification WebSocket, aucun changement de la queue de mutations Yellowstone qui reste synchrone/fail-fast, aucune suppression du code public `grpc_backpressure_overflow`, aucune nouvelle API publique.
Gate opérateur attendu :
```text
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/0.3.15
cargo check --workspace
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo test -p ksp-onchain-transport-lib --all-targets --all-features
cargo test -p ksp-worker-raw-transaction-ingest-lib --all-targets --all-features
cargo test -p ksp-app-raw-transaction-ingest-desk --all-targets --all-features
cargo test --workspace --all-targets --all-features
```
Gate live Mainnet : Yellowstone seul pendant au moins 10 minutes, puis Yellowstone + HTTP Block Polling pendant au moins 10 minutes. Dans les deux cas, aucune occurrence de `Yellowstone subscribe update queue overflowed` ou `grpc_backpressure_overflow` n'est admise ; la route Yellowstone doit rester active/saine jusqu'au Stop ciblé, puis terminer `Stopped`. Une interruption réseau distante réellement observée doit rester classée par les codes Transport/reconnect existants et ne doit pas être confondue avec ce gate de saturation locale.