Files
khadhroony-solana-project/deltas/0.3.16/pre.007-fix.001.md

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 :

  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 :

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.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.