# Delta `0.3.3-pre.010` — hardening/completeness RawTransaction ## 1. Base acquise Base opérateur : ```text 0.3.3-pre.9.fix.6 ``` Le gate standard est entièrement propre et la preuve opt-in `postgres_raw_transaction_live` passe sur PostgreSQL 17. `pre.009`, corrections incluses, est donc fermée. ## 2. Version ```text workspace.package.version = 0.3.3-pre.10 ``` ## 3. Nature de la tranche `pre.010` est une tranche de hardening uniquement. Aucun fichier de production, aucune ressource SQL et aucune migration ne sont modifiés. Elle ajoute des canaris de complétude qui figent la vertical slice acquise avant le gate technique final. ## 4. Conformance des six capacités Les tests exigent exactement une implémentation de chacun des traits suivants sur `PostgresBackend` puis sur `Store` : ```text RawTransactionRead RawTransactionWrite RawTransactionObservationRead RawTransactionObservationWrite RawTransactionRetentionRead RawTransactionRetentionWrite ``` Le hardening refuse simultanément toute ouverture prématurée des quatre capacités `RawAccountState`/observation et toute ressource de migration `ksp_raw_account*`. ## 5. Hardening SQL privé Le canari backend fige les propriétés physiques utiles à la vertical slice : - keyset ASC/DESC sur `(slot, signature)` ; - `LIMIT` physique sans `OFFSET` ; - `FOR UPDATE` pour les chemins concurrents ; - `ON CONFLICT DO NOTHING` pour l’idempotence canonique ; - archive payload séparée ; - absence de `SELECT *`, `ON CONFLICT DO UPDATE`, `processing_state`, `batch_size` ou `priority`. Ce scan ne crée aucune policy worker dans Store. ## 6. Mapping d’erreurs exhaustif Les 18 variantes actuelles de `PostgresBackendErrorKind` sont toutes exercées : - dans `ksp-store-postgres-lib`, vers le contrat `ksp-store-api` ; - dans `ksp-store-lib`, vers les codes stables possédés par la façade. Le canari backend vérifie en plus que le rendu de l’erreur mappée ne contient ni URI PostgreSQL ni SQL. ## 7. Migrations Inchangées : ```text V000 d29068b8c13b9dc0cc9ef6aaadd0fa12d41e0fe4c56541a1118c4bfc846a1450 V001 31488cda2f08f3f46c4cdbdbb6c18c243662fada02eac4487040c8735d72cc51 ``` V001 reste à 40 ressources. ## 8. Fichiers modifiés ```text Cargo.toml crates/ksp-store-postgres-lib/tests/hardening_completeness.rs crates/ksp-store-postgres-lib/unit_tests/runtime.rs crates/ksp-store-lib/tests/hardening_completeness.rs crates/ksp-store-lib/unit_tests/store.rs docs/plans/024-V0_3_3_STORE_POSTGRES_RAW_TRANSACTION_PLAN.md docs/validation/020-V0_3_3_STORE_POSTGRES_RAW_TRANSACTION.md deltas/0.3.3/pre.010.md ``` Aucune suppression. ## 9. Gate opérateur attendu ```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/0.3.3 cargo check --workspace cargo clippy --workspace --all-targets cargo test -p ksp-store-api cargo test -p ksp-store-lib cargo test -p ksp-store-postgres-lib cargo test -p ksp-config-lib cargo check -p ksp-store-lib --no-default-features ``` Aucun nouveau live PostgreSQL n’est requis en `pre.010`, car le runtime et les migrations sont byte-identiques à la base live validée `pre.009-fix.006`. ## 10. Suite si le gate est vert ```text 0.3.3-pre.011 — gate technique final ```