# Delta `0.3.5-pre.004` — canaris externes et complétude API ## Base requise ```text 0.3.5-pre.3 ``` Le gate opérateur de `pre.003` est entièrement propre : audits Rust/Markdown, `cargo check --workspace`, Clippy, tests `ksp-interface-lib` et `ksp-program-api` passent. ## Version La tranche modifie des sources Rust de test/canari. La version workspace devient : ```text 0.3.5-pre.4 ``` ## Mission Verrouiller la surface des deux familles passives admises sans ajouter de comportement ni de type de production : ```text SlotLifecycleEvent / SlotLifecycleStage TransactionExecutionEvent / TransactionExecutionOutcome / TransactionSignature ``` ## Consumer externe `tests/external_consumer.rs` consomme maintenant les deux familles acquisition uniquement depuis le crate-root public. Le canari prouve notamment qu'un consumer downstream peut récupérer : ```text slot + stage slot + signature + outcome ``` sans accès aux modules privés, à Transport ou à Store. Le canari Program historique reste conservé. ## Inventaire exact `tests/release_completeness.rs` fige : ```text 5 modules privés de production 11 reexports crate-root 2 familles passives d'acquisition exactement ``` Aucun nouveau module ni export de production n'est ajouté par `pre.004`. ## Evolutivité Les deux enums publics évolutifs restent explicitement `#[non_exhaustive]` : ```text SlotLifecycleStage TransactionExecutionOutcome ``` Les canaris publics downstream de `pre.002` et `pre.003` restent inchangés et continuent d'utiliser un fallback `_`. ## Firewalls négatifs Le scan de production inclut désormais les deux modules acquisition. Un canari spécifique interdit dans `slot_lifecycle.rs` et `transaction_execution.rs` les paths de : ```text Config Logging Transport Store reqwest serde Solana instruction Tauri Tokio Tonic tracing borsh/bincode/wincode ``` Le manifeste `ksp-interface-lib` reste Core-only et inchangé. ## Hors scope Toujours interdits/reportés : ```text converters Transport -> Interface provider DTOs Store RAW serde/codecs runtime/channels logging TransactionLogEvent TransactionCommitmentEvent ``` ## Fichiers Modifiés : ```text Cargo.toml crates/ksp-interface-lib/tests/dependency_boundary.rs crates/ksp-interface-lib/tests/external_consumer.rs crates/ksp-interface-lib/tests/release_completeness.rs docs/validation/022-V0_3_5_INTERFACE_ACQUISITION_EVENTS.md ``` Ajouté : ```text deltas/0.3.5/pre.004.md ``` Explicitement inchangés : ```text crates/ksp-interface-lib/Cargo.toml crates/ksp-interface-lib/src/** crates/ksp-interface-lib/unit_tests/** crates/ksp-onchain-transport-lib/** crates/ksp-store-api/** crates/ksp-store-lib/** crates/ksp-store-postgres-lib/** crates/ksp-program-api/** 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 restent à exécuter par l'opérateur.