100 lines
3.7 KiB
Markdown
100 lines
3.7 KiB
Markdown
<!-- 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.
|