0.3.15-pre.015-fix.001

This commit is contained in:
2026-09-18 23:33:08 +02:00
parent 582a286baa
commit b1b0e91616
7 changed files with 173 additions and 12 deletions

View File

@@ -0,0 +1,99 @@
<!-- file: deltas/0.3.15/pre.015-fix.001.md -->
<!-- version: 1 -->
# Delta v0.3.15-pre.015-fix.001 — Stop Yellowstone post-half-close
## Base
```text
ksp-general-0.3.15-pre.015.zip
SHA-256: 3ab4b976ae612286b577aa003c10e6b9627be040a0a0fc51b2c9e45d6616893e
```
Le gate `pre.015` confirme la correction de la saturation locale : les audits, `cargo check`, Clippy, les suites ciblées et le workspace passent, le canari Transport de backpressure soutenue passe, et la trace live fournie ne contient plus de `grpc_backpressure_overflow` Yellowstone pendant le run. Le défaut restant appartient au même contrat `pre.015`, car le gate exige explicitement `Stop ciblé -> Stopped`.
## Défaut observé
```text
20:57:33.659 Stop Yellowstone demandé
20:57:33.778 PublicNode renvoie grpc Status Unknown pendant graceful shutdown
20:57:33.780 Worker classe la source source_failed / grpc_status
20:57:34.918 route terminale Faulted / Unhealthy
```
La fonction `finish_client_half_close()` est exécutée uniquement après déclenchement du shutdown local. Elle classait pourtant tout `Status` reçu après le half-close comme une nouvelle faute distante, ce qui remplaçait à tort la terminaison coopérative déjà engagée.
## Correction
Pendant `finish_client_half_close()` :
```text
Status reçu après shutdown local explicite
-> log safe du code gRPC
-> state = Closed
-> terminal_error_code = None
-> session.close() = Ok(())
```
La branche active reste inchangée : un `Status` reçu par `run_subscribe_actor()` avant shutdown continue d'entrer dans la politique de reconnect bornée et reste terminal si cette politique ne peut pas récupérer la session.
Le timeout de fermeture hostile reste également inchangé et borné par `close_timeout`.
## Canaris
```text
yellowstone_explicit_close_accepts_remote_status_after_local_half_close
yellowstone_stream_remote_status_is_safe_and_terminal
yellowstone_hostile_server_shutdown_is_bounded_by_close_timeout
release_v0_3_15_pre_015_fix_001_local_close_status_is_closed_without_weakening_active_status_failure
```
## Frontières
Aucun changement de Worker, Store, Config, Desk, schema, RAW, reconnect budget, capacités de queue ou API publique. Aucun status reçu en fonctionnement normal n'est reclassé en succès.
## Version
```text
workspace.package.version : 0.3.15-pre.15.fix.1
root Cargo header counter : 633
```
## 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-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
(cd crates/ksp-app-raw-transaction-ingest-desk && cargo tauri dev)
```
Live : Yellowstone Mainnet doit rester sain pendant le run puis terminer `Stopped` après Stop ciblé, y compris si le provider renvoie `Unknown` après le half-close. HTTP Block Polling doit conserver son comportement `Stopped/Healthy` indépendant.
## Inventaire exact du delta
Ajout :
```text
deltas/0.3.15/pre.015-fix.001.md
```
Modifications :
```text
Cargo.toml
crates/ksp-onchain-transport-lib/README.md
crates/ksp-onchain-transport-lib/src/grpc_stream.rs
crates/ksp-onchain-transport-lib/tests/release_completeness.rs
crates/ksp-onchain-transport-lib/unit_tests/grpc_stream.rs
docs/validation/032-V0_3_15_RAW_TRANSACTION_INGEST_DESK.md
```
Suppressions : aucune.