v0.3.13-pre.002

This commit is contained in:
2026-09-10 09:50:42 +02:00
parent ee0359efd5
commit 793178b345
15 changed files with 976 additions and 41 deletions

View File

@@ -1,11 +1,11 @@
<!-- file: docs/validation/030-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE.md -->
<!-- version: 1 -->
<!-- version: 2 -->
# Validation v0.3.13 — WS standard / Helius / HTTP live + convergence multi-source
## 1. Rôle
Ce document enregistre les preuves réellement exécutées et les non-claims de `0.3.13`. `pre.001` est exclusivement un gate d'archive, règles, audit, brainstorming, sizing et planification ; aucune nouvelle source live productive n'est codée dans cette tranche.
Ce document enregistre les preuves réellement exécutées et les non-claims de `0.3.13`. `pre.001` ferme l'audit/planification ; `pre.002` matérialise la composition runtime multi-source et l'identité logique sans activer encore la supervision simultanée ni une nouvelle famille de source productive.
## 2. Archive stable contrôlée
@@ -492,3 +492,169 @@ cargo tree -p ksp-worker-raw-transaction-ingest-lib -e features
```
`pre.002` ne doit pas commencer si cette livraison révèle une anomalie de règles/version/archive non corrigée.
## 21. Gate opérateur pre.001 reçu avant pre.002
Le journal opérateur du 10 septembre 2026 sur `0.3.13-pre.1` montre :
```text
cargo fmt --all -- --check : PASS
General Rust rule audit : clean
Rust export completeness audit : 0 candidate
KSP workspace Rust rule audit : clean
Markdown table audit : clean (340 tables, 828 files)
cargo check --workspace : PASS
cargo clippy --workspace --all-targets --all-features -- -D warnings : PASS
cargo test -p ksp-worker-raw-transaction-ingest-lib : PASS
cargo tree Worker --edges normal : produit
cargo tree Worker -e features : produit
cargo tree --duplicates : produit
```
Suites Worker affichées :
```text
unit : 66 pass
cross_layer_completeness : 4 pass
dependency_boundary : 9 pass
hardening : 16 pass
public_api : 9 pass
release_completeness : 4 pass
doc-tests : 0
```
Le gate `pre.001 -> pre.002` est donc satisfait.
## 22. Implémentation pre.002
`pre.002` ajoute dans le Worker :
```text
MAX_RAW_TRANSACTION_INGEST_LIVE_SOURCES = 32
collection privée Vec<RawTransactionIngestLiveSource>
discriminant privé capability-owned : Yellowstone
source_count public source-neutral
try_push_yellowstone_source transactionnel
validation réseau globale
rejet duplicate logical source identity
rejet > 32
rejet cross-network
```
L'identité Yellowstone est calculée sans URL/credential/payload distant :
```text
KSP source-key domain
source family = yellowstone
network
safe provider identity
safe endpoint identity
commitment
opaque deterministic Yellowstone Subscribe request identity
SHA-256 -> [u8; 32]
```
Le rôle/pool HTTP d'hydration n'entre volontairement pas dans cette identité : il qualifie la stratégie d'enrichissement d'un signal, pas l'identité de la source live Yellowstone. Deux subscriptions Yellowstone identiques ne peuvent donc pas contourner le rejet de doublon en changeant uniquement de rôle HTTP.
Transport fournit l'identité de requête sous `YellowstoneSubscribeRequestIdentity` : les sept familles de filtres sont encodées séparément dans l'ordre canonique des noms de `BTreeMap`, avec leur protobuf exact, puis les options communes sont encodées avec les maps vidées. Les bytes restent privés ; `Debug` n'expose que leur longueur et l'API ne fournit aucun getter des bytes.
Aucune nouvelle dépendance n'est ajoutée : Transport réutilise le `prost` réexporté par `yellowstone-grpc-proto` déjà présent.
## 23. Gate d'activation multi-source pre.002
Le modèle final `0.3.13` exige le démarrage simultané de toutes les sources configurées, mais le supervisor/source inventory appartient explicitement à `pre.007`.
Décision de sûreté pour `pre.002` :
```text
1 source Yellowstone : voie productive 0.3.12 conservée
2..32 sources validées : composition acceptée
start avec 2..32 sources : erreur stable avant spawn
aucun démarrage silencieux d'un sous-ensemble
aucune nouvelle famille de source productive
```
Condition d'erreur interne :
```text
runtime_resources.multi_source_activation_pending
```
Cette barrière sera retirée uniquement lorsque `pre.007` possédera le supervisor simultané et ses preuves de stop/fault/join.
## 24. Preuves déterministes ajoutées pre.002
Transport :
```text
request identity stable malgré ordre d'insertion des filtres
request identity change si le contenu logique du filtre change
Debug de l'identité ne révèle pas les noms de filtres
surface publique identité disponible via crate root
absence de bytes/as_bytes escape hatch
```
Worker :
```text
source_key stable pour même source logique
source_key change si request fingerprint ou endpoint-safe identity change
exactement 32 sources acceptées
33e source rejetée transactionnellement
duplicate logical identity rejeté
cross-network source rejetée
Debug runtime resources = source_count seulement
multi-source start fail-closed avant supervisor tranche
surface publique = bound + count + push capability-specific, sans source_key public
```
## 25. Validations locales post-modification pre.002
Le toolchain Cargo/Rustfmt reste indisponible dans l'environnement d'assemblage. Les validations Cargo ci-dessous devront donc être exécutées par l'opérateur avant `pre.003` et ne sont pas déclarées PASS localement.
Résultat après toutes les modifications de la tranche :
```text
General Rust rule audit : clean
Rust export completeness audit : 0 candidate
KSP workspace Rust rule audit : clean
Markdown table audit : clean (340 tables, 829 files)
normative rule definitions : 489 / 489 uniques / 0 duplicate definition id
```
## 26. Non-claims pre.002
`pre.002` ne prétend pas :
```text
avoir ajouté logsSubscribe productif
avoir ajouté blockSubscribe productif
avoir ajouté Helius transactionSubscribe productif
avoir ajouté HTTP block polling productif
avoir démarré plusieurs sources simultanément
avoir déplacé le coordinator Yellowstone vers le niveau Worker global
avoir implémenté observation fanout multi-source
avoir modifié Common RAW ou Store API
avoir ajouté une dépendance externe
avoir exécuté Cargo localement
```
## 27. Gate opérateur requis avant pre.003
Après application du delta :
```bash
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
```
`pre.003` ne doit pas commencer si cette livraison révèle une anomalie de règles, API, version, archive ou dépendance non corrigée.