v0.3.13-pre.007

This commit is contained in:
2026-09-10 17:33:02 +02:00
parent 72df965a9c
commit 8bb530e9b4
13 changed files with 905 additions and 78 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/034-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE_PLAN.md -->
<!-- version: 6 -->
<!-- version: 7 -->
# Plan v0.3.13 — WS standard / Helius / HTTP live + convergence multi-source RawTransaction
@@ -1145,3 +1145,104 @@ L'empreinte de profil inclut les identités sûres endpoint/provider et les capa
La supervision simultanée, le lifecycle par source et l'inventaire multi-source restent exclusivement `pre.007`. `pre.006` ne transforme pas le poller HTTP en Backfill et ne crée aucun checkpoint durable inter-run.
## 56. Gate opérateur pre.006-fix.001 reçu avant pre.007
Le gate opérateur communiqué le 10 septembre 2026 est vert sur le périmètre exécuté après `pre.006-fix.001` :
```text
cargo fmt --all + --check : PASS
audit Rust général : clean
export completeness : 0 candidate
workspace Rust rules : clean
Markdown : clean, 340 tables / 840 files
cargo check --workspace : PASS
cargo clippy --workspace --all-targets --all-features -- -D warnings : PASS
worker unit : 88/88 PASS
cross_layer_completeness : 4/4 PASS
dependency_boundary : 13/13 PASS
hardening : 20/20 PASS
public_api : 14/14 PASS
release_completeness : 4/4 PASS
doc-tests Worker : 0/0 PASS
```
Le log communiqué ne contient pas les sorties séparées `cargo test -p ksp-onchain-transport-lib` ni les trois `cargo tree`; elles restent à reprendre dans un gate technique ultérieur et ne sont pas déclarées PASS ici.
## 57. Implémentation pre.007 — supervisor et inventaire multi-source
La barrière `runtime_resources.multi_source_activation_pending` disparaît. Après validation réseau/identité/borne de la collection, `RawTransactionIngestRuntimeResources::run_live_sources` consomme les `1..32` sources et lance chacune dans un `tokio::task::JoinSet` privé.
Le supervisor source possède :
```text
un stop receiver Worker
un stop sender privé partagé vers toutes les sources
un JoinSet de toutes les tasks source
un inventaire privé borné par source_key
le sender de frontier agrégée vers le supervisor Worker
```
Il n'existe aucun ordre de priorité, source primaire, standby ou first-provider-wins. Toutes les sources configurées sont démarrées dans le même run.
## 58. Terminalité, stop et joins pre.007
Politique conservatrice :
```text
stop Worker -> stop toutes les sources -> join toutes -> résultat supervisor
source Err -> stop des sœurs -> join toutes -> faute source terminale
source Ok avant stop Worker -> perte inattendue d'une source configurée -> faute terminale
join panic/cancel -> faute terminale sûre
```
Cette politique ne tente aucun failover implicite. KSP ne possède encore aucune preuve que deux sources couvrent le même ensemble de transactions ou de filtres.
Le supervisor imbriqué retourne son résultat au supervisor Worker existant, qui conserve la sémantique globale `source_failed`, la transition Stopping et le drain borné admission/persistence déjà établis.
## 59. Inventaire et processing frontier multi-source
L'inventaire privé contient au plus 32 couples logiques `source_key -> latest RawTransactionIngestProcessingFrontierProjection`. Les clés ne sont jamais publiées par l'API ou les snapshots.
Chaque source continue d'émettre sa projection latest-value locale. Un wrapper privé la reporte dans l'inventaire, qui publie ensuite une projection source-neutral agrégée :
```text
hydration_pending = somme saturante temporaire des projections source
oldest_pending_slot = minimum des pending connus
processing_frontier_slot = None tant qu'une source n'a pas de frontier ; sinon minimum de toutes les frontiers
source_state = Failed > Reconnecting > Closing > Active > Closed/None
reconnect/replay/gap counters = agrégés sans wrap
```
Le choix du minimum est volontairement conservateur : une source plus avancée ne prouve jamais que les autres couvrent le même univers. Cette frontier reste run-local et ne devient ni checkpoint durable ni preuve de completeness blockchain.
## 60. Frontière de tranche pre.007
`pre.007` active la simultanéité et le lifecycle source mais ne ferme pas encore la convergence transactionnelle cross-source. En particulier :
```text
pas encore de coalescence globale entre signaux de sources différentes
pas encore d'unique hydration cross-source garantie
pas encore de lot canonique multi-observations
pas encore de persistence observation supplémentaire cross-source
pas encore de fairness durcie contre duplicate storm
pas encore de nouveaux compteurs publics source_total/source_active/source_failed
```
Les coordinators d'hydration des sources reference-bearing restent donc source-local pendant cette tranche. La borne absolue reste finie par source et par nombre de sources ; la borne globale/coalescence prévue par l'architecture sera fermée en `pre.008/pre.009` avant la release stable.
## 61. Gate opérateur requis avant pre.008
```bash
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
cargo check --workspace
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo test -p ksp-onchain-transport-lib
cargo test -p ksp-worker-raw-transaction-ingest-lib
cargo tree -p ksp-worker-raw-transaction-ingest-lib --edges normal
cargo tree -p ksp-worker-raw-transaction-ingest-lib -e features
cargo tree --duplicates
```