v0.3.12-pre.003

This commit is contained in:
2026-09-09 07:39:42 +02:00
parent 91438e8214
commit fa720d0054
9 changed files with 898 additions and 16 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/029-V0_3_12_YELLOWSTONE_HYDRATION_CONTINUITY.md -->
<!-- version: 2 -->
<!-- version: 3 -->
# Validation v0.3.12 — Yellowstone + hydration HTTP + continuité de run du Worker RawTransaction
@@ -648,3 +648,134 @@ réconcilié README/USAGE/architecture pour la surface finale 0.3.12
La tranche suivante reste `pre.003` : adaptation déterministe `Transaction` + `TransactionStatus` vers le signal Worker privé, sans HTTP ni persistence réseau.
## 27. Gate opérateur reçu pour `pre.002`
L'opérateur a exécuté après application de `pre.002` :
```text
cargo fmt --all : sans erreur visible
audit Rust : clean
Rust export completeness : 0 candidate
KSP workspace Rust rule audit : clean
audit Markdown : clean (340 tables, 802 fichiers)
cargo check --workspace : PASS visible
cargo clippy --workspace --all-targets --all-features -- -D warnings : PASS visible
cargo test -p ksp-worker-raw-transaction-ingest-lib : 41 PASS, 0 fail
cargo tree Worker normal : exécuté et inspecté
cargo tree Worker features : exécuté et inspecté
cargo tree --duplicates : exécuté ; inventaire informatif des versions dupliquées, sans gate d'unicité artificiel
```
Le graphe confirme que le Worker possède directement uniquement l'edge `ksp-onchain-transport-lib`; `reqwest`, `tonic`, `tonic-prost` et `yellowstone-grpc-proto` restent transitifs sous Transport.
Résultat : `pre.002` est accepté comme base technique de `pre.003`.
## 28. Gate `pre.003` — signal privé Transaction + TransactionStatus
La tranche matérialise :
```text
workspace.package.version = 0.3.12-pre.3
projection Yellowstone Transaction -> signal Worker privé
projection Yellowstone TransactionStatus -> même signal Worker privé
aucune ouverture de stream
aucune hydration HTTP
aucune persistence réseau
```
Le signal reste strictement interne à `runtime_resources.rs` et n'est ni `pub`, ni `pub(crate)`, ni réexporté au crate-root.
Sa forme source-neutral actuelle est :
```text
network
signature RawTransactionSignature
slot
transaction_index optionnel
source family Transaction | TransactionStatus
safe Yellowstone source route provider + endpoint_id
matched_filter_count
matched_filter_fingerprint SHA-256 déterministe
created_at source-neutral optionnel seconds+nanos
```
Aucun transaction body, meta Yellowstone, `is_vote`, remote error ou payload provider n'est conservé dans ce signal.
## 29. Projection déterministe des filtres et de la route
Les filter names Yellowstone sont consommés uniquement pour produire un fingerprint Worker-owned. Le calcul :
```text
domain = ksp.raw_transaction_ingest.yellowstone.filters.v1\0
tri lexical des noms
suppression des doublons
nombre de noms uniques encodé u64 big-endian
pour chaque nom : longueur u64 big-endian + bytes UTF-8
SHA-256 final
```
Le signal conserve séparément le nombre de matches reçu afin de ne pas confondre le fingerprint canonique de l'ensemble et la cardinalité de l'enveloppe reçue.
La source valide aussi dès sa construction que :
```text
cluster Yellowstone -> RawNetworkId représentable
provider Yellowstone -> RawProvenanceCode représentable
endpoint logical name Yellowstone -> RawProvenanceCode représentable
```
Une identité non représentable est rejetée par une condition Worker stable plutôt que tronquée. Cette fermeture prépare la provenance composite de `pre.004` sans modifier Store.
## 30. Canaris déterministes `pre.003`
Les nouvelles preuves couvrent :
```text
fixture Transaction : signature/slot/index/network/route/timestamp exacts
fixture TransactionStatus : même forme sans payload ni remote error
fingerprint golden exact
fingerprint indépendant de l'ordre et des doublons de filter names
Debug du signal sans filter name, signature brute, payload ou remote error
provider/endpoint Yellowstone non représentables rejetés
adapters réels typés YellowstoneTransactionUpdate / YellowstoneTransactionStatusUpdate présents
TransactionStatus.error non consulté par l'adapter
signal absent de la façade publique
aucun open_standard_subscribe / next_update / get_transaction_observed
aucun backend Store / reqwest / tonic / proto direct ajouté
```
La tranche ne modifie pas le graphe Cargo du Worker au-delà de celui déjà accepté en `pre.002`.
## 31. Validation locale et non-claims `pre.003`
Exécuté dans l'environnement d'assemblage après les modifications Rust :
```text
python3 scripts/audit_rust_workspace_rules.py
General Rust rule audit: clean
Rust export completeness audit: 0 candidate(s)
KSP workspace Rust rule audit: clean
```
L'audit Markdown est rejoué après création du delta final.
`cargo`, `rustc` et `rustfmt` ne sont pas disponibles dans l'environnement d'assemblage ; aucun gate Cargo local n'est inventé.
`pre.003` ne prétend pas avoir :
```text
ouvert une session Yellowstone
consommé une update depuis un réseau live
appelé getTransaction
créé une RawTransactionMaterial depuis le réseau
assemblé la provenance composite Yellowstone + HTTP
persisté une transaction issue de Yellowstone
coalescé les hydrations
traité Block / BlockMeta / Slot
modifié la processing frontier
branché from_slot / ReplayInfo
exécuté un smoke live Worker
```
La tranche suivante reste `pre.004` : fermeture déterministe `signal -> get_transaction_observed -> Common RAW -> ingress` avec missing/mismatch et provenance composite, sans Block ni continuité/replay.