v0.3.13-pre.014

This commit is contained in:
2026-09-10 23:25:05 +02:00
parent cabbfed730
commit 71bc754feb
8 changed files with 315 additions and 52 deletions

View File

@@ -1,12 +1,12 @@
# file: Cargo.toml
# version: 562
# version: 563
[workspace]
resolver = "3"
members = ["crates/ksp-app-backfill-desk", "crates/ksp-app-config-desk", "crates/ksp-app-solprices-desk", "crates/ksp-app-store-desk", "crates/ksp-app-wallet-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-interface-lib", "crates/ksp-job-api", "crates/ksp-job-backfill-lib", "crates/ksp-logging-lib", "crates/ksp-offchain-transport-lib", "crates/ksp-onchain-transport-lib", "crates/ksp-program-api", "crates/ksp-raw-transaction-lib", "crates/ksp-store-api", "crates/ksp-store-lib", "crates/ksp-store-postgres-lib", "crates/ksp-wallet-lib", "crates/ksp-worker-api", "crates/ksp-worker-raw-transaction-ingest-lib"]
[workspace.package]
version = "0.3.13-pre.13"
version = "0.3.13-pre.14"
edition = "2024"
license = "MIT"
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"

78
deltas/0.3.13/pre.014.md Normal file
View File

@@ -0,0 +1,78 @@
<!-- file: deltas/0.3.13/pre.014.md -->
<!-- version: 1 -->
# Delta `0.3.13-pre.014`
## Nature
Réconciliation documentaire de la verticale live multi-source `RawTransaction` après fermeture technique/live de `pre.013`.
Aucun code Rust, test, dépendance, feature ou contrat public n'est modifié.
## Gate d'entrée confirmé
Le gate déterministe `pre.012` reste vert et les deux smokes live keyless exécutés sur `0.3.13-pre.013` passent explicitement :
```text
Solana HTTP Devnet : 1/1 PASS
Solana WebSocket Devnet : 1/1 PASS
```
Le contrôle post-smoke communiqué passe également fmt, audits Rust/Markdown, `cargo check --workspace` et Clippy strict.
## Réconciliation durable
Les documents suivants sont mis en cohérence avec l'état réellement livré :
```text
docs/architecture/004-COMPONENT_INVENTORY.md
docs/architecture/005-DEPENDENCY_GRAPH.md
docs/architecture/011-RAW_TRANSACTION_ACQUISITION.md
docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md
docs/plans/034-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE_PLAN.md
docs/validation/030-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE.md
```
Les corrections principales sont :
```text
Worker RAW documenté comme composition de 1..32 sources logiques sur un même réseau
cinq familles live : Yellowstone / Standard Logs / Standard Block / Helius Transaction / HTTP Block Polling
registry globale d'hydration pour Yellowstone / Standard Logs / Helius
Standard Block et HTTP Block Polling RAW-direct Legacy/V0/V1
blockSubscribe actuel avec maxSupportedTransactionVersion = 1
convergence canonique + observations multiples + disagreement explicite
backpressure/fairness et bornes globales source-neutral
health multi-source conservative et shutdown/races bornés
reports EARLY / coverage-equivalence / repair historique maintenus hors 0.3.13
```
`README.md`, `crates/ksp-worker-raw-transaction-ingest-lib/README.md` et `USAGE.md` ont été audités et sont déjà cohérents ; ils restent byte-identiques. `USAGE.md` reste version-neutral.
## Frontières
Cette tranche ne modifie pas :
```text
CHANGELOG.md
ROADMAP.md
prompt 0.3.14
code/test Rust
Cargo dependencies/features
deltas historiques
```
La préparation publication reste réservée à `pre.015`.
## Gate opérateur avant `pre.015`
```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
```
Aucun `cargo tree`, smoke live ou rerun exhaustif des tests n'est requis pour cette tranche strictement documentaire hors bump mécanique de prerelease.

View File

@@ -1,5 +1,5 @@
<!-- file: docs/architecture/004-COMPONENT_INVENTORY.md -->
<!-- version: 39 -->
<!-- version: 40 -->
# Inventaire initial des composants KSP
@@ -46,7 +46,7 @@ Ce document maintient l'inventaire synthétique des composants retenus ou presse
| Store Desk | `ksp-app-store-desk` | app | Implémenté | `0.3.8` | inspection RAW read-only Transaction/Account/Observation via façade Store |
| RAW transaction common | `ksp-raw-transaction-lib` | lib | Implémenté | `0.3.10` | canonicalisation/wire RAW Transaction v1 source-neutral partagé entre producteurs |
| Worker lifecycle | `ksp-worker-api` | API | Implémenté | `0.3.9` | lifecycle/health/progression génériques des services continus |
| RAW transaction worker | `ksp-worker-raw-transaction-ingest-lib` | worker/lib | Implémenté | `0.3.11`, live `0.3.12` | fondation + Yellowstone productif, hydration HTTP, frontier/reconnect run-local |
| RAW transaction worker | `ksp-worker-raw-transaction-ingest-lib` | worker/lib | Implémenté | `0.3.11``0.3.13` | fondation + 5 familles live, convergence multi-source, fairness, health et shutdown bornés |
| RAW ingest Desk | `ksp-app-raw-transaction-ingest-desk` | app | Retenu | `0.3.15` | choix/supervision dune ou plusieurs sources/méthodes sans réimplémenter le worker |
| STRUCTURAL job | nom à fixer | job/lib | Retenu | couche STRUCTURAL | normalisation Solana générique RAW -> STRUCTURAL bornée/rejouable |
| STRUCTURAL worker | nom à fixer | worker/lib | Retenu | fin couche STRUCTURAL | backlog RAW -> STRUCTURAL continu |

View File

@@ -1,5 +1,5 @@
<!-- file: docs/architecture/005-DEPENDENCY_GRAPH.md -->
<!-- version: 28 -->
<!-- version: 29 -->
# Graphe de dépendances KSP
@@ -419,10 +419,10 @@ Il remplit RAW et ne décode aucun programme. Il ne dépend pas de Config : la c
ksp-worker-api
-> ksp-core-lib
ksp-worker-raw-transaction-ingest-lib # fondation + première source live matérialisées
ksp-worker-raw-transaction-ingest-lib # fondation + acquisition live multi-source matérialisées
-> ksp-core-lib
-> ksp-logging-lib
-> ksp-onchain-transport-lib # Yellowstone subscribe + HTTP getTransaction observed
-> ksp-onchain-transport-lib # Yellowstone, WS standard/Helius et HTTP observed/polling
-> ksp-raw-transaction-lib
-> ksp-store-lib # default-features = false ; aucun backend imposé
-> ksp-worker-api
@@ -433,9 +433,9 @@ ksp-worker-control-lib # composant retenu, non matérialis
-> ksp-core-lib
```
`ksp-worker-api` est ouvert en `0.3.9` comme contrat générique de services continus et ne connaît ni Solana, ni Transport, ni Store, ni Tauri. `ksp-worker-raw-transaction-ingest-lib` est son premier consumer concret : sa fondation `0.3.11` possède admission/persistence/snapshots/shutdown ; l'extension live `0.3.12` ouvre l'edge direct vers `ksp-onchain-transport-lib` pour une source Yellowstone standard et l'hydration HTTP `getTransaction`. Config et le backend physique restent hors du Worker.
`ksp-worker-api` est ouvert en `0.3.9` comme contrat générique de services continus et ne connaît ni Solana, ni Transport, ni Store, ni Tauri. `ksp-worker-raw-transaction-ingest-lib` est son premier consumer concret : sa fondation `0.3.11` possède admission/persistence/snapshots/shutdown ; `0.3.12` ouvre la première verticale Yellowstone + hydration HTTP ; `0.3.13` matérialise la composition live multi-source. Config et le backend physique restent hors du Worker.
La verticale actuelle n'est ni « un worker WebSocket » ni un moteur historique : `RawTransactionIngestRuntimeResources` contient exactement une source Yellowstone validée, les signaux transactionnels sont hydratés par HTTP avant Common RAW, et `BlockMeta`/`Slot` restent continuity-only. Reconnect, `from_slot` et `SubscribeReplayInfo` restent propriétaires de Transport ; le Worker observe leur projection sûre et fault sur un gap de rétention prouvé sans appeler le Job Backfill. Les extensions multi-source restent ultérieures.
La verticale actuelle n'est ni « un worker WebSocket » ni un moteur historique : `RawTransactionIngestRuntimeResources` contient de `1` à `32` sources logiques validées d'un même réseau parmi cinq familles — Yellowstone, Standard WS `logsSubscribe`, Standard WS `blockSubscribe`, Helius `transactionSubscribe` et HTTP live block polling. Yellowstone, Standard Logs et Helius convergent vers une registry globale d'hydration HTTP `getTransaction`; Standard Block et HTTP Block Polling qualifient directement le wire Base64 Legacy/V0/V1 vers Common RAW. Toutes les acquisitions rejoignent la même admission/persistence, la convergence canonique `(network, signature)` et des observations distinctes par provenance. Reconnect, `from_slot` et `SubscribeReplayInfo` restent propriétaires de Transport ; le Worker observe leur projection sûre, conserve une processing frontier run-local, applique des bornes/fairness globales et fault sur un gap de rétention prouvé sans appeler le Job Backfill.
RAW worker puis STRUCTURAL worker sont introduits à la fin de leur couche respective, lorsque persistence/backlog sont disponibles. Le traitement RAW -> STRUCTURAL borné est porté par un STRUCTURAL job distinct du service continu. Les workers DECODED/DOMAIN sont introduits avec les groupes Program concernés plutôt que tous anticipés en bloc.

View File

@@ -1,5 +1,5 @@
<!-- file: docs/architecture/011-RAW_TRANSACTION_ACQUISITION.md -->
<!-- version: 13 -->
<!-- version: 14 -->
# Acquisition et alimentation `RawTransaction`
@@ -149,7 +149,7 @@ Il peut utiliser **HTTP, WS, Yellowstone gRPC, replay provider ou archive** si c
### 3.2 Worker Raw Transaction Ingest : acquisition continue start/stop
`ksp-worker-raw-transaction-ingest-lib` a pour rôle de **remplir continuellement Store à partir du moment où il est démarré**. Sa fondation runtime, l'admission, la canonicalisation Common RAW, la persistence et les snapshots sont complétés par une première source productive Yellowstone standard + hydration HTTP `getTransaction`.
`ksp-worker-raw-transaction-ingest-lib` a pour rôle de **remplir continuellement Store à partir du moment où il est démarré**. Sa fondation runtime, l'admission, la canonicalisation Common RAW, la persistence et les snapshots supportent désormais une composition live multi-source bornée de `1` à `32` sources logiques sur un même réseau.
Son contrôle métier V1 est volontairement court :
@@ -161,22 +161,33 @@ snapshot / notifications
Le caller ne lui fournit pas une signature, un `program_id`, une plage historique, une limite de campagne ou une requête de backfill. Les endpoints, réseaux, sources activées, capabilities et secrets proviennent de Config/composition, pas d'un payload métier de `start`.
Deux entrées publiques coexistent : `start` conserve la fondation sans source productive, tandis que `start_with_runtime_resources` lance une source Yellowstone supervisée. Le pipeline productif actuel est :
Deux entrées publiques coexistent : `start` conserve la fondation sans source productive, tandis que `start_with_runtime_resources` lance la collection de ressources live validée. Les cinq familles productives matérialisées sont :
```text
Yellowstone Transaction / TransactionStatus / Block
Standard WS logsSubscribe
Helius transactionSubscribe
-> signaux transactionnels source-neutral
-> coalescence bornée (network, signature, commitment)
-> registry globale d'hydration bornée (network, signature, commitment)
-> HTTP getTransaction observed
-> Common RAW
-> admission centrale
Standard WS blockSubscribe Full/Base64 Legacy|V0|V1
HTTP live block polling getSlot -> getBlocksWithLimit -> getBlock observed
-> qualification RAW directe Legacy|V0|V1
-> Common RAW
Toutes les voies
-> admission centrale bornée
-> convergence canonique (network, signature)
-> RawTransaction + observations de provenance distinctes
-> Store
Yellowstone BlockMeta / Slot
-> continuité run-local uniquement
```
La source est caller-composed : le Worker ne lit pas Config et ne reçoit pas de secret. `RawTransactionIngestRuntimeResources` contient actuellement exactement une source Yellowstone validée, pas encore une collection multi-source.
La composition est caller-owned : le Worker ne lit pas Config et ne reçoit pas de secret. `RawTransactionIngestRuntimeResources` accepte de `1` à `32` sources logiques d'un même réseau, refuse les identités source dupliquées et supervise toutes les sources simultanément. Une faute source reste terminale pour le Worker faute d'équivalence de coverage prouvée.
Il ne lance pas de campagne historique arbitraire.
@@ -253,7 +264,7 @@ Une source concrète peut fournir plusieurs capabilities. Une capability peut ê
| HTTP `getSlot` / `getFirstAvailableBlock` / `minimumLedgerSlot` | bornes de ledger | non | oui, continuité | oui, admission d'une campagne | aucune transaction directe |
| WS `logsSubscribe` | signature + logs | non | oui, discovery live + hydration | non pour historique pur | `mentions` standard limité à un pubkey |
| WS `signatureSubscribe` | statut d'une signature connue | non | oui, confirmation ciblée interne | possible pour une requête ciblée en attente | one-shot |
| WS `blockSubscribe` full/base64, legacy-v0 | bloc + transactions | oui, parité RAW v1 prouvée | oui, direct pour le sous-ensemble qualifié | non sans mécanisme de replay historique | méthode standard instable ; capability validator-dependent |
| WS `blockSubscribe` full/base64, Legacy/V0/V1 | bloc + transactions | oui, Legacy/V0/V1 qualifiés | oui, direct pour le sous-ensemble qualifié | non sans mécanisme de replay historique | méthode standard instable ; capability validator-dependent |
| Helius `transactionSubscribe` full/base64 | transaction + meta + signature/index | non sans hydration | oui, signal riche puis hydration HTTP | non comme source historique | absence de blockTime/version dans lenveloppe qualifiée |
| Yellowstone `transactions` | transaction exécutée + meta | oui | oui | oui si replay borné demandé/disponible | filters server-side |
| Yellowstone `blocks` avec transactions | bloc + transactions | oui | oui | oui si replay borné demandé/disponible | utile au live et au backfill |
@@ -274,15 +285,17 @@ Cette matrice est intentionnellement **usage-first**. HTTP n'est pas « Backfill
### 6.1 Acquisition directe
Sources capables de produire directement un matériau transactionnel complet :
Sources capables de produire directement un matériau transactionnel complet dans l'architecture générale :
```text
Yellowstone transactions
Yellowstone blocks avec transactions
WS blockSubscribe full/base64 legacy-v0 qualifié
Yellowstone transactions/blocks lorsque l'adapter choisi qualifie directement leur wire
WS blockSubscribe full/base64 Legacy/V0/V1 qualifié
HTTP getBlock full/base64 Legacy/V0/V1
provider stream compatible full transaction après parité prouvée
```
Dans le Worker V1 actuel, Yellowstone reste volontairement traité comme signal puis hydraté par HTTP `getTransaction` afin de conserver un seul chemin de canonicalisation productif pour cette famille. Les voies directes effectivement matérialisées dans le Worker sont Standard Block et HTTP Block Polling.
Chemin logique :
```text
@@ -567,7 +580,7 @@ Helius transactionSubscribe
Le runtime WS possède des queues bornées et une logique de reconnect/resubscribe. Un reconnect ne constitue toutefois pas un replay adressable.
La qualification `pre.005` ferme deux cas distincts : `blockSubscribe` standard en `full/base64` avec `maxSupportedTransactionVersion = 0` produit, sur fixture identique, les mêmes bytes/hash RAW v1 que `getBlock`; Helius `transactionSubscribe` full/base64 conserve lidentité, le slot, le transaction wire, la meta et lindex mais ne transporte pas `blockTime` ni `version` dans lenveloppe qualifiée. Helius reste donc un signal live riche à hydrater par HTTP avant persistence RAW directe.
La qualification actuelle ferme deux cas distincts : `blockSubscribe` standard en `full/base64` avec `maxSupportedTransactionVersion = 1` qualifie explicitement Legacy/V0/V1 et produit le matériau Common RAW directement ; Helius `transactionSubscribe` full/base64 conserve lidentité, le slot, le transaction wire, la meta et lindex mais ne transporte pas `blockTime` ni `version` dans lenveloppe qualifiée. Helius reste donc un signal live riche à hydrater par HTTP avant persistence RAW.
### 12.3 Yellowstone gRPC
@@ -721,7 +734,7 @@ RAW v1 complet -> hydration HTTP avant persistence
Cette qualification cross-source a préparé le contrat sans créer d'edge Common RAW -> Transport. L'extension Worker live utilise désormais cette décision conservative : Yellowstone produit des signaux structurés dans le Worker concret, puis HTTP `getTransaction` fournit le matériau RAW complet avant canonicalisation. Common RAW reste entièrement Transport-neutral.
## 14. État du Worker live après `0.3.12`
## 14. État du Worker live après `0.3.13`
### 14.0 Verticale matérialisée
@@ -731,20 +744,24 @@ La verticale productive possède :
consumer de ksp-worker-api
settings réseau/Worker bornés
start/stop sur runtime Tokio caller-owned
supervision privée des tâches
supervision privée de 1..32 sources logiques sur un même réseau
cinq familles live : Yellowstone / Standard Logs / Standard Block / Helius Transaction / HTTP Block Polling
mpsc central borné + backpressure
une source Yellowstone standard caller-composed
Transaction / TransactionStatus / Block -> signaux transactionnels
BlockMeta / Slot -> continuity-only
registry globale d'hydration pour Yellowstone / Standard Logs / Helius
qualification RAW directe pour Standard Block / HTTP Block Polling
coalescence bornée par network/signature/commitment
HTTP getTransaction observed pour hydration
canonicalisation et assembly via ksp-raw-transaction-lib
persistence atomique via ksp-store-lib en mode Normal
processing frontier run-local bornée
projection source Active/Reconnecting/Closing/Closed/Failed
convergence canonique par (network, signature) + disagreement explicite
persistence atomique via ksp-store-lib en mode Normal + observations supplémentaires idempotentes
quotas pending/in-flight par source et bornes globales exactes
fairness minimale / anti-starvation sous duplicate storm
processing frontier run-local multi-source conservative
projection source-neutral Active/Reconnecting/Closing/Closed/Failed + gauges source_total/active/reconnecting/failed
observation des compteurs reconnect/replay/gap Transport
health conservative Healthy/Degraded/Unhealthy
fault sur gap de rétention prouvé
shutdown deadline + abort/join sans tâche orpheline
shutdown deadline + abort/join sans tâche orpheline ni late persistence
```
Elle conserve explicitement les frontières suivantes :
@@ -786,21 +803,27 @@ attendre un Job pour continuer
hardcoder un provider unique
```
### 14.2 Sources Worker V1 à représenter
### 14.2 Sources Worker V1 matérialisées et reports
À implémenter autant que possible, même si certaines preuves live restent bloquées par tier :
Matérialisé dans `0.3.13` :
```text
Yellowstone transactions
Yellowstone blocks
Yellowstone status + hydration
Yellowstone transactions / blocks / status + HTTP hydration
WS logsSubscribe + HTTP getTransaction
WS blockSubscribe full/base64 legacy-v0 direct qualifié
Helius transactionSubscribe full/base64 + HTTP hydration
HTTP live block polling
HTTP hydration
replay Yellowstone pour continuité du run
sources EARLY via adapter extensible
WS blockSubscribe Full/Base64 Legacy/V0/V1 direct qualifié
Helius transactionSubscribe Full + HTTP hydration
HTTP live block polling getSlot/getBlocksWithLimit/getBlock observed
HTTP hydration partagée et coalescée cross-source
replay Yellowstone conservé propriétaire de Transport pour continuité du run
```
Reste hors de cette verticale et nécessite une tranche dédiée :
```text
sources EARLY / pre-execution
coverage-equivalence ou failover non-terminal entre sources
repair historique multi-source
Worker multi-source -> Store live E2E avec environnement complet provisionné
```
### 14.3 Gaps Transport Worker
@@ -858,9 +881,9 @@ Ordre conseillé :
0.3.11 P0 : Worker foundation/runtime + persistence déterministe
0.3.12 P0 : Yellowstone transactions/blocks/status + hydration + replay continuity
0.3.13 P0 : WS logs + hydration, blockSubscribe, Helius transactionSubscribe, HTTP live polling
0.3.13 P1 : multi-source convergence, dedup, provenance, content conflict, backpressure
0.3.14 P0 : continuity repair complet + hardening + smokes gratuits accessibles
0.3.14 P2 : EARLY adapters accessibles seulement si prouvés
0.3.13 P1 : multi-source convergence, dedup, provenance, content conflict, backpressure/fairness
0.3.13 P2 : health source-neutral, shutdown/races, completeness/security et gate live keyless
0.3.14 : trajectoire suivante définie par son prompt dédié ; ne pas réintroduire implicitement un scope reporté
0.3.16 P0 : block scan historique
0.3.16 P0 : replay Yellowstone borné
0.3.16 P1 : provider history/archive
@@ -984,7 +1007,8 @@ Yellowstone pre.006 = transaction wire V1 qualifié ; RAW complet via h
TR-C2 = adapter productif Transport DTO -> common réservé au Worker concret
0.3.10 = common RAW + preuves cross-source
0.3.11 = fondation Worker source-neutral, persistence et observabilité
0.3.12 à 0.3.14 = sources live multi-source, continuité et hardening par responsabilités bornées
0.3.12 = première verticale Yellowstone + hydration/replay continuity
0.3.13 = cinq familles live + convergence/fairness/health/shutdown/completeness
0.3.16 = Job Backfill multi-stratégie historique
```

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md -->
<!-- version: 98 -->
<!-- version: 99 -->
# Séquence des releases fonctionnelles KSP
@@ -583,7 +583,9 @@ La séquence effective a évolué par sizing et validation réels. La référenc
0.3.9 ksp-worker-api + audit acquisition RawTransaction
0.3.10 common ksp-raw-transaction-lib + preuves cross-source
0.3.11 fondation source-neutral ksp-worker-raw-transaction-ingest-lib
0.3.12-0.3.14 sources live, convergence et continuité Worker RAW ingest
0.3.12 première verticale live Yellowstone + hydration/replay continuity
0.3.13 cinq familles live + convergence multi-source/fairness/health/hardening
0.3.14 tranche suivante de la trajectoire RAW selon prompt dédié
0.3.15 ksp-app-raw-transaction-ingest-desk
0.3.16 Backfill multi-source / multi-stratégie
```

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/034-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE_PLAN.md -->
<!-- version: 13 -->
<!-- version: 14 -->
# Plan v0.3.13 — WS standard / Helius / HTTP live + convergence multi-source RawTransaction
@@ -1638,3 +1638,82 @@ cargo tree --duplicates
```
Les smokes live réellement accessibles seront exécutés/qualifiés dans `pre.013`. Un smoke inaccessible reste `NON EXÉCUTÉ`, jamais PASS. Aucun nouveau scope fonctionnel n'est autorisé dans `pre.013`.
## 90. Gate live keyless pre.013 reçu
Le 10 septembre 2026, les deux smokes live sans secret demandés après application de `0.3.13-pre.013` ont été exécutés explicitement et passent :
```text
Solana HTTP Devnet foundation smoke : 1/1 PASS
Solana WebSocket Devnet slot/unsubscribe/close smoke : 1/1 PASS
```
Le contrôle post-smoke communiqué est également vert :
```text
cargo fmt --all / --check : PASS
audits Rust : clean / export completeness 0
Markdown : clean, 340 tables / 851 files
cargo check --workspace : PASS
cargo clippy --workspace --all-targets --all-features -- -D warnings : PASS
```
Ces preuves ferment uniquement la partie live keyless accessible. Elles ne sont pas extrapolées vers `logsSubscribe`, `blockSubscribe`, Helius, Yellowstone token-gated ou un Worker multi-source -> Store E2E.
## 91. Réconciliation documentaire pre.014
La réconciliation durable compare les documents d'architecture et d'usage à l'état effectivement livré en `0.3.13`.
Documents nécessitant une correction :
```text
docs/architecture/004-COMPONENT_INVENTORY.md
docs/architecture/005-DEPENDENCY_GRAPH.md
docs/architecture/011-RAW_TRANSACTION_ACQUISITION.md
docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md
```
Corrections fermées :
```text
le Worker RAW n'est plus décrit comme Yellowstone-only
RawTransactionIngestRuntimeResources est documenté comme collection 1..32 d'un même réseau
les cinq familles live matérialisées sont énumérées
Yellowstone / Standard Logs / Helius partagent l'hydration globale
Standard Block / HTTP Block Polling restent RAW-direct Legacy/V0/V1
convergence canonique, observations multiples, fairness, health et shutdown sont intégrés
maxSupportedTransactionVersion du blockSubscribe actuel est 1, pas 0
les reports EARLY / coverage-equivalence / repair historique restent explicitement hors 0.3.13
```
`README.md`, le README de la crate Worker et `USAGE.md` ont été relus ; leur contenu est déjà cohérent avec le contrat livré et reste byte-identique. `USAGE.md` conserve ainsi son rôle de guide version-neutral au lieu de recevoir un historique de gate.
## 92. Frontières pre.014
`pre.014` ne modifie aucun code Rust, test, dépendance, feature ou API publique. Aucun nouveau comportement runtime n'est ajouté.
La tranche ne modifie pas :
```text
CHANGELOG.md
ROADMAP.md
prompt 0.3.14
anciens fichiers deltas/
```
La préparation de publication, le CHANGELOG, le ROADMAP et le prompt suivant restent exclusivement `pre.015`.
## 93. Gate opérateur requis avant pre.015
La tranche étant documentaire avec bump mécanique de prerelease, le gate suivant reste limité aux contrôles de cohérence du workspace :
```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
```
Aucun `cargo tree`, smoke live ou rerun exhaustif `cargo test --workspace` n'est requis : `pre.014` ne touche ni code, ni tests, ni dépendances, ni Transport.

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/030-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE.md -->
<!-- version: 14 -->
<!-- version: 15 -->
# Validation v0.3.13 — WS standard / Helius / HTTP live + convergence multi-source
@@ -1669,16 +1669,23 @@ cargo tree --duplicates : exécuté sans erreur ; inventaire multi-version non v
Les tests `#[ignore]` compilés par `cargo test --workspace --all-targets --all-features` ne constituent pas une preuve live. Ils restent séparés du gate déterministe.
## 94. Smokes live keyless à exécuter explicitement
## 94. Smokes live keyless pre.013 exécutés
Deux smokes Transport existants ne nécessitent aucun secret opérateur et doivent être exécutés explicitement pour fermer la partie live accessible de `pre.013` :
Le 10 septembre 2026, les deux smokes Transport sans secret opérateur ont été exécutés explicitement après application de `0.3.13-pre.013` :
```text
transport_devnet_smoke : 1/1 PASS
websocket_devnet_smoke : 1/1 PASS
```
Les commandes exercées sont :
```bash
cargo test -p ksp-onchain-transport-lib --test transport_devnet_smoke -- --ignored --nocapture
cargo test -p ksp-onchain-transport-lib --test websocket_devnet_smoke -- --ignored --nocapture
```
Ils prouvent respectivement un accès HTTP Solana Devnet et un cycle WebSocket Solana Devnet. Ils ne prouvent pas à eux seuls `logsSubscribe`, `blockSubscribe`, Helius `transactionSubscribe`, HTTP block polling Worker, Yellowstone, hydration Worker ou persistence Store end-to-end.
Elles prouvent respectivement un accès HTTP Solana Devnet et un cycle WebSocket Solana Devnet avec notification Slot, unsubscribe puis close. Elles ne prouvent pas à elles seules `logsSubscribe`, `blockSubscribe`, Helius `transactionSubscribe`, HTTP block polling Worker, Yellowstone, hydration Worker ou persistence Store end-to-end.
## 95. Smokes token/resource-gated
@@ -1703,3 +1710,76 @@ Les tokens/secrets éventuels restent saisis sur stdin ou fournis par les mécan
La réconciliation durable README/USAGE/architecture reste `pre.014`. La préparation publication CHANGELOG/ROADMAP/prompt suivant reste `pre.015`.
## 97. Contrôle post-smoke pre.013 reçu
Après les deux smokes keyless, l'opérateur a rejoué les contrôles de compilation/hardening de `0.3.13-pre.013` :
```text
fmt : PASS
audits Rust : clean / export completeness 0
Markdown : clean, 340 tables / 851 files
cargo check --workspace : PASS
cargo clippy --workspace --all-targets --all-features -- -D warnings : PASS
```
Aucune régression déterministe n'est observée après les preuves live.
## 98. Réconciliation documentaire pre.014
L'audit durable compare l'implémentation `0.3.13` aux documents qui décrivent la verticale Worker RAW.
Obsolescences corrigées :
```text
architecture/004 : inventaire Worker limité à Yellowstone
architecture/005 : runtime resources encore décrites comme une seule source et multi-source reporté
architecture/011 : pipeline courant Yellowstone-only, blockSubscribe legacy-v0/maxV0 et sources encore « à représenter »
plans/002 : plage 0.3.12-0.3.14 trop agrégée pour refléter la fermeture effective 0.3.13
```
État durable réconcilié :
```text
RawTransactionIngestRuntimeResources : 1..32 sources logiques d'un même réseau
familles productives : Yellowstone / Standard Logs / Standard Block / Helius Transaction / HTTP Block Polling
hydration globale : Yellowstone / Standard Logs / Helius via getTransaction observed
RAW-direct : Standard Block / HTTP Block Polling, Legacy/V0/V1
convergence : identité canonique network/signature + disagreement explicite + observations multiples
bornes : admission/hydration/persistence bornées avec fairness minimale
observabilité : source counts source-neutral + health conservative
continuité : reconnect/replay Transport-owned, processing frontier run-local, gap prouvé terminal
shutdown : stop/fault/drain/abort/join bornés sans tâche orpheline ni late persistence
```
## 99. README et USAGE audités sans modification artificielle
Les documents suivants ont été relus pendant `pre.014` :
```text
README.md
crates/ksp-worker-raw-transaction-ingest-lib/README.md
crates/ksp-worker-raw-transaction-ingest-lib/USAGE.md
```
Ils décrivent déjà les cinq familles, la composition multi-source, les gauges source-neutral, la health conservative et les frontières Job/Worker. Aucun changement n'est nécessaire.
`USAGE.md` reste strictement version-neutral : aucun numéro de gate, historique de prerelease ou journal de validation n'y est ajouté.
## 100. Frontière documentaire et non-claims pre.014
`pre.014` est documentaire hors bump mécanique de prerelease. Aucun code Rust, test, dépendance, feature ou contrat public n'est modifié.
Les preuves live restantes gardent leur statut réel :
```text
HTTP Devnet keyless : PASS
WebSocket Devnet keyless : PASS
Yellowstone OrbitFlare Devnet : NON EXÉCUTÉ dans ce gate
Yellowstone PublicNode Mainnet/Testnet : NON EXÉCUTÉ dans ce gate
Helius transactionSubscribe live : NON EXÉCUTÉ
blockSubscribe provider live dédié : NON EXÉCUTÉ
HTTP block polling Worker end-to-end : NON EXÉCUTÉ
Worker multi-source -> Store end-to-end : NON EXÉCUTÉ
```
Aucun ancien delta n'est modifié. CHANGELOG, ROADMAP et prompt `0.3.14` restent réservés à `pre.015`.