v0.3.13-pre.003

This commit is contained in:
2026-09-10 11:38:34 +02:00
parent 2e8feb56dd
commit f7ed053e8e
14 changed files with 1503 additions and 146 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/034-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE_PLAN.md -->
<!-- version: 2 -->
<!-- version: 3 -->
# Plan v0.3.13 — WS standard / Helius / HTTP live + convergence multi-source RawTransaction
@@ -460,6 +460,26 @@ Hydration retry/rate limit : Transport HTTP.
Preuve : fixture logs notification -> une seule hydration -> exact Common RAW golden ; mentions/all/allWithVotes ; stop/reconnect/backpressure ; redaction des logs.
### 13.1 Décisions matérialisées en pre.003
La tranche conserve la barrière dactivation simultanée de `pre.002` : une source unique Yellowstone ou Standard Logs est productive ; une collection `2..32` reste rejetée avant spawn jusquau supervisor `pre.007`. Il nest donc pas créé de supervisor provisoire qui ignorerait une partie de la configuration.
Le coordinateur dhydration Yellowstone devient un contrat privé source-neutral réutilisé par Standard Logs. Pour cette tranche, chaque exécution mono-source en possède une instance ; la possession réellement globale entre plusieurs sources narrive quavec le supervisor `pre.007`. Cette distinction corrige le raccourci de wording « coordinator global » du sizing initial sans modifier lobjectif de convergence.
Bornes retenues :
```text
hydration in-flight <= persistence_concurrency
pending source signals <= admission_queue_capacity
aucune queue Worker non bornée
```
Le `getTransaction observed` commun passe à `maxSupportedTransactionVersion = 1` pour Yellowstone comme pour Standard Logs. Cela ne déclare aucun chemin RAW-direct V1 ; il sagit uniquement de rendre lhydration HTTP version-aware conformément au contrat `0.3.13`.
Pour Standard Logs, lidentité logique inclut le réseau, la famille `standard_logs`, lidentité provider/endpoint sûre, le commitment et lempreinte privée du filtre. Le rôle/pool HTTP dhydration nentre pas dans cette identité. Les variantes `All`, `AllWithVotes` et `Mentions(pubkey)` sont distinguées sans recopier le pubkey dans `Debug`, snapshot ou diagnostics.
Les valeurs `logs` et `err` de la notification restent entièrement dans Transport : le Worker ne projette que `context.slot` et `signature`.
## 14. Contrat source WS standard blockSubscribe
Entrée caller-composed :
@@ -776,7 +796,7 @@ Collection bornée 1..32, source key, discriminants capability-owned, validation
### pre.003 — WS standard logsSubscribe + hydration
Source logs, signal privé, intégration coordinator global et hydration observed.
Source logs, signal privé, réutilisation du coordinator dhydration source-neutral et hydration observed ; activation simultanée toujours différée à pre.007.
### pre.004 — WS standard blockSubscribe

View File

@@ -1,11 +1,11 @@
<!-- file: docs/validation/030-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE.md -->
<!-- version: 2 -->
<!-- version: 3 -->
# 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` 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.
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 `pre.003` ajoute la source productive Standard Solana `logsSubscribe` + hydration HTTP observée, sans activer encore la supervision simultanée.
## 2. Archive stable contrôlée
@@ -658,3 +658,156 @@ 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.
## 28. Gate opérateur pre.002-fix.001 reçu avant pre.003
Le correctif de format `0.3.13-pre.002-fix.001` a été validé par lopérateur après `cargo clean` :
```text
cargo fmt --all : PASS
cargo fmt --all -- --check : PASS, silencieux
General Rust rule audit : clean
Rust export completeness audit : 0 candidate
KSP workspace Rust rule audit : clean
Markdown table audit : clean (340 tables, 830 files)
cargo check --workspace : PASS
clippy workspace/all-targets/all-features -D warnings : PASS
ksp-onchain-transport-lib unit tests : 389 pass
transport public_api : 52 pass
transport release_completeness : 44 pass
transport doc-tests : 4 pass
live transport smokes : ignored opt-in, comme prévu
ksp-worker-raw-transaction-ingest-lib unit tests : 70 pass
cross_layer_completeness : 4 pass
dependency_boundary : 9 pass
hardening : 16 pass
public_api : 10 pass
release_completeness : 4 pass
worker doc-tests : 0
```
Le gate `pre.002-fix.001 -> pre.003` est satisfait.
## 29. Implémentation pre.003 — Standard Logs + hydration
`pre.003` ajoute `RawTransactionIngestStandardLogsSource`, construite exclusivement à partir de surfaces Transport déjà publiques :
```text
WsEndpointSettings kind solana_standard
SolanaLogsSubscribeFilter
SolanaCommitment Confirmed ou Finalized
HttpTransportPool
HttpRoleName hydration
```
La construction reste sans I/O et valide avant spawn : endpoint/protocole, commitment, réseau, provenance sûre et existence dune route `getTransaction` compatible sur le même cluster. Aucun endpoint URL, filtre brut, credential ou client inférieur nest exposé par lAPI Worker.
Au runtime :
```text
SolanaStandardWsSession::connect
-> logs_subscribe
-> context.slot + signature seulement
-> coordinator dhydration Worker source-neutral
-> get_transaction_observed
encoding = base64
maxSupportedTransactionVersion = 1
-> Common RAW
-> admission centrale existante
-> Store
```
`logs` et `err` ne sont jamais copiés dans le signal Worker. Le reconnect, le resubscribe et le backpressure de la subscription restent possédés par le même acteur WebSocket Transport. Retry/reroutage/rate-limit HTTP restent possédés par Transport.
La voie Yellowstone réutilise le même contrat dhydration source-neutral et passe elle aussi à `maxSupportedTransactionVersion = 1`; aucune nouvelle queue, aucun second client HTTP et aucun acteur WebSocket Worker ne sont introduits.
## 30. Identité et bornes pre.003
Lidentité logique Standard Logs est déterministe et opaque :
```text
domain KSP live source key
family = standard_logs
network
safe provider identity
safe endpoint identity
commitment
private filter fingerprint
SHA-256 -> [u8; 32]
```
Le rôle/pool HTTP dhydration est volontairement exclu de lidentité live. Les trois variantes `All`, `AllWithVotes`, `Mentions(pubkey)` produisent des empreintes distinctes ; la valeur dun pubkey `Mentions` napparaît pas dans `Debug`.
Les bornes du coordinator sont maintenant alignées sur les settings effectifs :
```text
in-flight hydration <= persistence_concurrency
pending source signals <= admission_queue_capacity
```
Une activation mono-source Yellowstone ou Standard Logs est autorisée. Une composition `2..32` reste validable mais son démarrage demeure `runtime_resources.multi_source_activation_pending` avant spawn jusquà `pre.007`.
## 31. Preuves déterministes ajoutées pre.003
Worker unit tests ajoutés :
```text
validation protocole/commitment/route HTTP Standard Logs
source_key filter-sensitive et hydration-role-neutral
redaction Mentions/URL/source-key bytes
projection reference-only slot/signature
fixture logs -> une hydration HTTP -> exact matériau Common RAW
requête getTransaction = base64 + maxSupportedTransactionVersion 1
rejet duplicate Standard Logs identity
```
Canaris externes ajoutés/étendus :
```text
public_api : construction et composition Standard Logs depuis crate root
dependency_boundary : Transport facade only, sans Config/Job/backend/direct network crate
hardening : aucune copie logs/err/payload/url, Debug borné
release_completeness : nouvelle surface et nouveaux canaris obligatoires
```
Les preuves de reconnect/resubscribe/backpressure restent celles de `ksp-onchain-transport-lib`, car le Worker délègue ces mécanismes au `SolanaStandardWsSession` existant plutôt que de les réimplémenter.
## 32. Validations locales post-modification pre.003
Le toolchain Cargo/Rustfmt nest pas disponible dans lenvironnement dassemblage. Les commandes Cargo post-`pre.003` sont donc `NON EXÉCUTÉ LOCAL` et devront être confirmées par lopérateur.
Les audits statiques réellement exécutés sont consignés dans `deltas/0.3.13/pre.003.md`.
## 33. Non-claims pre.003
`pre.003` ne prétend pas :
```text
avoir ajouté blockSubscribe productif
avoir ajouté Helius transactionSubscribe productif
avoir ajouté HTTP live polling
avoir activé plusieurs sources simultanément
avoir implémenté le fanout dobservations Store multi-source
avoir rendu le coordinator partagé entre plusieurs tâches source simultanées
avoir ajouté du gap repair ou du backfill
avoir ajouté une dépendance réseau directe au Worker
avoir exécuté Cargo localement après modification
```
## 34. Gate opérateur requis avant pre.004
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.004` ne doit pas commencer si une anomalie de format, règle, compilation, API, dépendance ou test apparaît.