diff --git a/Cargo.toml b/Cargo.toml index b63577f..ab57940 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -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" diff --git a/deltas/0.3.13/pre.014.md b/deltas/0.3.13/pre.014.md new file mode 100644 index 0000000..8661ecc --- /dev/null +++ b/deltas/0.3.13/pre.014.md @@ -0,0 +1,78 @@ + + + +# 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. diff --git a/docs/architecture/004-COMPONENT_INVENTORY.md b/docs/architecture/004-COMPONENT_INVENTORY.md index 71dbc95..b916d63 100644 --- a/docs/architecture/004-COMPONENT_INVENTORY.md +++ b/docs/architecture/004-COMPONENT_INVENTORY.md @@ -1,5 +1,5 @@ - + # 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 d’une 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 | diff --git a/docs/architecture/005-DEPENDENCY_GRAPH.md b/docs/architecture/005-DEPENDENCY_GRAPH.md index 1c8ffcc..5800a4e 100644 --- a/docs/architecture/005-DEPENDENCY_GRAPH.md +++ b/docs/architecture/005-DEPENDENCY_GRAPH.md @@ -1,5 +1,5 @@ - + # 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. diff --git a/docs/architecture/011-RAW_TRANSACTION_ACQUISITION.md b/docs/architecture/011-RAW_TRANSACTION_ACQUISITION.md index 3aa5c39..18e775f 100644 --- a/docs/architecture/011-RAW_TRANSACTION_ACQUISITION.md +++ b/docs/architecture/011-RAW_TRANSACTION_ACQUISITION.md @@ -1,5 +1,5 @@ - + # 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 l’enveloppe 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 l’identité, le slot, le transaction wire, la meta et l’index mais ne transporte pas `blockTime` ni `version` dans l’enveloppe 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 l’identité, le slot, le transaction wire, la meta et l’index mais ne transporte pas `blockTime` ni `version` dans l’enveloppe 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 ``` diff --git a/docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md b/docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md index ed362ae..a49e959 100644 --- a/docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md +++ b/docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md @@ -1,5 +1,5 @@ - + # 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 ``` diff --git a/docs/plans/034-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE_PLAN.md b/docs/plans/034-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE_PLAN.md index 39d843c..1bce110 100644 --- a/docs/plans/034-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE_PLAN.md +++ b/docs/plans/034-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE_PLAN.md @@ -1,5 +1,5 @@ - + # 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. diff --git a/docs/validation/030-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE.md b/docs/validation/030-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE.md index 4241f31..6ca4b28 100644 --- a/docs/validation/030-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE.md +++ b/docs/validation/030-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE.md @@ -1,5 +1,5 @@ - + # 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`.