Files
khadhroony-solana-project/deltas/0.3.14/pre.008-fix.001.md

4.8 KiB

Delta 0.3.14-pre.008-fix.001 — libération du guard avant await

Base requise

0.3.14-pre.008
workspace.package.version = 0.3.14-pre.8
deltas/0.3.14/pre.008.md présent

Objectif

Corriger strictement la tranche pre.008 après le gate opérateur, sans modifier sa responsabilité fonctionnelle :

rendre le future du supervisor Send
ne jamais conserver un std::sync::MutexGuard à travers un await
préserver exactement la décision source-loss de pre.008
ne pas avancer la health policy prévue en pre.009

Défaut observé

Le gate opérateur de 0.3.14-pre.008 a produit :

cargo fmt --all : PASS
cargo fmt --all -- --check : PASS
audit Rust workspace rules : PASS
audit Markdown tables : PASS
cargo check --workspace : FAIL
cargo clippy --workspace --all-targets --all-features -- -D warnings : FAIL
cargo test -p ksp-worker-raw-transaction-ingest-lib --all-targets --all-features : compilation impossible sur le même défaut Send

Le compilateur refuse le future de supervise_live_source_tasks :

future cannot be sent between threads safely
std::sync::MutexGuard<RawTransactionIngestSourceInventory> is not Send
await dans drain_live_source_tasks alors que le guard peut encore être vivant

Cause

pre.008 appelait inventory.supervisor_state() dans un bloc qui contenait aussi la branche d'erreur avec drain_live_source_tasks(...).await.

Même si le guard n'est pas utilisé après supervisor_state(), sa portée lexicale englobait la branche asynchrone. Le compilateur devait donc considérer que le std::sync::MutexGuard pouvait traverser l'await, ce qui rendait le future non-Send et interdisait son utilisation dans JoinSet::spawn et tokio::spawn.

Correction

La lecture synchronisée de l'inventaire est séparée en deux étapes :

1. verrouiller inventory et calculer supervisor_state() dans un bloc strictement synchrone
2. sortir de ce bloc, donc détruire le MutexGuard
3. seulement ensuite traiter Result et éventuellement await drain_live_source_tasks(...)

Aucun tokio::Mutex n'est introduit. Aucun lock n'est conservé pendant une attente asynchrone.

La valeur, les erreurs et les décisions issues de supervisor_state() restent identiques.

Fichiers ajoutés

deltas/0.3.14/pre.008-fix.001.md

Fichiers modifiés

Cargo.toml
crates/ksp-worker-raw-transaction-ingest-lib/src/runtime_resources.rs

Fichiers supprimés

aucun

Version Cargo

Le fix modifie du code Rust ; conformément à VER-ID-007 et VER-ID-010 :

header Cargo.toml : 576 -> 577
workspace.package.version : 0.3.14-pre.8 -> 0.3.14-pre.8.fix.1

Version de fichier :

src/runtime_resources.rs : 35 -> 36

Frontières préservées

aucun changement de TargetCoverage
aucun changement de continuity frontier
aucun changement de coverage epoch
aucun changement de gap ledger
aucun changement de source-loss classification
aucun respawn Worker
aucun nouveau scheduler ou task
aucun changement Transport
aucune nouvelle requête HTTP
aucune nouvelle dépendance ou feature
aucun accès Config
aucun Job Backfill
aucun backend Store physique
aucune croissance de surface publique

Validations exécutées

Dans le sandbox de préparation :

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
inspection de la portée du MutexGuard autour de supervise_live_source_tasks
comparaison exacte pre.008 -> pre.008-fix.001
contrôle du contenu de l'archive delta
unzip -t de l'archive delta

Validations non exécutées

Le sandbox de préparation ne fournit pas le toolchain Cargo/Rust. Les gates suivants restent à exécuter côté opérateur :

cargo fmt --all
cargo fmt --all -- --check
cargo check --workspace
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo test -p ksp-worker-raw-transaction-ingest-lib --all-targets --all-features

Décisions prises

fix strict de pre.008
réduction de portée lexicale du std::sync::MutexGuard
aucun passage à tokio::Mutex
aucun allow/expect lint
aucune modification fonctionnelle de la réconciliation
pre.009 reste la première tranche autorisée à modifier la health policy multi-source

Questions ouvertes

aucune pour ce fix

Gate opérateur après application

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-worker-raw-transaction-ingest-lib --all-targets --all-features