# Delta `0.3.3-pre.010-fix.001` — correction du canari `ON CONFLICT` ## 1. Cause Le gate opérateur de `pre.010` est propre jusqu’au hardening PostgreSQL, où le test : ```text pre_010_raw_transaction_private_sql_keeps_keyset_navigation_and_bounded_statement_surface ``` échoue sur la recherche littérale : ```text ON CONFLICT DO NOTHING ``` Les statements de production sont pourtant volontairement ciblés : ```text ON CONFLICT (signature) DO NOTHING ON CONFLICT (observation_key) DO NOTHING ``` La sous-chaîne générique n’existe donc pas textuellement. Le défaut appartient au canari `pre.010`, pas au SQL de production. ## 2. Correction Le test exige désormais exactement les deux formes réellement requises : ```text ON CONFLICT (signature) DO NOTHING ON CONFLICT (observation_key) DO NOTHING ``` Les autres garanties restent inchangées : keyset ASC/DESC, `LIMIT`, `FOR UPDATE`, archive séparée, absence de `OFFSET`, `SELECT *`, `ON CONFLICT DO UPDATE` et policies worker. ## 3. Version ```text workspace.package.version = 0.3.3-pre.10.fix.1 ``` ## 4. Fichiers modifiés ```text Cargo.toml crates/ksp-store-postgres-lib/tests/hardening_completeness.rs docs/validation/020-V0_3_3_STORE_POSTGRES_RAW_TRANSACTION.md deltas/0.3.3/pre.010-fix.001.md ``` Aucune suppression. ## 5. Production et migrations Aucun fichier de production et aucune migration SQL ne sont modifiés. Checksums inchangés : ```text V000 d29068b8c13b9dc0cc9ef6aaadd0fa12d41e0fe4c56541a1118c4bfc846a1450 V001 31488cda2f08f3f46c4cdbdbb6c18c243662fada02eac4487040c8735d72cc51 ``` ## 6. Gate opérateur ```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 live PostgreSQL supplémentaire n’est requis : le runtime et les migrations restent byte-identiques à la base live validée de `pre.009-fix.006`.