# Delta `0.3.5-pre.002` — `SlotLifecycleEvent` ## Base requise ```text 0.3.5-pre.001-fix.001 workspace.package.version = 0.3.5-pre.1 ``` Gate d'entrée opérateur reçu après le fix : ```text General Rust rule audit: clean Rust export completeness audit: 0 candidate(s) KSP workspace Rust rule audit: clean Markdown table audit: clean (240 table(s), 138 file(s)) ``` ## Objectif Matérialiser uniquement la famille passive provider-neutral `SlotLifecycleEvent` admise par le gate corrigé de `pre.001`, sans ouvrir la famille candidate `TransactionExecutionEvent` et sans déplacer les DTOs protocol/provider hors de Transport. ## Version Cette tranche est une nouvelle prerelease non-fix. La version workspace devient : ```text 0.3.5-pre.2 ``` Le manifest `crates/ksp-interface-lib/Cargo.toml` reste inchangé et continue d'hériter de la version workspace. ## Implémentation Nouvelle surface crate-root : ```text SlotLifecycleStage SlotLifecycleEvent ``` `SlotLifecycleStage` est `#[non_exhaustive]` et contient exactement : ```text Processed FirstShredReceived Completed CreatedBank Dead OptimisticallyConfirmed Rooted ``` `SlotLifecycleEvent` reste volontairement minimal : ```text slot: u64 stage: SlotLifecycleStage ``` avec uniquement : ```text SlotLifecycleEvent::new(slot, stage) SlotLifecycleEvent::slot() SlotLifecycleEvent::stage() ``` Aucune validation faillible n'est ajoutée : tout `u64` est un slot admissible au niveau de ce contrat passif. ## Ownership et dépendances Préservé : ```text ksp-interface-lib -> ksp-core-lib ``` Absent : ```text serde codec wire tracing/logging runtime tokio/channel/event bus ksp-onchain-transport-lib ksp-store-api ksp-store-lib ksp-store-postgres-lib ``` Aucun converter depuis les DTOs Solana WS, Yellowstone ou Helius n'est ajouté dans Interface. Les conversions appartiennent à la future composition/consumer. ## Canaris Ajoutés : ```text crates/ksp-interface-lib/unit_tests/slot_lifecycle.rs crates/ksp-interface-lib/tests/slot_lifecycle_public_api.rs ``` Le premier verrouille les 7 stages, le domaine `u64`, les traits passifs retenus et un `Debug` borné/provider-neutral. Le second vérifie la consommation depuis crate root et la capacité d'évolution downstream de l'enum non-exhaustive. Le canari historique `tests/release_completeness.rs` est ajusté afin que son inventaire exact accepte la seule extension prévue de cette tranche : `slot_lifecycle` et ses deux reexports publics. ## Fichiers modifiés ```text Cargo.toml crates/ksp-interface-lib/src/lib.rs crates/ksp-interface-lib/tests/release_completeness.rs docs/validation/022-V0_3_5_INTERFACE_ACQUISITION_EVENTS.md ``` ## Fichiers ajoutés ```text crates/ksp-interface-lib/src/slot_lifecycle.rs crates/ksp-interface-lib/unit_tests/slot_lifecycle.rs crates/ksp-interface-lib/tests/slot_lifecycle_public_api.rs deltas/0.3.5/pre.002.md ``` ## Fichiers explicitement hors scope ```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 ``` ## Validations exécutées dans l'environnement d'assemblage Validations statiques de l'overlay : ```text version workspace = 0.3.5-pre.2 nouvelle source Interface sans serde/tracing/tokio/Transport/Store crate-root = 4 modules privés / 8 reexports publics attendus SlotLifecycleStage = 7 variantes prévues aucun TransactionExecutionEvent introduit archive = fichiers modifiés/ajoutés uniquement ``` L'environnement d'assemblage ne fournit pas le workspace Cargo complet exécutable ; aucun `cargo check`, Clippy ou test Rust de cette tranche n'est donc déclaré réussi ici. ## Gate opérateur demandé ```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 ``` `ksp-program-api` est inclus car il est le consumer actuel direct de `ksp-interface-lib`, même si `pre.002` ne modifie aucun contrat Program existant. ## Questions ouvertes Aucune question ne bloque `SlotLifecycleEvent`. Le seul gate fonctionnel suivant reste `TransactionExecutionEvent` : représentation de signature, convergence exacte Solana/Yellowstone/Helius, anti-duplication Store et consumer concret doivent être prouvés en `pre.003` avant toute implémentation. ## Suite ```text 0.3.5-pre.003 — gate TransactionExecutionEvent ; implémentation uniquement si le gate est complet ```