v0.2.9-pre.010-fix.001

This commit is contained in:
2026-08-24 18:53:10 +02:00
parent 4568d94a62
commit 3198cc5666
6 changed files with 169 additions and 19 deletions

View File

@@ -1,9 +1,9 @@
<!-- file: docs/validation/012-V0_2_9_YELLOWSTONE_GRPC.md -->
<!-- version: 21 -->
<!-- version: 22 -->
# Validation `0.2.9` — moteur Yellowstone + standard Solana + PublicNode
> **Statut : `pre.009-fix.001` est fermé : fmt/audit/check/Clippy sans warning, Transport 379 unit + 48 public API + 42 completeness + 4 doctests, dependency canary et workspace PASS. `pre.010` est candidate reconnect/replay avec observabilité prudente des gaps/duplicates.**
> **Statut : `pre.010` est fonctionnellement vert sur le gate opérateur (383 unit + 49 public API + 43 completeness + 4 doctests, workspace PASS), avec deux warnings Clippy `collapsible_if`. `pre.010-fix.001` corrige ces warnings et la description crate-root restée au niveau `pre.009`; aucun changement reconnect/replay n'est introduit. Fermeture requise sans warning avant `pre.011`.**
## 1. Autorités du gate
@@ -979,3 +979,34 @@ La détection de gap n'utilise pas les sauts entre slots d'updates filtrés : un
Le cache de duplicates retient des identités minimales Account/Slot/Transaction/TransactionStatus/Block/BlockMeta/Entry. Il ne retient pas les payloads complets et ne supprime jamais un update. Pour Block/BlockMeta, le blockhash fait partie de l'identité afin de ne pas classer deux histoires divergentes de même slot comme un simple duplicate ; aucune détection globale d'equivocation n'est prétendue.
**Gate candidate attendu :** audit statique clean ; après exécution opérateur, Transport attendu autour de 383 unit / 49 public API / 43 release-completeness / 4 doctests. Aucune dépendance/feature changée, donc pas de `cargo tree` supplémentaire.
## 30. Gate `pre.010-fix.001` — Clippy + cohérence crate-root
Premier gate opérateur de `pre.010` :
| Gate | Résultat avant fix | Correctif `fix.001` |
|------------------------------------------|--------------------|----------------------------------------------|
| `cargo fmt --all` | PASS | à réexécuter |
| audit Rust workspace | PASS / clean | à réexécuter |
| `cargo check --workspace` | PASS | contrat inchangé |
| `cargo clippy --workspace --all-targets` | PASS + 2 warnings | deux `collapsible_if` fusionnés |
| Transport unit | 383/383 PASS | contrat attendu inchangé |
| Transport `public_api` | 49/49 PASS | contrat attendu inchangé |
| Transport `release_completeness` | 43/43 PASS | contrat attendu inchangé |
| Transport doctests | 4/4 PASS | contrat attendu inchangé |
| `cargo test --workspace` | PASS | contrat attendu inchangé |
| description crate-root | stale `pre.009` | synchronisée avec reconnect/replay `pre.010` |
Warnings observés :
```text
crates/ksp-onchain-transport-lib/src/grpc_stream.rs:491 clippy::collapsible_if
crates/ksp-onchain-transport-lib/src/grpc_stream.rs:537 clippy::collapsible_if
```
Le premier concerne uniquement l'éviction lorsque le cache d'identités dépasse 512 entrées ; le second uniquement le chemin `Ping -> send_automatic_ping`. Les let-chains produisent les mêmes conditions et les mêmes sorties qu'avant fix. Aucun `allow` Clippy n'est ajouté.
La revue de la sémantique `pre.010` ne révèle pas d'écart supplémentaire avec le contrat retenu : `from_slot = max(explicite, last_observed)`, ReplayInfo reste informatif, le clamp n'a lieu que si `first_available > requested`, les duplicates sont comptés mais livrés, et les non-promesses exactly-once/lossless restent explicites.
**Verdict candidate :** `pre.010-fix.001` est prête pour gate opérateur. `pre.011` reste TODO jusqu'à PASS sans warning.