0.3.15-pre.009-fix.003

This commit is contained in:
2026-09-14 21:06:32 +02:00
parent 8ae4d0effd
commit 9fd51c5a41
7 changed files with 383 additions and 8 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/036-V0_3_15_RAW_TRANSACTION_INGEST_DESK_PLAN.md -->
<!-- version: 15 -->
<!-- version: 16 -->
# Plan v0.3.15 — Raw Transaction Ingest Desk
@@ -904,3 +904,21 @@ Le gate opérateur de `fix.001` invalide la conclusion selon laquelle le défaut
Deux régressions statiques de `fix.001` doivent être fermées avant toute nouvelle hypothèse live : le test des defaults Worker doit attendre 10 s comme la constante publique, et la cible `tracing` explicite doit être possédée par `src/constants.rs` puis consommée via la façade crate.
La trace sûre de faute source est étendue avec le contexte interne `condition` déjà borné par `runtime_error`; aucune valeur provider, endpoint, signature, payload ou secret n'est ajoutée. Le prochain gate live doit relever cette `condition` pour Yellowstone et HTTP polling avant toute correction fonctionnelle supplémentaire. Les faults `standard-logs-hydrated` (`timeout` après rate-limit), `standard-block-direct` (`rpc_application_error`) et `helius-transaction-hydrated` (`rpc_application_error`) sont des fautes antérieures au Stop et restent séparées du diagnostic shutdown.
### `pre.009-fix.003` — race Stop / admission drain
Le gate opérateur de `fix.002` ferme les deux régressions statiques de `fix.001` : les 158 tests unitaires Worker passent et le canari workspace de cible tracing passe. Un unique test dintégration Worker reste rouge parce que `src/constants.rs`, ajouté par `fix.002`, na pas été ajouté à linventaire exact de `tests/release_completeness.rs`.
Les nouvelles traces live qualifient désormais la cause Mainnet des deux faults de shutdown :
```text
yellowstone-hydrated : Stop -> runtime_invalid / condition=source.admission_closed
http-block-polling : Stop -> runtime_invalid / condition=source.admission_closed
```
La cause est la même pour les deux routes et se situe dans le drain Worker commun. Après `request_stop`, le superviseur externe signale le Stop au child `run_live_sources`, puis `drain_admission_and_persistence` ferme immédiatement le receiver dadmission. Le child doit encore relayer ce Stop à ses sources internes ; pendant cette fenêtre, un dernier `send()` peut donc observer un receiver fermé avant que son propre `stop_receiver` ne soit passé à `true`, et la fermeture coopérative devient artificiellement `source.admission_closed`.
`fix.003` garde le receiver dadmission ouvert pendant le drain coopératif. Les sources ont déjà reçu lordre de Stop ; le drain continue à consommer les éléments déjà produits jusquà ce que les derniers senders soient naturellement détruits. La fermeture forcée de ladmission reste réservée au chemin de timeout borné, qui abort/join les tâches non coopératives. Un test unitaire reproduit la fenêtre de propagation retardée et exige un terminal `Stopped` sans `source_failure_total`.
Le fault Yellowstone Devnet observé dans le même gate reste distinct : OrbitFlare répond `onchain_transport.grpc_status` avec refus de permission dès louverture du Subscribe, avant toute demande de Stop. Il nest pas reclassé par ce correctif.