v0.3.13-pre.005

This commit is contained in:
2026-09-10 15:01:00 +02:00
parent 27ab84d198
commit 11ecdccd65
13 changed files with 1524 additions and 27 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/034-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE_PLAN.md -->
<!-- version: 4 -->
<!-- version: 5 -->
# Plan v0.3.13 — WS standard / Helius / HTTP live + convergence multi-source RawTransaction
@@ -827,7 +827,7 @@ Source block, projection full/base64, qualification Legacy/V0/V1, `block:null` e
### pre.005 — Helius transactionSubscribe
Source Helius, max version 1, hydration, Config uniquement si réellement requis, tests redaction/tier non codé.
Source Helius `transactionSubscribe` Full/Base64, max version 1, projection référence signature/slot/index, hydration commune, Config uniquement si réellement requis, tests redaction/tier non codé.
### pre.006 — HTTP live block polling
@@ -903,3 +903,143 @@ historical replay/backfill
EARLY feeds
consumer Desk 0.3.15
```
## 43. Gate opérateur pre.004-fix.001 reçu avant pre.005
Le gate opérateur communiqué le 10 septembre 2026 est vert après `pre.004-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 / 836 files
cargo check --workspace : PASS
cargo clippy --workspace --all-targets --all-features -- -D warnings : PASS
worker unit : 79/79 PASS
cross_layer_completeness : 4/4 PASS
dependency_boundary : 11/11 PASS
hardening : 18/18 PASS
public_api : 12/12 PASS
release_completeness : 4/4 PASS
doc-tests Worker : 0/0 PASS
```
Cette preuve ferme `pre.004-fix.001` et autorise la tranche Helius.
## 44. Implémentation pre.005 — Helius transactionSubscribe + hydration
`pre.005` ajoute `RawTransactionIngestHeliusTransactionSource` à l'agrégat borné existant. La construction sans I/O reçoit :
```text
WsEndpointSettings kind helius_laserstream
HeliusTransactionSubscribeFilter
SolanaCommitment Confirmed ou Finalized
HttpTransportPool
HttpRoleName hydration
```
Le Worker construit la requête provider à partir des types Transport existants avec :
```text
encoding = Base64
transactionDetails = Full
showRewards = false
maxSupportedTransactionVersion = 1
```
`HeliusLaserStreamWsSession::connect` et `transaction_subscribe` restent les seules primitives WebSocket utilisées ; aucun SDK provider, socket parallèle ou accès Config n'est ajouté.
## 45. Projection Helius et convergence Common RAW
Bien que la notification `Full` contienne un nested payload transaction provider, `pre.005` ne le traite pas comme Common RAW directement. Le signal privé Worker conserve seulement :
```text
network
signature
slot
transaction_index
commitment via hydration context
safe route identity
private filter fingerprint
```
Puis le coordinateur source-neutral existant exécute `getTransaction observed` en `Base64` et `maxSupportedTransactionVersion = 1`. Le même pipeline de canonicalisation/admission est donc utilisé par Yellowstone, Standard Logs et Helius.
Une notification Helius qui n'est pas `Full` malgré la requête `Full` devient `source.helius_transaction_notification_unqualified`. Aucun `Signature`/`Unknown` inattendu n'est transformé en succès silencieux.
## 46. Identité, secrets, Config et tier Helius
La clé live logique Helius est dérivée de :
```text
domain KSP live source key
family = helius_transaction
network
safe provider identity
safe endpoint identity
commitment
private normalized filter fingerprint
SHA-256 -> [u8; 32]
```
Les listes de pubkeys Helius sont normalisées avant hash afin qu'une permutation de listes sémantiquement ensemblistes ne contourne pas la détection de doublon. Signature exacte, pubkeys et mode tokenAccounts participent à l'empreinte privée mais ne sont pas rendus par `Debug`.
Le rôle/pool HTTP reste exclu de l'identité live comme pour Standard Logs et Yellowstone. Les profils Config Helius Mainnet/Devnet et `KSP_SECRET_HELIUS_API_KEY` existent déjà dans la base ; aucun changement Config ni `.env` n'est requis pour cette tranche. Aucun tier `Developer`, `Business`, quota ou politique payante n'est codé dans le Worker.
## 47. Preuves déterministes pre.005
Les preuves ajoutées couvrent :
```text
validation endpoint Helius / commitment / route HTTP
requête Full + Base64 + maxSupportedTransactionVersion=1 + showRewards=false
source_key filter-sensitive, order-normalized et hydration-role-neutral
Debug redacted : signature/pubkeys/URL/API key/source key absents
projection Full -> signature/slot/index uniquement
Helius reference -> one getTransaction observed -> Common RAW exact
provenance protocol helius_ws_http + transaction_get_transaction
rejet duplicate Helius source identity
public API root + composition aggregate
firewall Transport-only + un seul get_transaction_observed
hardening payload nested non copié + tier provider non codé
```
La supervision simultanée reste volontairement différée à `pre.007` : une collection de plusieurs sources est composable/validable mais échoue fermée avant spawn.
## 48. Non-claims pre.005
`pre.005` ne prétend pas :
```text
avoir activé plusieurs sources simultanément
avoir ajouté HTTP live polling
avoir utilisé le nested payload Helius comme Common RAW direct
avoir ajouté un SDK Helius
avoir ajouté ou lu un secret dans le Worker
avoir codé un tier/quota/prix provider
avoir ajouté un nouveau profil Config
avoir modifié Transport
avoir exécuté Cargo localement après modification dans l'environnement d'assemblage
```
## 49. Gate opérateur requis avant pre.006
Après application du delta :
```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
```
`pre.006` ne commence pas tant qu'une anomalie de format, règle, compilation, test ou frontière de dépendances subsiste.