0.3.15-pre.009-fix.003

This commit is contained in:
2026-09-14 21:06:32 +02:00
parent 8ae4d0effd
commit 9fd51c5a41
7 changed files with 383 additions and 8 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/032-V0_3_15_RAW_TRANSACTION_INGEST_DESK.md -->
<!-- version: 16 -->
<!-- version: 17 -->
# Validation v0.3.15 — Raw Transaction Ingest Desk
@@ -591,3 +591,59 @@ helius-transaction-hydrated
```
Conclusion : le passage du drain par défaut à 10 s reste conservé mais n'est pas une preuve de correction Yellowstone. `fix.002` répare les deux gates statiques et expose dans la trace source le contexte interne statique `condition` des erreurs `runtime_invalid`. Le prochain live doit fournir cette `condition` exacte pour Yellowstone et HTTP polling ; aucune conversion générique `runtime_invalid -> Stopped` n'est autorisée.
### `pre.009-fix.003` — résultat du gate opérateur `fix.002`
Le gate opérateur de `0.3.15-pre.009-fix.002` confirme :
```text
audit Rust workspace PASS
audit Markdown PASS (318 tables / 210 fichiers)
cargo check --workspace PASS
Clippy workspace strict -D warnings PASS
tests unitaires Worker PASS : 158 / 158
workspace_logging PASS
tests Worker complets FAIL : 1 canari release_completeness
tests workspace FAIL : même canari Worker
cargo tauri dev lancé et application opérationnelle
```
Léchec statique restant est exact :
```text
pre_010_production_module_inventory_is_exact
réel : admission.rs, constants.rs, continuity.rs, ...
attendu : admission.rs, continuity.rs, ...
```
`constants.rs` est une production source volontaire de `fix.002`; le canari doit donc linclure.
Le live apporte surtout la qualification attendue :
```text
Mainnet / yellowstone-hydrated
route productive via Yellowstone Block + HTTP getBlock
Stop demandé
~5 s plus tard : worker_raw_transaction_ingest.runtime_invalid
condition=source.admission_closed
transport_domain=none
transport_code=none
Mainnet / http-block-polling
route productive via getSlot/getBlocks/getBlock
Stop demandé
~10 ms plus tard : worker_raw_transaction_ingest.runtime_invalid
condition=source.admission_closed
transport_domain=none
transport_code=none
Devnet / yellowstone-hydrated
fault avant Stop lors de SubscribeOpen
source_failed / onchain_transport.grpc_status
OrbitFlare refuse la permission
```
La cause Mainnet est une race interne commune : le superviseur Worker ferme le receiver dadmission au début du drain alors que `run_live_sources` na pas nécessairement encore relayé le Stop à sa source interne. Un dernier `send()` voit alors ladmission fermée alors que son `stop_receiver` local vaut encore `false`, ce qui fabrique `source.admission_closed`.
Validation attendue après `fix.003` : le drain coopératif ne ferme plus ladmission au début ; il consomme la file jusquà destruction naturelle des senders après propagation du Stop. Le hard-close reste dans le chemin `shutdown_drain_timeout`. Un test unitaire force cette fenêtre de propagation et exige `Stopped` sans source failure.