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
```

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/030-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE.md -->
<!-- version: 6 -->
<!-- version: 7 -->
# Validation v0.3.13 — WS standard / Helius / HTTP live + convergence multi-source
@@ -1155,3 +1155,90 @@ cargo tree -p ksp-worker-raw-transaction-ingest-lib -e features
cargo tree --duplicates
```
## 57. Gate opérateur pre.006-fix.001 reçu
Preuve communiquée le 10 septembre 2026 sur les commandes exécutées :
```text
fmt : PASS
audits Rust : clean / export completeness 0
Markdown : clean, 340 tables / 840 files
cargo check --workspace : PASS
clippy workspace all-targets all-features -D warnings : PASS
worker unit : 88/88 PASS
cross-layer : 4/4 PASS
dependency boundary : 13/13 PASS
hardening : 20/20 PASS
public API : 14/14 PASS
release completeness : 4/4 PASS
```
Les sorties Transport ciblées et `cargo tree` demandées dans le gate complet ne figurent pas dans le log reçu et ne sont donc pas déclarées PASS.
## 58. Surface pre.007 matérialisée
```text
RawTransactionIngestRuntimeResources::run_live_sources
RawTransactionIngestSourceInventory privé
RawTransactionIngestSourceInventoryPublisher privé
JoinSet privé 1..32 sources
stop fanout privé
drain/join de toutes les sources
projection processing frontier agrégée
suppression de multi_source_activation_pending
```
Aucune nouvelle API publique n'est nécessaire : les méthodes `from_*`, `try_push_*`, `source_count` et `start_with_runtime_resources` existantes suffisent à composer puis lancer plusieurs sources.
## 59. Invariants supervisor/source inventory vérifiés statiquement
La tranche exige :
```text
1..32 sources validées avant run
toutes les sources présentes sont spawnees
aucun sous-ensemble silencieux
aucune politique primary/standby/fallback
une source fautive arrête les autres et le supervisor les join
une fermeture source avant stop est terminale
source_key reste privée
inventaire borné initialisé depuis les source_key validées
frontier globale conservatrice = minimum seulement si toutes les sources ont une frontier
oldest pending global = minimum
état source agrégé sans provider material
```
Les tests déterministes ajoutés utilisent des tasks factices pour prouver le join de trois sources au stop et le stop/join d'une sœur après faute, sans I/O réseau.
## 60. Validation locale d'assemblage pre.007
Le toolchain Cargo/Rustfmt n'est pas disponible dans l'environnement d'assemblage. Les commandes Cargo post-modification restent `NON EXÉCUTÉ LOCAL`; seuls les audits statiques effectivement exécutés sont déclarés PASS dans le delta.
## 61. Non-claims pre.007
```text
pas de coalescence cross-source complète avant pre.008
pas d'unique hydration globale cross-source garantie avant pre.008
pas d'observations Store multiples convergées avant pre.008
pas de fairness duplicate-storm fermée avant pre.009
pas de nouveaux compteurs/health publics multi-source avant pre.010
pas de failover/degraded non-terminal d'une source
pas de preuve de coverage entre sources
```
## 62. 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
```