116 lines
4.3 KiB
Markdown
116 lines
4.3 KiB
Markdown
<!-- 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.
|