v0.3.13-pre.007
This commit is contained in:
218
deltas/0.3.13/pre.007.md
Normal file
218
deltas/0.3.13/pre.007.md
Normal file
@@ -0,0 +1,218 @@
|
||||
<!-- file: deltas/0.3.13/pre.007.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta 0.3.13-pre.007 — supervision et inventaire multi-source
|
||||
|
||||
## Base requise
|
||||
|
||||
```text
|
||||
livraison précédente : 0.3.13-pre.006-fix.001
|
||||
Cargo base : 0.3.13-pre.6.fix.1
|
||||
delta base : deltas/0.3.13/pre.006-fix.001.md
|
||||
archive delta base : ksp-general-0.3.13-pre.006-fix.001.zip
|
||||
```
|
||||
|
||||
Le gate opérateur communiqué le 10 septembre 2026 est vert sur toutes les commandes exécutées : `cargo fmt`, `cargo fmt --check`, audits Rust/Markdown, `cargo check --workspace`, Clippy strict et toutes les suites de `ksp-worker-raw-transaction-ingest-lib` (`88` unit, `4` cross-layer, `13` dependency-boundary, `20` hardening, `14` public-api, `4` release-completeness, `0` doc-test). Le log reçu ne contient pas les sorties séparées `cargo test -p ksp-onchain-transport-lib` ni les trois commandes `cargo tree`; elles ne sont donc pas déclarées PASS dans ce delta.
|
||||
|
||||
## Objectif
|
||||
|
||||
Activer réellement la collection `1..32` déjà composable depuis `pre.002` :
|
||||
|
||||
```text
|
||||
RawTransactionIngestRuntimeResources
|
||||
-> validation complète réseau / doublons / borne
|
||||
-> spawn de toutes les sources configurées
|
||||
-> inventaire privé source_key -> latest state/frontier
|
||||
-> projection frontier source-neutral agrégée
|
||||
-> terminalité conservatrice si une source disparaît ou échoue
|
||||
```
|
||||
|
||||
Aucun provider n'est traité comme primaire, fallback ou standby.
|
||||
|
||||
## Version
|
||||
|
||||
```text
|
||||
livraison : 0.3.13-pre.007
|
||||
workspace.package.version : 0.3.13-pre.7
|
||||
archive : ksp-general-0.3.13-pre.007.zip
|
||||
```
|
||||
|
||||
`Cargo.toml` passe de la version de fichier `551` à `552`.
|
||||
|
||||
## Supervisor multi-source
|
||||
|
||||
`RawTransactionIngestWorker::start_with_runtime_resources` ne vérifie plus `validate_single_source_activation`. Après validation du réseau, le runtime délègue à `RawTransactionIngestRuntimeResources::run_live_sources`.
|
||||
|
||||
Le supervisor privé :
|
||||
|
||||
```text
|
||||
crée un stop channel source-owned
|
||||
crée un JoinSet borné par la collection 1..32
|
||||
spawn chaque source configurée exactement une fois
|
||||
clone uniquement les handles nécessaires
|
||||
rejoint toutes les tasks avant de rendre son résultat
|
||||
```
|
||||
|
||||
La vieille erreur `runtime_resources.multi_source_activation_pending` disparaît du code production.
|
||||
|
||||
## Terminalité conservatrice
|
||||
|
||||
La politique reste fail-closed :
|
||||
|
||||
```text
|
||||
stop Worker
|
||||
-> fanout stop vers toutes les sources
|
||||
-> join complet
|
||||
-> Ok seulement si les sources ferment sans erreur
|
||||
|
||||
source Err
|
||||
-> stop immédiat des autres sources
|
||||
-> join complet
|
||||
-> faute source terminale
|
||||
|
||||
source Ok avant stop Worker
|
||||
-> fermeture inattendue d'une source configurée
|
||||
-> stop des autres sources
|
||||
-> faute terminale
|
||||
|
||||
JoinError
|
||||
-> faute terminale sûre
|
||||
```
|
||||
|
||||
Le Worker ne suppose pas qu'une autre source couvre les mêmes filtres, le même provider universe ou la même complétude.
|
||||
|
||||
## Inventaire privé et processing frontier
|
||||
|
||||
`RawTransactionIngestSourceInventory` et `RawTransactionIngestSourceInventoryPublisher` restent privés au module runtime resources. L'inventaire est initialisé depuis les `source_key` déjà validées et possède exactement une entrée latest-value par source du run.
|
||||
|
||||
Chaque source conserve son propre publisher local. Un wrapper privé reporte ses projections dans l'inventaire puis publie une projection globale conservative :
|
||||
|
||||
```text
|
||||
hydration_pending : somme saturante temporaire des sources
|
||||
oldest_pending_slot : minimum global
|
||||
processing_frontier_slot : None si une source n'a pas encore de frontier
|
||||
sinon minimum de toutes les frontiers
|
||||
source_state : Failed > Reconnecting > Closing > Active > Closed/None
|
||||
reconnect/replay/gap : agrégation saturante, jamais wrap arithmétique
|
||||
```
|
||||
|
||||
Le choix du minimum n'est pas une preuve de coverage blockchain. La frontier reste run-local et source-neutral.
|
||||
|
||||
## Propriété d'ownership
|
||||
|
||||
Les sources physiques continuent d'appartenir à leurs façades Transport existantes. Le Worker ne crée ni client reqwest, ni socket alternatif, ni SDK provider. Le supervisor ajoute uniquement l'ownership des tasks source et de leur lifecycle commun.
|
||||
|
||||
Une source qui termine avant le stop est explicitement marquée `Closed` ou `Failed` dans l'inventaire avant le résultat du supervisor. Les identités `source_key` restent privées et ne sont jamais projetées dans `RawTransactionIngestSnapshot` ou le crate root.
|
||||
|
||||
## Preuves ajoutées
|
||||
|
||||
Unit tests déterministes :
|
||||
|
||||
```text
|
||||
inventaire 2 sources : pending/frontier/state/counters agrégés conservativement
|
||||
stop supervisor : trois tasks source actives reçoivent le stop et sont toutes jointes
|
||||
source failure : la source sœur reçoit le stop et est jointe avant retour de faute
|
||||
```
|
||||
|
||||
Canaris externes :
|
||||
|
||||
```text
|
||||
dependency_boundary : run_live_sources, JoinSet, inventaire privé, vieille barrière absente
|
||||
hardening : stop/fault/join fail-closed, aucune policy primary/standby, aucun canal unbounded
|
||||
public_api : inventaire/live-source/source_key non exportés
|
||||
```
|
||||
|
||||
Les canaris historiques `0.3.12` qui cherchaient `run_single_live_source` sont mis à jour vers le supervisor multi-source au lieu d'être supprimés.
|
||||
|
||||
## Frontière de tranche
|
||||
|
||||
`pre.007` active la simultanéité, mais ne ferme pas encore la convergence transactionnelle cross-source :
|
||||
|
||||
```text
|
||||
pas de coalescence globale de la même signature entre plusieurs sources
|
||||
pas d'unique hydration cross-source garantie
|
||||
pas de fusion de plusieurs provenance/observation seeds vers une acquisition canonique unique
|
||||
pas encore de record_raw_transaction_observation pour les observations supplémentaires convergées
|
||||
pas encore de fairness durcie duplicate-storm
|
||||
pas encore de source_total/source_active/source_failed publics
|
||||
```
|
||||
|
||||
Les coordinators d'hydration des sources reference-bearing restent donc source-local pendant cette tranche. La fermeture de la coalescence globale et des observations multiples appartient à `pre.008`, puis les bornes/fairness renforcées à `pre.009`.
|
||||
|
||||
## Documentation
|
||||
|
||||
Le README du crate décrit désormais le supervisor 1..32, la terminalité conservative et la frontier agrégée. `USAGE.md` reste version-neutral et montre comment composer plusieurs sources via les `try_push_*` existants sans mentionner le numéro de prerelease.
|
||||
|
||||
Le plan et la validation consignent le gate opérateur réellement reçu et distinguent explicitement ce qui reste reporté à `pre.008+`.
|
||||
|
||||
## Fichiers modifiés
|
||||
|
||||
```text
|
||||
Cargo.toml
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/README.md
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/USAGE.md
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/src/runtime.rs
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/src/runtime_resources.rs
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/tests/dependency_boundary.rs
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/tests/hardening.rs
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/tests/public_api.rs
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/tests/release_completeness.rs
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/runtime_resources.rs
|
||||
docs/plans/034-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE_PLAN.md
|
||||
docs/validation/030-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE.md
|
||||
```
|
||||
|
||||
## Fichiers ajoutés
|
||||
|
||||
```text
|
||||
deltas/0.3.13/pre.007.md
|
||||
```
|
||||
|
||||
## Fichiers supprimés
|
||||
|
||||
```text
|
||||
aucun
|
||||
```
|
||||
|
||||
## Validation dans l'environnement d'assemblage
|
||||
|
||||
Le toolchain Rust/Cargo/Rustfmt n'est pas disponible dans l'environnement d'assemblage. Les commandes Cargo post-`pre.007` restent donc `NON EXÉCUTÉ LOCAL`. Les audits statiques KSP, le scan normatif, les versions de fichiers et le diff exhaustif sont exécutés sur l'état exact avant packaging.
|
||||
|
||||
## Résultats statiques finaux de l'assemblage
|
||||
|
||||
```text
|
||||
General Rust rule audit: clean
|
||||
Rust export completeness audit: 0 candidate(s)
|
||||
KSP workspace Rust rule audit: clean
|
||||
Markdown table audit: clean (340 tables, 841 files)
|
||||
Normative rule definitions: 489
|
||||
Unique normative IDs: 489
|
||||
Duplicates: 0
|
||||
```
|
||||
|
||||
Contrôle ciblé du supervisor :
|
||||
|
||||
```text
|
||||
ancienne barrière validate_single_source_activation : absente
|
||||
runtime_resources.multi_source_activation_pending : absent du code production
|
||||
inventaire source public : absent
|
||||
source_key public : absent
|
||||
unbounded_channel : absent
|
||||
nouvelle dépendance : aucune
|
||||
```
|
||||
|
||||
## 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
|
||||
```
|
||||
Reference in New Issue
Block a user