# Delta `0.3.5-pre.003` — `TransactionExecutionEvent` ## Base requise ```text 0.3.5-pre.2.fix.1 ``` Le gate opérateur de cette base confirme les audits Rust, `cargo check --workspace`, Clippy, `cargo test -p ksp-interface-lib` et `cargo test -p ksp-program-api`. Le seul défaut restant est une double ligne vide dans `docs/validation/022-V0_3_5_INTERFACE_ACQUISITION_EVENTS.md`; conformément à la décision opérateur, cette correction documentaire est absorbée par le présent delta au lieu de créer un fix dédié. ## Version Le delta modifie la surface Rust Interface. La version workspace devient : ```text 0.3.5-pre.3 ``` ## Mission Fermer le gate dédié à `TransactionExecutionEvent` prévu par le plan corrigé de `0.3.5` : représentation de signature, convergence Solana/Yellowstone/Helius, anti-duplication Store et consumer concret doivent tous être démontrés avant création du type. ## Décision de gate Le gate passe avec une projection strictement minimale : ```text TransactionSignature([u8; 64]) TransactionExecutionOutcome { Succeeded, Failed, } TransactionExecutionEvent { slot, signature, outcome, } ``` La convergence retenue est : ```text Solana logsSubscribe context.slot + signature + err Yellowstone TransactionStatus slot + signature + err Helius transactionSubscribe slot + signature + résultat d'exécution seulement lorsque la forme/detail mode le rend déterminable ``` `err` n'est jamais copié dans Interface. Solana `err: null`, Yellowstone `err: None` et un Helius `err: null` explicitement disponible donnent `Succeeded`; une erreur explicite donne `Failed`. Pour Helius, la projection est conservative : un `err` omis, une forme `none`, inconnue ou sans information d'erreur exploitable ne produit pas artificiellement un `TransactionExecutionEvent`. ## Signature `TransactionSignature` possède exactement 64 octets déjà décodés. Interface n'ajoute : ```text aucun base58 aucun serde aucun codec aucune crate Solana/Anza supplémentaire aucune capability Wallet de signature ``` Le `Debug` est redacted et ne rend jamais les bytes. `ksp-store-api::RawTransactionSignature` reste Store-owned. Aucun alias/reexport/converter cross-domain n'est ajouté ; la future composition convertit explicitement les 64 octets si nécessaire. ## Ownership Restent Transport-owned : ```text Solana logs notification DTO Yellowstone TransactionStatus DTO Helius transactionSubscribe DTOs commitment subscription/filter metadata transaction index logs memo block time confirmation status provider timestamps opaque transaction errors ``` Interface possède uniquement le fait passif commun. ## Consumer Le futur worker RAW live peut utiliser `TransactionExecutionEvent` comme signal provider-neutral d'exécution observée et décider ensuite d'hydrater/persister un `RawTransaction` par sa propre composition/policy. Le premier backfill historique `0.3.6` reste indépendant de cette API. ## Surface Rust Ajouts crate-root : ```text TransactionSignature TransactionExecutionOutcome TransactionExecutionEvent ``` `TransactionExecutionOutcome` est `#[non_exhaustive]`. Les champs des structs restent privés et la surface ne possède ni runtime ni comportement réseau. ## Tests/canaris Ajoutés : ```text unit_tests/transaction_execution.rs tests/transaction_execution_public_api.rs ``` Le canari `tests/release_completeness.rs` évolue pour figer : ```text 5 modules privés de production 11 reexports crate-root transaction_execution comme seule nouvelle famille pre.003 absence de serde/tracing/Transport/Store dans la racine Interface ``` ## Documentation Le plan et la validation passent `TransactionExecutionEvent` de candidat actif à `ADMIS pre.003`. `TransactionLogEvent` reste une idée différée distincte. `TransactionCommitmentEvent` reste non admis. Yellowstone `Entry` et les DTOs Helius restent Transport-owned même lorsqu'ils pourront contribuer à de futurs faits Interface réellement transversaux. La double ligne vide signalée par le gate opérateur précédent est supprimée dans la validation. ## Fichiers Modifiés : ```text Cargo.toml crates/ksp-interface-lib/src/lib.rs crates/ksp-interface-lib/tests/release_completeness.rs docs/plans/026-V0_3_5_INTERFACE_ACQUISITION_EVENTS_PLAN.md docs/validation/022-V0_3_5_INTERFACE_ACQUISITION_EVENTS.md ``` Ajoutés : ```text crates/ksp-interface-lib/src/transaction_execution.rs crates/ksp-interface-lib/unit_tests/transaction_execution.rs crates/ksp-interface-lib/tests/transaction_execution_public_api.rs deltas/0.3.5/pre.003.md ``` Explicitement inchangés : ```text crates/ksp-interface-lib/Cargo.toml crates/ksp-onchain-transport-lib/** crates/ksp-store-api/** crates/ksp-store-lib/** crates/ksp-store-postgres-lib/** README.md ROADMAP.md CHANGELOG.md ``` ## Gate opérateur ```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/0.3.5 cargo check --workspace cargo clippy --workspace --all-targets cargo test -p ksp-interface-lib cargo test -p ksp-program-api ``` Les gates Cargo ne sont pas déclarés réussis par l'environnement d'assemblage.