# Delta `0.3.5-pre.005` — hardening et complétude Interface ## Base requise ```text 0.3.5-pre.4 ``` Le gate opérateur de `pre.004` est entièrement propre : audits Rust/Markdown, `cargo check --workspace`, Clippy, tests `ksp-interface-lib` et `ksp-program-api` passent. ## Version La tranche ajoute/modifie des sources Rust de test/canari. La version workspace devient : ```text 0.3.5-pre.5 ``` ## Mission Fermer le hardening fonctionnel de `0.3.5` sans ajouter de troisième famille Interface ni modifier les contrats de production admis : ```text SlotLifecycleEvent / SlotLifecycleStage TransactionExecutionEvent / TransactionExecutionOutcome / TransactionSignature ``` ## Hardening adversarial Le nouveau `tests/security_hardening.rs` vérifie : - conservation byte-exact d'une signature hostile de 64 octets ; - redaction de la signature dans son `Debug` et dans celui de `TransactionExecutionEvent` ; - conservation de `u64::MAX` sans narrowing ; - structure minimale exacte des deux events ; - absence de collection/payload/timestamp/provider/endpoint/filter/network dans les contrats acquisition ; - absence de second RAW ou de famille reportée exportée silencieusement ; - non-régression des bornes `ProgramInstruction` historiques. ## Graphe et dépendances `tests/dependency_boundary.rs` ajoute un canari final imposant : ```text une seule section [dependencies] exactement une référence ksp-core-lib aucune [features] aucune [dev-dependencies] aucune [build-dependencies] ``` Le manifeste `ksp-interface-lib` reste inchangé et Core-only. ## Candidats reportés Aucun candidat reporté n'est promu par hardening : ```text TransactionLogEvent -> idée différée TransactionCommitmentEvent -> reporté VoteEvent -> reporté LedgerEntryEvent -> reporté Account/Program RAW event -> rejet Interface Transaction complète -> rejet Interface Block event -> rejet Interface Persisted-data available -> Store API owner ``` `TransactionLogEvent` devra être transféré vers TODO/IDEAS durable pendant `pre.007` s'il reste hors scope. ## Fichiers Modifiés : ```text Cargo.toml crates/ksp-interface-lib/tests/dependency_boundary.rs docs/validation/022-V0_3_5_INTERFACE_ACQUISITION_EVENTS.md ``` Ajoutés : ```text crates/ksp-interface-lib/tests/security_hardening.rs deltas/0.3.5/pre.005.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 ``` ## Validations exécutées dans l'environnement d'assemblage ```text 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 ``` ## Validations non exécutées dans l'environnement d'assemblage `cargo` n'est pas installé dans le sandbox d'assemblage. Restent donc à exécuter côté opérateur : ```text cargo fmt --all cargo check --workspace cargo clippy --workspace --all-targets cargo test -p ksp-interface-lib cargo test -p ksp-program-api ``` ## Décisions - deux familles acquisition exactement restent admises ; - aucun contrat production n'est modifié ; - aucun nouveau bound métier n'est inventé ; - la signature reste une primitive passive fixe de 64 octets sans codec ; - aucune metadata source/provider n'entre dans Interface ; - aucun second RAW n'est créé ; - Program instruction foundation reste inchangée. ## Questions ouvertes Aucune question fonctionnelle bloquante pour `pre.006`. La seule idée différée explicitement à conserver durablement est `TransactionLogEvent`.