# Delta `0.3.12-pre.002` — edge Transport + contrats runtime/source Yellowstone ## Base requise ```text 0.3.12-pre.001 workspace.package.version = 0.3.12-pre.1 ``` Le gate opérateur communiqué pour `pre.001` est vert sur : ```text cargo fmt --all Rust rule audit Markdown table audit cargo check --workspace cargo clippy --workspace --all-targets --all-features -- -D warnings ``` Le journal ne contient pas de `cargo test` ni de `cargo tree` ; ces commandes ne sont pas inventées comme PASS. ## Objectif Ouvrir uniquement le nouvel edge de production décidé en `pre.001` : ```text ksp-worker-raw-transaction-ingest-lib -> ksp-onchain-transport-lib ``` et matérialiser les contrats Worker-owned nécessaires à la future source Yellowstone + hydration HTTP, sans ouvrir de stream ni exécuter de requête réseau. ## Version Cette tranche est une prerelease non-fix : ```text workspace.package.version = 0.3.12-pre.2 ``` ## Graphe Worker normal attendu ```text ksp-core-lib ksp-logging-lib ksp-onchain-transport-lib ksp-raw-transaction-lib ksp-store-lib default-features=false ksp-worker-api sha2 tokio macros,rt,sync,time ``` Toujours interdits directement au Worker : ```text ksp-config-lib ksp-job-api ksp-job-backfill-lib ksp-store-api ksp-store-postgres-lib reqwest tokio-tungstenite tonic yellowstone-grpc-proto SDK provider ``` ## Nouveau contrat `RawTransactionIngestYellowstoneSource` Le type public à champs privés possède : ```text YellowstoneGrpcChannel YellowstoneSubscribeRequest HttpTransportPool HttpRoleName d'hydration ``` `RawTransactionIngestYellowstoneSource::new(...)` valide sans I/O : ```text request Yellowstone valide au moins une famille transactions / transactions_status / blocks commitment explicite confirmed ou finalized présence d'une route HTTP configurée compatible get_transaction cohérence cluster entre Yellowstone et toutes les routes HTTP compatibles ``` Les erreurs de composition sont projetées sur `worker_raw_transaction_ingest.runtime_invalid` avec uniquement une condition stable et sûre. ## Nouveau contrat `RawTransactionIngestRuntimeResources` `RawTransactionIngestRuntimeResources::new(yellowstone_source)` possède exactement cette première famille runtime. Aucune collection multi-source, enum provider, closure source, callback public, `enqueue`, `send`, getter de client interne ou backend n'est exposé. La ressource valide également la cohérence entre le réseau du source composé et `RawTransactionIngestSettings.network` avant le démarrage. ## Nouveau start de composition Ajout : ```text RawTransactionIngestWorker::start_with_runtime_resources( settings, Arc, RawTransactionIngestRuntimeResources, ) ``` La méthode conserve : ```text runtime Tokio caller-owned validation réseau Store/settings validation réseau Worker/source handle/snapshot/shutdown existants ``` En `pre.002`, les ressources sont volontairement validées mais ne sont pas activées avant délégation au runtime source-neutral existant. Cela ferme l'API de composition sans anticiper `pre.006`. ## Absence volontaire de comportement live Les canaris interdisent dans cette tranche : ```text open_standard_subscribe next_update get_transaction_observed get_block_observed source task spawn spécifique nouveau JoinSet HTTP hydration persistence issue du réseau ``` `pre.003` reste donc libre d'introduire uniquement les adapters déterministes `Transaction`/`TransactionStatus`, tandis que l'activation productive de la source reste réservée à `pre.006`. ## Sécurité et redaction Le `Debug` des ressources expose uniquement des métadonnées sûres : ```text logical Yellowstone endpoint name provider network filter counts commitment presence from_slot hydration role HTTP endpoint count ``` Il n'expose ni URL, token, header, filter name ni client interne. Tests déterministes ajoutés : ```text acceptation confirmed + transaction + get_transaction rejet processed rejet commitment implicite rejet absence de famille ingestion-bearing rejet rôle HTTP non compatible rejet mismatch Yellowstone/HTTP cluster rejet mismatch Worker/source network Debug redaction public API/root contract manifest/dependency firewall Transport confiné à runtime_resources.rs absence de live I/O en pre.002 ``` ## Décisions prises ```text un seul nouvel edge productif Worker -> Onchain Transport composition fournie par l'appelant, sans dépendance Worker -> Config ressources Transport encapsulées par des types Worker-owned à champs privés commitment de la future hydration limité à confirmed/finalized dès la composition aucune activation réseau avant la tranche productive prévue ``` ## Questions ouvertes Aucune question ouverte n'est bloquante pour `pre.002`. Les choix volontairement reportés restent ceux du plan actif : forme exacte du signal privé `Transaction`/`TransactionStatus` en `pre.003`, provenance Yellowstone + hydration en `pre.004`, puis continuité/replay dans les tranches dédiées. ## Fichiers ajoutés ```text crates/ksp-worker-raw-transaction-ingest-lib/src/runtime_resources.rs crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/runtime_resources.rs deltas/0.3.12/pre.002.md ``` ## Fichiers modifiés ```text Cargo.toml crates/ksp-worker-raw-transaction-ingest-lib/Cargo.toml crates/ksp-worker-raw-transaction-ingest-lib/src/lib.rs crates/ksp-worker-raw-transaction-ingest-lib/src/runtime.rs crates/ksp-worker-raw-transaction-ingest-lib/tests/dependency_boundary.rs crates/ksp-worker-raw-transaction-ingest-lib/tests/hardening.rs crates/ksp-worker-raw-transaction-ingest-lib/tests/public_api.rs crates/ksp-worker-raw-transaction-ingest-lib/tests/release_completeness.rs docs/validation/029-V0_3_12_YELLOWSTONE_HYDRATION_CONTINUITY.md ``` ## Fichiers supprimés Aucun. ## Validations exécutées 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 (340 table(s), 802 file(s)) ``` `cargo`, `rustc` et `rustfmt` ne sont pas installés dans l'environnement d'assemblage. Aucun gate Cargo local n'est déclaré PASS. ## 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-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 ``` ## Non-claims Cette tranche ne revendique pas : ```text session Yellowstone ouverte signal Transaction/TransactionStatus produit hydration HTTP exécutée provenance composite assemblée coalescence d'hydration frontier/replay/repair smoke live Worker réconciliation documentaire finale README/USAGE/architecture ``` ## Suite Après gate opérateur vert, `pre.003` adapte uniquement `YellowstoneTransactionUpdate` et `YellowstoneTransactionStatusUpdate` vers le signal Worker privé prévu par le plan, sans HTTP ni persistence réseau.