# Delta v0.3.15-pre.013 — Yellowstone Block hydration backpressure ## Base ```text ksp-general-0.3.15-pre.012-fix.004.zip SHA-256: f88de2b95c2aab48043fd64b7825d9c508dc38d8f6ef51247ebce0da31be810e ``` Le gate opérateur de `pre.012-fix.004` compile et teste proprement les nouveaux diagnostics Store/Worker. Le live Mainnet ne reproduit aucun `content_conflict`, mais Yellowstone devient deux fois terminal `source_failed / onchain_transport.grpc_backpressure_overflow`. Les WARN Transport apparaissent avant les Stop opérateur : ```text 22:06:52.734796 Yellowstone subscribe update queue overflowed 22:07:10.781900 Stop Yellowstone demandé 22:08:39.746262 Yellowstone subscribe update queue overflowed 22:08:51.337483 Stop Yellowstone demandé ``` Le défaut n'appartient donc ni au Stop Desk ni au diagnostic `pre.012-fix.004`. Il appartient au couloir acquisition Yellowstone antérieur. Conformément à `VER-LIFECYCLE-010`, il ouvre une nouvelle prerelease dédiée et ne devient pas `pre.012-fix.005`. ## Cause Le mode Yellowstone Block était la seule voie d'hydration HTTP exécutée séquentiellement dans la boucle de réception source : ```text Block update gRPC -> await HTTP getBlock -> await admission de toutes les transactions du bloc -> next_update gRPC suivant ``` Pendant ces attentes, le Worker ne vidait plus la queue d'updates Transport. Sur Mainnet, la queue bornée finissait donc par atteindre sa capacité et Transport terminait correctement fail-closed avec `grpc_backpressure_overflow`. Le mode Block était également exclu de `RawTransactionIngestLiveSource::uses_hydration()`, donc il ne recevait aucun quota `pending/in-flight` lors du partitionnement déjà utilisé par les sources à hydration HTTP. ## Correction `RawTransactionIngestLiveSource::Yellowstone` participe désormais toujours au budget d'hydration, y compris en mode `BlockHydration`. Le nouveau coordinateur privé `RawTransactionIngestYellowstoneBlockHydrationCoordinator` : ```text pending slots <= quota pending attribué à la source getBlock/admission tasks in flight <= quota in-flight attribué à la source JoinSet possédé par la source aucune queue non bornée aucun task détaché aucun silent drop ``` La notification Block gRPC ne lance plus directement un `await getBlock` dans la branche `session.next_update()`. Elle réserve le slot dans le coordinateur. Jusqu'au quota in-flight, des tâches possédées exécutent en parallèle : ```text HTTP getBlock Full/Base64 -> construction Common RAW existante -> admission complète de toutes les transactions du bloc -> retour du slot terminé ``` Le slot n'est `settled` dans la processing frontier qu'après admission complète du bloc. Un Stop ou abort annule/joint les tâches et purge les pending sans settlement artificiel. La boucle Yellowstone continue à consommer `session.next_update()` tant que le quota pending possède une place. Si le débit aval reste durablement inférieur au débit de chaîne jusqu'à saturation de toutes les bornes, la politique fail-closed reste inchangée : aucun agrandissement de la queue Transport ne masque la surcharge. ## Frontières Aucun changement de : ```text YellowstoneGrpcSessionSettings.update_channel_capacity Transport gRPC actor Store / schema / RAW canonical identity content_conflict policy / diagnostics pre.012-fix.004 Config Desk Start/Stop/shutdown/IPC HTTP Block Polling Standard Block / Standard Logs / Helius Backfill public Worker API ``` Le correctif réutilise uniquement les budgets `admission_queue_capacity` et `persistence_concurrency` déjà possédés par le Worker pour partitionner les sources hydratantes. ## Canaris Ajouts/évolutions : ```text v0_3_15_pre_013_yellowstone_block_hydration_coordinator_is_bounded_before_http_work v0_3_15_pre_013_yellowstone_block_hydration_is_bounded_concurrent_and_stop_preemptible v0_3_15_pre_013_yellowstone_block_backpressure_fix_adds_no_public_surface ``` Le test historique `pre_009_yellowstone_block_mode_uses_get_block_without_transaction_hydration` vérifie maintenant aussi que le mode Block participe au budget d'hydration sans devenir une hydration `getTransaction`. ## Plan Le forecast est décalé d'une prerelease : ```text pre.013 Yellowstone Block hydration backpressure pre.014 completeness/security cross-layer pre.015 gate technique/live final pre.016 réconciliation documentaire finale pre.017 préparation publication rel.001 stable mécanique ``` ## Version ```text workspace.package.version : 0.3.15-pre.13 root Cargo header counter : 627 ``` ## Validation attendue ```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-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 (cd crates/ksp-app-raw-transaction-ingest-desk && cargo tauri dev) ``` Live obligatoire : ```text 1. Yellowstone Mainnet seul pendant au moins plusieurs minutes, donc au-delà des ~80 s de reproduction. 2. Vérifier absence de grpc_backpressure_overflow et état Healthy/Running. 3. Stop ciblé Yellowstone => Stopped/Healthy. 4. Yellowstone + HTTP Block Polling en parallèle pendant plusieurs minutes. 5. Vérifier les deux routes productives et manipulables. 6. Vérifier absence de grpc_backpressure_overflow. 7. Si content_conflict réapparaît, exploiter le diagnostic sémantique de pre.012-fix.004 sans le masquer. ``` ## Inventaire exact du delta Ajout : ```text deltas/0.3.15/pre.013.md ``` Modifications : ```text Cargo.toml crates/ksp-worker-raw-transaction-ingest-lib/README.md crates/ksp-worker-raw-transaction-ingest-lib/src/runtime_resources.rs crates/ksp-worker-raw-transaction-ingest-lib/tests/hardening.rs crates/ksp-worker-raw-transaction-ingest-lib/tests/release_completeness.rs crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/runtime_resources.rs docs/plans/036-V0_3_15_RAW_TRANSACTION_INGEST_DESK_PLAN.md docs/validation/032-V0_3_15_RAW_TRANSACTION_INGEST_DESK.md ``` Suppressions : aucune.