0.3.15-pre.016
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/plans/036-V0_3_15_RAW_TRANSACTION_INGEST_DESK_PLAN.md -->
|
||||
<!-- version: 24 -->
|
||||
<!-- version: 25 -->
|
||||
|
||||
# Plan v0.3.15 — Raw Transaction Ingest Desk
|
||||
|
||||
@@ -869,19 +869,25 @@ Budget cible : une tranche de convergence/completeness cross-layer, sans modific
|
||||
|
||||
### `pre.015` — Yellowstone sustained gRPC backpressure
|
||||
|
||||
**État : en cours.** Le live prolongé de `pre.014-fix.001` a reproduit `Yellowstone subscribe update queue overflowed` à `22:09:54`, alors que le Stop opérateur n'est demandé qu'à `22:12:03`. `pre.013` a donc amélioré le débit sans fermer le défaut durable : lorsque les `256` slots pending Worker sont pleins, le Worker suspend `next_update()` ; la queue Transport bornée de `256` updates finit ensuite par se remplir et son ancien `try_send` transforme cette pression locale en faute terminale `grpc_backpressure_overflow`.
|
||||
**État : implémenté et validé après `pre.015-fix.001`.** Le live prolongé de `pre.014-fix.001` avait reproduit `Yellowstone subscribe update queue overflowed` à `22:09:54`, alors que le Stop opérateur n'était demandé qu'à `22:12:03`. `pre.013` avait donc amélioré le débit sans fermer le défaut durable : lorsque les `256` slots pending Worker étaient pleins, le Worker suspendait `next_update()` ; la queue Transport bornée de `256` updates finissait ensuite par se remplir et son ancien `try_send` transformait cette pression locale en faute terminale `grpc_backpressure_overflow`.
|
||||
|
||||
La correction conserve toutes les bornes et n'augmente aucune queue. L'acteur Yellowstone Transport remplace uniquement l'envoi non bloquant de l'update décodée par un `send().await` sélectionné avec le signal de shutdown prioritaire. Une queue pleine suspend ainsi le polling du stream Tonic et propage la backpressure au flux gRPC/HTTP/2 ; lorsque le consumer libère une place, la livraison reprend. Aucun update n'est dropé et aucune allocation non bornée n'est introduite. `grpc_backpressure_overflow` reste un code public valide pour les queues de mutations de requête synchrones/fail-fast et les bornes de message ; seule la saturation de la queue d'updates reçues cesse d'être un terminal local.
|
||||
|
||||
Le gate live doit dépasser la durée de reproduction précédente : Yellowstone Mainnet seul puis Yellowstone + HTTP Block Polling doivent chacun rester actifs au moins 10 minutes, sans WARN `Yellowstone subscribe update queue overflowed`, sans `grpc_backpressure_overflow` et avec Stop ciblé terminant `Stopped`. Une vraie rupture distante reste traitée par le reconnect/replay borné existant.
|
||||
Le gate de `pre.015` a ensuite découvert une seconde anomalie appartenant au même contrat : après un Stop local explicite, PublicNode pouvait renvoyer un `Status::Unknown` pendant le half-close et remplacer à tort la terminaison coopérative par `source_failed`. `pre.015-fix.001` limite la correction à `finish_client_half_close()` : un status reçu après fermeture locale engagée produit `Closed`, tandis qu'un status reçu pendant une session active reste soumis au reconnect puis à `grpc_status` si la reprise échoue.
|
||||
|
||||
Budget cible : une tranche corrective Transport/acquisition, sans croissance d'API publique.
|
||||
Le rejeu opérateur de `pre.015-fix.001` ferme le couloir : audits propres, Cargo/Clippy/tests sans échec, canaris Transport `396/396` et Worker `161/161`; Yellowstone Mainnet et HTTP Block Polling tournent ensemble environ 19 minutes sans `grpc_backpressure_overflow` ni état `Faulted`, puis terminent tous deux `Stopped/Healthy`.
|
||||
|
||||
Budget consommé : correction Transport/acquisition sans croissance d'API publique.
|
||||
|
||||
### `pre.016` — gate technique/live final
|
||||
|
||||
Exécuter le workspace complet, Clippy strict, suites ciblées, graphes/duplicates, smokes réellement accessibles et build frontend/Tauri final. Aucun nouveau scope métier.
|
||||
**État : ouvert.** Aucun nouveau comportement métier ou runtime n'est introduit. La preuve live de `pre.015-fix.001` est la baseline autoritaire puisque `pre.016` ne modifie ni source, ni test fonctionnel, ni Config, ni manifest de crate, ni frontend.
|
||||
|
||||
Budget cible : une tranche technique.
|
||||
Le gate final rejoue : format, audits, `cargo check`, Clippy strict, suites ciblées Store/Transport/Worker/Desk, workspace all-targets/all-features, graphes Cargo des trois composants critiques, duplicates et `cargo tauri build` de la Desk. Les smokes live déjà fournis restent valides tant qu'aucun fichier runtime n'est modifié dans cette tranche.
|
||||
|
||||
Tout défaut découvert ici ouvre `pre.016-fix.NNN`. Toute anomalie appartenant à un couloir antérieur ouvre une nouvelle prerelease dédiée conformément à `VER-LIFECYCLE-010`, puis les couloirs de clôture sont rejoués.
|
||||
|
||||
Budget cible : une tranche technique de clôture uniquement.
|
||||
|
||||
### `pre.017` — réconciliation documentaire finale
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/validation/032-V0_3_15_RAW_TRANSACTION_INGEST_DESK.md -->
|
||||
<!-- version: 33 -->
|
||||
<!-- version: 34 -->
|
||||
|
||||
# Validation v0.3.15 — Raw Transaction Ingest Desk
|
||||
|
||||
@@ -1072,3 +1072,59 @@ release_v0_3_15_pre_015_fix_001_local_close_status_is_closed_without_weakening_a
|
||||
|
||||
Gate live attendu : Yellowstone Mainnet doit rester `Running/Healthy` pendant le run, puis un Stop ciblé doit terminer `Stopped` même si PublicNode répond `Unknown` après le half-close. Une occurrence de `grpc_status` avant la demande de Stop reste un échec réel et ne doit pas être reclassée.
|
||||
|
||||
### `pre.016` — ouverture du gate technique/live final
|
||||
|
||||
Le retour opérateur de `pre.015-fix.001` ferme la responsabilité backpressure/shutdown de `pre.015`. Après un `cargo clean`, les audits Rust/Markdown sont propres, `cargo check --workspace` et Clippy strict passent, et aucune suite testée ne rapporte d'échec. Les canaris récents passent notamment :
|
||||
|
||||
```text
|
||||
ksp-onchain-transport-lib unitaires : 396 passed / 0 failed
|
||||
ksp-onchain-transport-lib release completeness : 49 passed / 0 failed
|
||||
ksp-worker-raw-transaction-ingest-lib unitaires : 161 passed / 0 failed
|
||||
ksp-app-raw-transaction-ingest-desk unitaires : 50 passed / 0 failed
|
||||
```
|
||||
|
||||
La preuve live finale de la base `pre.015-fix.001` est également cohérente :
|
||||
|
||||
```text
|
||||
21:52:59 Yellowstone Mainnet installé
|
||||
21:53:02 HTTP Block Polling Mainnet installé
|
||||
22:11:52 Stop Yellowstone demandé
|
||||
22:11:57 Yellowstone -> Stopped / Healthy / fault none
|
||||
22:11:59 Stop HTTP Block Polling demandé
|
||||
22:12:02 HTTP Block Polling -> Stopped / Healthy / fault none
|
||||
```
|
||||
|
||||
Sur ce run d'environ 19 minutes en parallèle :
|
||||
|
||||
```text
|
||||
worker_state=Faulted : aucune occurrence
|
||||
grpc_backpressure_overflow : aucune occurrence
|
||||
Yellowstone subscribe update queue overflowed : aucune occurrence
|
||||
content_conflict terminal : aucune occurrence
|
||||
```
|
||||
|
||||
`pre.016` ne modifie aucun runtime. Le gate technique final attendu est donc :
|
||||
|
||||
```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-store-postgres-lib --all-targets --all-features
|
||||
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
|
||||
cargo tree -p ksp-onchain-transport-lib --edges normal
|
||||
cargo tree -p ksp-onchain-transport-lib -e features
|
||||
cargo tree -p ksp-worker-raw-transaction-ingest-lib --edges normal
|
||||
cargo tree -p ksp-worker-raw-transaction-ingest-lib -e features
|
||||
cargo tree -p ksp-app-raw-transaction-ingest-desk --edges normal
|
||||
cargo tree -p ksp-app-raw-transaction-ingest-desk -e features
|
||||
cargo tree --duplicates
|
||||
(cd crates/ksp-app-raw-transaction-ingest-desk && cargo tauri build)
|
||||
```
|
||||
|
||||
Aucun nouveau live n'est requis par cette archive tant que ce scope reste strictement mécanique/documentaire : la base immédiatement précédente possède déjà le run long requis et `pre.016` ne change aucun fichier consommé par le runtime. Une modification runtime découverte nécessaire pendant le gate invaliderait cette non-claim et devrait être portée par un fix ou une nouvelle prerelease conforme au lifecycle.
|
||||
|
||||
Reference in New Issue
Block a user