# Validation v0.3.10 — RAW Transaction commune + Worker d’ingestion ## 1. Rôle du document Ce document suit les preuves de la release `0.3.10` : extraction de la canonicalisation RAW v1 vers `ksp-raw-transaction-lib`, migration Backfill puis matérialisation du Worker continu multi-source `ksp-worker-raw-transaction-ingest-lib`. Il distingue toujours : ```text preuve exécutée preuve seulement planifiée preuve live accessible preuve live bloquée par secret/tier non-claim explicite ``` ## 2. Gate `pre.001` — audit/sizing/plan État : **fermé pour la planification**, sans claim Cargo local. ### 2.1 Base contrôlée ```text archive : khadhroony-solana-project-v0.3.9.zip SHA-256 : 41ef2589a11410aabfb329d387f0008e116006da60ada0802e5f72bc30d3466f bytes : 7859118 entries : 1855 unzip -t : PASS workspace members : 19 workspace.package.version base : 0.3.9 stable delta : deltas/0.3.9/rel.001.md ``` Sécurité archive : ```text absolute/traversal entries : 0 symlinks : 0 .git/ : 0 target/ : 0 node_modules/ : 0 Cargo.lock : 0 .env : 0 private-key-like files checked : 0 ``` Le ZIP ne contient pas `.git`; le tag n’est donc pas directement inspectable dans cet environnement. ### 2.2 Baseline statique exécutée avant modification ```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 python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas Markdown table audit: clean (332 table(s), 750 file(s)) ``` ### 2.3 Cargo local ```text cargo : indisponible dans l’environnement d’assemblage ``` Par conséquent : ```text cargo fmt : NON EXÉCUTÉ ici cargo check : NON EXÉCUTÉ ici cargo clippy: NON EXÉCUTÉ ici cargo test : NON EXÉCUTÉ ici cargo tree : NON EXÉCUTÉ ici Tauri build : NON EXÉCUTÉ ici ``` Aucun de ces gates n’est déclaré PASS par cette session. Le journal opérateur fourni pour la stable `0.3.9` montre un gate complet antérieur ; il reste une preuve externe de la base stable, pas une exécution `pre.001` locale. ### 2.4 Gate opérateur après livraison de `pre.001` Le 6 septembre 2026, l’opérateur a exécuté sur `workspace.package.version = 0.3.10-pre.1` : ```text cargo fmt --all 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 ``` Résultats communiqués : ```text General Rust rule audit: clean Rust export completeness audit: 0 candidate(s) KSP workspace Rust rule audit: clean Markdown table audit: clean (339 table(s), 753 file(s)) cargo check --workspace : terminé sans erreur cargo clippy --workspace --all-targets --all-features -- -D warnings : terminé sans erreur ``` Ce gate opérateur ferme les contrôles demandés pour passer à `pre.002`. Aucun `cargo test` de `pre.001` n’a été fourni dans ce message et il n’est pas inventé. ## 3. Preuves de conception fermées en `pre.001` ### 3.1 Common RAW Décisions prouvées par inspection du code courant : ```text format_id courant = ksp.solana.raw_transaction format_version courant = 1 RawObservationKey est explicitement producer-owned dans Store RawTransaction identity = network + signature RawTransactionObservation est séparée de l’entité `DEP-PIPE-006` impose les modèles `ksp-store-api` à la lower-layer RAW réutilisable ; la décision `ksp-store-lib` de `pre.001` est corrigée en `pre.002` Backfill conversion mélange actuellement canonicalisation commune et metadata Job-owned ``` Canari RAW v1 recalculé : ```text bytes = {"transaction":["AQID","base64"],"meta":{"a":{"x":null,"y":true},"z":1},"version":"legacy","transactionIndex":7} len = 112 sha256 = 220792d2b15d262fda242cb220774ee9ddeffebf04dcfadabcf8ef76a9b1a7c3 ``` Le plan interdit tout déplacement de `job_id`, `scope_fingerprint`, lifecycle, checkpoint ou observation-key algorithm dans common. ### 3.2 Transport Inventaire confirmé dans `ksp-onchain-transport-lib` : ```text HttpObservedValue get_transaction_observed get_block / get_blocks / get_blocks_with_limit logsSubscribe signatureSubscribe blockSubscribe Helius transactionSubscribe Yellowstone transactions Yellowstone transactions_status Yellowstone blocks Yellowstone blocks_meta Yellowstone slots Yellowstone from_slot SubscribeReplayInfo / reconnect snapshot ``` Gaps requalifiés : ```text TR-B confirmé : get_block_observed TR-C confirmé/scindé : common material + adapters Worker + Transport seulement si DTO insuffisant TR-D confirmé : provenance durable full-material + runtime source projection TR-E confirmé : réutiliser from_slot/replay existant, aucun second moteur TR-F réservé : aucun EARLY sans protocole+accès+rôle RAW prouvés ``` ### 3.3 Config Constats : ```text std.transport format_version = 3 mainnet logique déjà canonique profils OrbitFlare Devnet et PublicNode Mainnet/Testnet déjà présents gRPC metadata publique/secrète déjà typée et redacted HTTP roles/priorities/limits déjà supportés WS protocol/session déjà supportés ``` Décision : pas d’edge Worker -> Config et pas de nouveau document métier Worker imposé dans `0.3.10`. Une adaptation Config n’est admise que pour un manque Transport concret découvert pendant l’implémentation. ## 4. Fraîcheur externe `pre.001` ### 4.1 Yellowstone Vérifié le 5 septembre 2026 : ```text yellowstone-grpc-proto latest = 12.7.0 publication = 2026-08-29 workspace KSP = ^12.7 ``` Décision : aucun bump en ouverture. Canaris imposés par changements upstream récents : ```text Transaction V1/config doit survivre à la projection block replay from_slot doit avoir un smoke dédié ``` ### 4.2 Providers | Source | Fait revalidé | Type de preuve `0.3.10` | |:-----------------|:-------------------------------------------------------------------------------------|:---------------------------------------| | Solana public | HTTP/WS standard accessibles ; blockSubscribe unstable | live opt-in + fixtures | | PublicNode | Yellowstone Mainnet/Testnet affiché ; archive access proposé | live opt-in si token/config disponible | | OrbitFlare | Devnet gRPC Free/Developer ; Yellowstone full-fidelity | live opt-in avec x-token opérateur | | Helius | transactionSubscribe courant ; blockSubscribe non supporté ; LaserStream replay 24 h | fixture + live si tier/key | | QuickNode | gRPC Scale+ ; port 443/x-token ; 10000 sunset 2026-10-01 | tier-bloqué | | Alchemy | PAYG/Enterprise ; docs replay 6000 vs 432000 slots contradictoires | tier-bloqué, aucune constante | | Jito ShredStream | shutdown annoncé 2026-09-05 | exclu TR-F | ## 5. Gates de parité RAW obligatoires Une source dite full n’obtient le statut `direct canonical producer` qu’après : ```text same fixture identity same canonical bytes same SHA-256 same slot same block_time semantics same version/index semantics ``` Familles à prouver séparément : ```text HTTP getTransaction HTTP getBlock transaction WS blockSubscribe transaction Helius transactionSubscribe full Yellowstone transaction Yellowstone block transaction Transaction V1 ``` En cas d’échec de parité : ```text pas de RAW v2 automatique pas de first-provider-wins pas de content normalization ad hoc non documentée source utilisée comme discovery + hydration HTTP jusqu’à résolution ``` ## 6. Gates Worker à fermer pendant la release ### 6.1 Lifecycle/runtime ```text Created -> Starting -> Running -> Stopping -> Stopped Faulted terminal stop idempotent caller-owned Tokio runtime Worker-owned spawned tasks aucun JoinHandle public shutdown borné aucune tâche source survivante ``` ### 6.2 Sources et backpressure ```text N sources simultanées bounded channels seulement slow source isolation queue saturation observable aucun drop silencieux degraded/unhealthy/fault policy explicite ``` ### 6.3 Persistence ```text new entity + new observation idempotent entity + new source observation idempotent observation content conflict terminal aucun backend physique dans Worker ``` ### 6.4 Continuité ```text run frontier borné reconnect != replay transaction replay from_slot block replay from_slot redundant-source repair HTTP block repair hydration repair unresolved gap reste visible aucun historical caller parameter ``` ### 6.5 Observabilité ```text WorkerSnapshot commun RawTransactionIngestSnapshot concret latest-value indépendamment des lecteurs source health/counters/gaps/frontiers sûrs aucun payload/signature/URL/secret ``` ## 7. Matrice de types de preuve | Preuve | Déterministe | Réseau externe | Secret/tier | Gate release | |:------------------------------|:------------:|:--------------:|:---------------:|:--------------------------------------------------| | common golden RAW v1 | oui | non | non | obligatoire | | cross-source parity fixtures | oui | non | non | obligatoire | | Worker fake multi-source | oui | non | non | obligatoire | | Store façade fake | oui | non | non | obligatoire | | HTTP/WS Solana public smoke | non | oui | non | opt-in, pertinent | | PublicNode Yellowstone | non | oui | possible | opt-in si accès | | OrbitFlare Devnet Yellowstone | non | oui | x-token | opt-in si accès | | Helius transactionSubscribe | non | oui | key/tier | opt-in, non bloquant si tier absent | | QuickNode Yellowstone | non | oui | tier | bloqué, fixture suffit | | Alchemy Yellowstone | non | oui | PAYG/Enterprise | bloqué, fixture suffit | | PostgreSQL Store proof | non | local/externe | URI dédiée | opt-in gate technique si environnement disponible | ## 8. Commands de gate cible À exécuter dès que Rust est modifié puis au gate technique final : ```bash cargo fmt --all 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 --workspace --all-targets --all-features cargo tree -p ksp-raw-transaction-lib --edges normal 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 ``` Ne jamais remplacer un gate non exécuté par un ancien log stable. ## 9. Non-claims `pre.001` À ce stade il n’est **pas** affirmé que : ```text Yellowstone full produit déjà des bytes RAW v1 identiques à HTTP Helius full produit déjà des bytes RAW v1 identiques à HTTP PublicNode/OrbitFlare replay est disponible à une profondeur donnée Alchemy a une profondeur replay stable une source WS reconnectée est lossless une source EARLY est implémentée le Worker concret existe déjà la common crate existe déjà un test Cargo de pre.001 a été exécuté localement ``` Ces points deviennent des gates ou restent explicitement bloqués. ## 10. Trajectoire de validation ```text pre.002 common golden + dependency firewall pre.003 Backfill migration parity pre.004 observed block pre.005 WS/Helius parity pre.006 Yellowstone parity pre.007 Worker runtime foundation pre.008 Yellowstone live/replay pre.009 WS/HTTP live pre.010 multi-source Store/hardening pre.011 gap repair pre.012 Config/profiles + provider smokes pre.013 EARLY ou consolidation pre.014 final technical/live gate pre.015 final docs reconciliation pre.016 publication preparation rel.001 stable publication ``` ## 11. Gate `pre.002` — common RAW foundation État : **matérialisé ; gate Cargo opérateur requis**. ### 11.1 Crate et frontière ```text crate = ksp-raw-transaction-lib workspace.package.version = 0.3.10-pre.2 runtime async = aucun Transport / Config / Job / Worker = absents backend Store = absent ``` La dépendance exacte retenue après contrôle normatif est : ```text ksp-raw-transaction-lib -> ksp-core-lib -> ksp-store-api -> serde_json -> sha2 ``` Cette correction remplace la proposition `ksp-store-lib(default-features=false)` de `pre.001` car `DEP-PIPE-006` est plus spécifique : le pipeline RAW partagé peut dépendre de `ksp-store-api`, pas de `ksp-store-lib`. ### 11.2 Surface matérialisée ```text RAW_TRANSACTION_FORMAT_ID = ksp.solana.raw_transaction RAW_TRANSACTION_FORMAT_VERSION = 1 MIN_RAW_TRANSACTION_SIGNATURE_TEXT_BYTES = 64 MAX_RAW_TRANSACTION_SIGNATURE_TEXT_BYTES = 88 RawTransactionMaterial RawTransactionWireField RawTransactionVersion RawTransactionAcquisition parse_raw_transaction_signature(...) canonicalize_raw_transaction(...) assemble_raw_transaction_acquisition(...) ERROR_CODE_RAW_TRANSACTION_CANONICALIZATION_INVALID ERROR_CODE_RAW_TRANSACTION_MATERIAL_INVALID ERROR_CODE_RAW_TRANSACTION_SIGNATURE_INVALID ``` `RawObservationKey` reste fournie par le producteur. La common crate ne contient aucun domaine de clé Backfill/Worker. ### 11.3 Preuves déterministes ajoutées ```text signature Base58 : bornes texte + alphabet + overflow + exactement 64 octets RAW v1 golden : 112 bytes exacts RAW v1 SHA-256 : 220792d2b15d262fda242cb220774ee9ddeffebf04dcfadabcf8ef76a9b1a7c3 meta/version/index : omitted != null != value JSON : clés objet triées récursivement, arrays conservés, strings échappées, nombres conservés block_time : négatif/overflow/max Store payload : borne MAX_RAW_PAYLOAD_BYTES Debug/error : aucune signature, transaction body ou meta hostile recopiée acquisition : observation key producer-owned et référence exactement égale à la transaction public API : consommation par crate-root firewall : absence Store runtime/Transport/Config/Job/Worker/backend ``` ### 11.4 Validation locale d’assemblage Exécuté dans l’environnement d’assemblage : ```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 python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas Markdown table audit: clean (339 table(s), 754 file(s)) manifest TOML : 20 membres workspace, ksp-raw-transaction-lib présent manifest common : 4 dépendances exactes, aucune feature/dev/build dependency ``` `cargo`, `rustc` et `rustfmt` ne sont pas présents dans cet environnement. Les gates Cargo de la nouvelle crate restent donc **NON EXÉCUTÉS LOCALEMENT**. ### 11.5 Gate opérateur demandé ```bash cargo fmt --all 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-raw-transaction-lib cargo tree -p ksp-raw-transaction-lib --edges normal cargo tree -p ksp-raw-transaction-lib -e features ``` `pre.003` ne doit migrer le Backfill qu’après ce gate vert.