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