0.3.16-pre.007-fix.001

This commit is contained in:
2026-09-22 06:27:44 +02:00
parent d768737629
commit 410e6f7536
4 changed files with 121 additions and 6 deletions

View File

@@ -0,0 +1,115 @@
<!-- file: deltas/0.3.16/pre.007-fix.001.md -->
<!-- version: 1 -->
# 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<WorkerState, ksp_core_lib::Error>`, 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.