# Delta `0.3.16-pre.007-fix.001` — réalignement des canaris Worker et PostgreSQL ## Base requise ```text 0.3.16-pre.007 appliqué workspace.package.version = 0.3.16-pre.7 ``` Le gate opérateur de `pre.007` confirme que les audits Rust/export/KSP/Markdown sont propres, que `cargo check --workspace` passe et que les suites Store API et Store façade exécutées avant les défauts sont vertes. Deux défauts de tests bloquent ensuite le gate : 1. un test Worker compare avec `assert_eq!` un `Result`, alors que `ksp_core_lib::Error` n'implémente volontairement pas `PartialEq` ; 2. un test PostgreSQL hérité de `pre.005` attend encore qu'une divergence active soit retournée comme `PostgresBackendErrorKind::Conflict`, alors que `pre.007` la classe désormais comme `ExistingTransactionMatch::ActiveConflict(...)` afin de permettre sa quarantaine durable. Aucun des deux défauts ne nécessite une modification runtime. ## Version Le correctif modifie des tests Rust et synchronise donc la version Cargo : ```text workspace.package.version = 0.3.16-pre.7.fix.1 ``` ## Correction Worker Le test `v0_3_16_pre_007_durable_conflict_is_non_terminal_and_degrades_health` conserve exactement la même exigence fonctionnelle : après une quarantaine durable, le Worker reste contrôlable et un stop explicite doit terminer en `WorkerState::Stopped`. L'assertion n'utilise plus `assert_eq!` sur le `Result` complet. Elle vérifie la variante de succès avec `matches!`, ce qui ne requiert pas `PartialEq` sur le type d'erreur. ## Correction PostgreSQL Le test `pre_005_existing_full_content_requires_exact_payload_equality_not_hash_only` conserve son objectif historique : un hash identique ne suffit jamais à déclarer deux payloads exacts. Sous le contrat `pre.007`, une divergence d'une transaction active n'est toutefois plus une erreur backend terminale. Le comparateur PostgreSQL doit retourner : ```text ExistingTransactionMatch::ActiveConflict(_) ``` Le test exige désormais ce résultat pour : - la fixture volontairement différente en contenu/slot ; - le cas de même hash avec bytes de payload différents. Le cas exact reste `ExistingTransactionMatch::Active`, et le comportement particulier des tombstones `Purged` n'est pas modifié. ## Fichiers modifiés ```text Cargo.toml crates/ksp-store-postgres-lib/unit_tests/raw_transaction.rs crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/runtime.rs ``` ## Fichier ajouté ```text deltas/0.3.16/pre.007-fix.001.md ``` ## Fichiers supprimés ```text aucun ``` ## Validations exécutées lors de la génération ```bash 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 ``` Le toolchain Rust n'est pas installé dans l'environnement de génération. `cargo fmt`, `cargo check`, Clippy et les tests Cargo ne sont donc pas déclarés exécutés ici. ## Validations opérateur demandées ```bash cargo fmt --all cargo fmt --all -- --check 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 cargo check --workspace cargo clippy --workspace --all-targets --all-features -- -D warnings cargo test -p ksp-store-api --all-targets --all-features cargo test -p ksp-store-lib --all-targets --all-features cargo test -p ksp-store-postgres-lib --all-targets --all-features cargo test -p ksp-job-backfill-lib --all-targets --all-features cargo test -p ksp-worker-raw-transaction-ingest-lib --all-targets --all-features ``` ## Décisions prises - aucune logique runtime de `pre.007` n'est modifiée ; - `ksp_core_lib::Error` n'est pas rendu `PartialEq` uniquement pour satisfaire un test ; - les divergences actives restent explicitement classées `ActiveConflict` afin d'alimenter le chemin de quarantaine durable ; - le test de collision de hash continue d'exiger une comparaison byte-exacte ; - les conflits portant sur une transaction `Purged` conservent leur comportement fail-closed existant. ## Questions ouvertes Aucune question bloquante. ## Suite Après gate propre : `0.3.16-pre.008` — hardening concurrence/rollback et régressions finales Store/Backfill/Worker.