0.3.15-pre.013
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/plans/036-V0_3_15_RAW_TRANSACTION_INGEST_DESK_PLAN.md -->
|
||||
<!-- version: 20 -->
|
||||
<!-- version: 21 -->
|
||||
|
||||
# Plan v0.3.15 — Raw Transaction Ingest Desk
|
||||
|
||||
@@ -342,7 +342,7 @@ La documentation Helius actuelle indique que `blockSubscribe` n'est pas support
|
||||
| Store open / network / partage `Arc<Store>` | aucun gap | Store + app | `ksp-store-lib` suffit |
|
||||
| Lifecycle / stop / snapshots Worker | aucun gap | Worker + app | handles publics existants |
|
||||
| Backfill / historical repair | hors scope | Job Backfill | aucune orchestration automatique |
|
||||
| Taille release | pas de split de release | plan | forecast étendu jusqu’à `pre.016` |
|
||||
| Taille release | pas de split de release | plan | forecast étendu jusqu’à `pre.017` |
|
||||
|
||||
La release n'est pas rescindée. Le gap WS est petit, clairement propriétaire et testable. En revanche, le forecast doit être étendu pour ne pas fusionner Transport, Config, Worker et scaffold UI dans une même tranche.
|
||||
|
||||
@@ -668,7 +668,7 @@ Le build Tauri final reste un gate tardif et ne remplace pas les tests runtime.
|
||||
|
||||
## 20. Forecast recalibré — prereleases souples
|
||||
|
||||
Le forecast initial `pre.002 -> pre.013` est étendu jusqu'à `pre.016`. La cause n'est pas une inflation UI : c'est la découverte d'un contrat WS capability manquant qui doit être fermé proprement dans Transport, Config puis Worker avant consommation par la Desk.
|
||||
Le forecast initial `pre.002 -> pre.013` est désormais étendu jusqu'à `pre.017`. La cause n'est pas une inflation UI : c'est la découverte d'un contrat WS capability manquant qui doit être fermé proprement dans Transport, Config puis Worker avant consommation par la Desk.
|
||||
|
||||
Le forecast reste volontairement souple. Chaque prerelease possède une sous-section directement éditable ; lorsqu'un correctif est nécessaire, il est ajouté sous la prerelease concernée avec un titre `#### pre.NNN-fix.MMM`. Les responsabilités de clôture `gate technique/live -> réconciliation documentaire -> préparation de publication` restent séparées.
|
||||
|
||||
@@ -847,25 +847,33 @@ Aucun module de production supplémentaire, aucune dépendance lower-layer et au
|
||||
|
||||
Budget cible : une tranche hardening.
|
||||
|
||||
### `pre.013` — completeness/security cross-layer
|
||||
### `pre.013` — Yellowstone Block hydration backpressure
|
||||
|
||||
**État : implémenté, gate opérateur requis.** Le live de `pre.012-fix.004` a reproduit deux `grpc_backpressure_overflow` Mainnet environ 79 s puis 81 s après démarrage Yellowstone. Les WARN Transport précèdent les Stop opérateur de plusieurs secondes : la cause est donc le couplage historique `Block update -> getBlock HTTP -> admission de toutes les transactions -> lecture de l'update suivante`, et non la sémantique Stop. Conformément à `VER-LIFECYCLE-010`, ce défaut du couloir acquisition antérieur ouvre une nouvelle prerelease dédiée au lieu d'un `pre.012-fix.005`.
|
||||
|
||||
Le mode Yellowstone Block reçoit désormais une partition déterministe des budgets d'hydration déjà possédés par le Worker. Les slots gRPC sont placés dans un coordinateur privé borné ; plusieurs `getBlock` peuvent progresser concurremment jusqu'au quota `in-flight`, et chaque tâche porte aussi l'admission complète de son bloc avant settlement du slot. La boucle source continue de consommer `session.next_update()` tant qu'une capacité pending existe. Aucun changement de capacité Transport, aucune queue non bornée et aucun drop silencieux ne masquent une surcharge durable.
|
||||
|
||||
Budget cible : une tranche corrective acquisition/throughput, suivie d'un live Mainnet prolongé.
|
||||
|
||||
### `pre.014` — completeness/security cross-layer
|
||||
|
||||
Fermer les canaris Config/Transport/Worker/Common RAW/Store/Desk, dependency firewalls, API publique, redaction et absence de seconde pipeline ou d'orchestration Backfill.
|
||||
|
||||
Budget cible : une tranche de clôture fonctionnelle.
|
||||
|
||||
### `pre.014` — gate technique/live final
|
||||
### `pre.015` — 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.
|
||||
|
||||
Budget cible : une tranche technique.
|
||||
|
||||
### `pre.015` — réconciliation documentaire finale
|
||||
### `pre.016` — réconciliation documentaire finale
|
||||
|
||||
Réconcilier plan, validation, README/USAGE et documents durables réellement affectés. Ne pas modifier CHANGELOG, ROADMAP ni le prompt suivant.
|
||||
|
||||
Budget cible : une tranche documentaire.
|
||||
|
||||
### `pre.016` — préparation de publication
|
||||
### `pre.017` — préparation de publication
|
||||
|
||||
Préparer le prompt suivant, CHANGELOG, ROADMAP et la mécanique minimale de version/delta. Aucun rattrapage fonctionnel ou documentaire durable.
|
||||
|
||||
@@ -908,7 +916,7 @@ aucun gap Store / HTTP / lifecycle Worker essentiel
|
||||
capability WS fine = gap lower-layer réel à fermer avant UI
|
||||
Helius standard WS != Helius transactionSubscribe
|
||||
aucune route rendue disponible à partir d'un exemple Config ou du provider name
|
||||
forecast recalibré jusqu'à pre.016
|
||||
forecast recalibré jusqu'à pre.017
|
||||
```
|
||||
|
||||
`pre.002` doit donc commencer par le contrat Transport de capabilities WS, et non par le scaffold Tauri.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/validation/032-V0_3_15_RAW_TRANSACTION_INGEST_DESK.md -->
|
||||
<!-- version: 26 -->
|
||||
<!-- version: 27 -->
|
||||
|
||||
# Validation v0.3.15 — Raw Transaction Ingest Desk
|
||||
|
||||
@@ -461,19 +461,23 @@ Ce correctif ne modifie ni Config, ni Transport, ni Store, ni Worker, ni Common
|
||||
|
||||
Races, shutdown app, sécurité IPC, hardening hostile/stale inventory.
|
||||
|
||||
### `pre.013` — completeness
|
||||
### `pre.013` — Yellowstone Block hydration backpressure
|
||||
|
||||
Découplage borné réception gRPC / `getBlock` / admission pour la route Yellowstone Block, conformément à `VER-LIFECYCLE-010`.
|
||||
|
||||
### `pre.014` — completeness
|
||||
|
||||
Cross-layer completeness + canaris système sans expansion de frontières.
|
||||
|
||||
### `pre.014` — gate technique/live
|
||||
### `pre.015` — gate technique/live
|
||||
|
||||
Gate technique/live accessible + frontend/Tauri + build final de validation technique.
|
||||
|
||||
### `pre.015` — réconciliation documentaire
|
||||
### `pre.016` — réconciliation documentaire
|
||||
|
||||
Plan/validation/README/USAGE uniquement selon les surfaces réellement affectées.
|
||||
|
||||
### `pre.016` — préparation publication
|
||||
### `pre.017` — préparation publication
|
||||
|
||||
Prompt suivant + CHANGELOG + ROADMAP + mécanique minimale de publication.
|
||||
|
||||
@@ -793,7 +797,7 @@ pre_012_hostile_ipc_is_shape_strict_bounded_and_safely_projected
|
||||
pre_012_race_shutdown_and_ipc_hardening_adds_no_production_module_or_lower_layer_growth
|
||||
```
|
||||
|
||||
Non-claims : `pre.012` ne modifie ni Config, ni Transport, ni Store, ni `ksp-worker-raw-transaction-ingest-lib`, ni Common RAW. Il n'ajoute aucune orchestration Backfill, aucun scheduler, aucune route et aucune nouvelle donnée frontend. `pre.013` reste propriétaire de la fermeture completeness/security cross-layer.
|
||||
Non-claims : `pre.012` ne modifie ni Config, ni Transport, ni Store, ni `ksp-worker-raw-transaction-ingest-lib`, ni Common RAW. Il n'ajoute aucune orchestration Backfill, aucun scheduler, aucune route et aucune nouvelle donnée frontend. `pre.014` reste propriétaire de la fermeture completeness/security cross-layer.
|
||||
### `pre.012-fix.001` — future Tauri Start `Send`
|
||||
|
||||
Le gate opérateur de `pre.012` a arrêté la tranche sur un défaut de compilation déterministe dans `AppState::start_route` : le `std::sync::MutexGuard<u32>` de `inventory_generation` restait considéré vivant au franchissement du `await` final, malgré `std::mem::drop(generation)`. Le futur exposé par la commande Tauri `start_route` ne satisfaisait donc plus la borne `Send` imposée par `tauri::ipc::ResultFutureTag::future`. Les audits Rust/Markdown étaient propres et les suites Worker indépendantes restaient vertes, mais `cargo check`, Clippy, les tests Desk/workspace et `cargo tauri dev` ne pouvaient pas compiler le Desk.
|
||||
@@ -850,4 +854,34 @@ Une seconde ligne de diagnostic lit au mieux l'observation durable la plus ancie
|
||||
Ce fix n'altère ni l'identité canonique, ni la comparaison d'égalité, ni la politique de conflit, ni le Store schema, ni la stratégie d'acquisition. `serde_json` est utilisé uniquement dans le backend PostgreSQL pour classifier les composants du payload RAW v1 déjà canonique au moment d'un conflit.
|
||||
|
||||
Le prochain live Yellowstone + HTTP Block Polling doit permettre de distinguer immédiatement un désaccord de `slot`/`block_time`, de transaction wire, de transaction index, de version ou d'un sous-ensemble précis de `meta` (par exemple `logMessages` ou `rewards`).
|
||||
### `pre.013` — découplage borné Yellowstone Block / HTTP `getBlock`
|
||||
|
||||
Le gate de `pre.012-fix.004` est propre sur les nouveaux canaris Store et Worker. Le live Mainnet ne reproduit aucun `content_conflict`, mais reproduit deux fois un terminal Yellowstone `source_failed / onchain_transport.grpc_backpressure_overflow`. Les WARN Transport apparaissent à `22:06:52.734796` puis `22:08:39.746262`, alors que les Stop Yellowstone n'arrivent qu'à `22:07:10.781900` puis `22:08:51.337483`. Le Stop ne crée donc pas l'overflow ; il révèle ensuite le terminal déjà produit par Transport.
|
||||
|
||||
La cause est le chemin Yellowstone Block historique entièrement séquentiel :
|
||||
|
||||
```text
|
||||
Block update gRPC
|
||||
-> await HTTP getBlock
|
||||
-> await admission de toutes les transactions du bloc
|
||||
-> seulement ensuite next_update gRPC
|
||||
```
|
||||
|
||||
Cette source était en outre exclue de `uses_hydration()`, donc ne recevait aucun quota `pending/in-flight` du supervisor multi-source. Une queue Transport plus grande ne ferait que retarder le même défaut.
|
||||
|
||||
`pre.013` corrige le débit sans modifier Transport : Yellowstone Block est désormais une source hydratante pour le partitionnement des budgets existants. Un coordinateur privé de slots borne les pending ; jusqu'au quota `in-flight`, chaque tâche possédée exécute `getBlock` puis l'admission complète du bloc. La boucle source reste disponible pour `session.next_update()` tant qu'une place pending existe. Le slot n'est `settled` qu'après admission complète. Stop/abort joint toutes les tâches et purge les pending sans faux settlement.
|
||||
|
||||
La politique reste fail-closed : aucune hausse de `YellowstoneGrpcSessionSettings.update_channel_capacity`, aucune queue non bornée, aucun silent drop et aucun masquage de `grpc_backpressure_overflow`. Si le débit aval reste durablement inférieur à la chaîne malgré la concurrence bornée, une saturation terminale reste correcte et observable.
|
||||
|
||||
Canaris ajoutés :
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
Aucun type du coordinateur n'est exporté publiquement.
|
||||
|
||||
Validation live requise : Yellowstone Mainnet seul pendant une durée supérieure aux ~80 s de reproduction, puis Yellowstone + HTTP Block Polling en parallèle. Le run doit rester `Healthy`, sans `grpc_backpressure_overflow`, et les Stop ciblés doivent finir `Stopped`. Le diagnostic `pre.012-fix.004` reste actif si un `content_conflict` réapparaît.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user