4.3 KiB
Delta 0.3.16-pre.007-fix.001 — réalignement des canaris Worker et PostgreSQL
Base requise
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 :
- un test Worker compare avec
assert_eq!unResult<WorkerState, ksp_core_lib::Error>, alors queksp_core_lib::Errorn'implémente volontairement pasPartialEq; - un test PostgreSQL hérité de
pre.005attend encore qu'une divergence active soit retournée commePostgresBackendErrorKind::Conflict, alors quepre.007la classe désormais commeExistingTransactionMatch::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 :
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 :
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
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é
deltas/0.3.16/pre.007-fix.001.md
Fichiers supprimés
aucun
Validations exécutées lors de la génération
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
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.007n'est modifiée ; ksp_core_lib::Errorn'est pas renduPartialEquniquement pour satisfaire un test ;- les divergences actives restent explicitement classées
ActiveConflictafin 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
Purgedconservent 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.