0.3.15-pre.012-fix.001

This commit is contained in:
2026-09-16 11:38:02 +02:00
parent 31ae38853d
commit 1c28f3155f
6 changed files with 130 additions and 22 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/032-V0_3_15_RAW_TRANSACTION_INGEST_DESK.md -->
<!-- version: 22 -->
<!-- version: 23 -->
# Validation v0.3.15 — Raw Transaction Ingest Desk
@@ -794,4 +794,13 @@ pre_012_race_shutdown_and_ipc_hardening_adds_no_production_module_or_lower_layer
```
Non-claims : `pre.012` ne modifie ni Config, ni Transport, ni Store, ni `ksp-worker-raw-transaction-ingest-lib`, ni Common RAW. Il n'ajoute aucune orchestration Backfill, aucun scheduler, aucune route et aucune nouvelle donnée frontend. `pre.013` reste propriétaire de la fermeture completeness/security cross-layer.
### `pre.012-fix.001` — future Tauri Start `Send`
Le gate opérateur de `pre.012` a arrêté la tranche sur un défaut de compilation déterministe dans `AppState::start_route` : le `std::sync::MutexGuard<u32>` de `inventory_generation` restait considéré vivant au franchissement du `await` final, malgré `std::mem::drop(generation)`. Le futur exposé par la commande Tauri `start_route` ne satisfaisait donc plus la borne `Send` imposée par `tauri::ipc::ResultFutureTag::future`. Les audits Rust/Markdown étaient propres et les suites Worker indépendantes restaient vertes, mais `cargo check`, Clippy, les tests Desk/workspace et `cargo tauri dev` ne pouvaient pas compiler le Desk.
Le fix ne change aucune sémantique Start/Stop. Lock + revalidation/préparation synchrones sont désormais enfermés dans une portée lexicale `let prepared = { ... };`. Le `MutexGuard` est donc détruit structurellement à la fin du bloc avant tout `await`. Le contrat stale-inventory de `pre.012` reste inchangé : la génération demeure verrouillée pendant toute la reconstruction synchrone, mais aucun guard non-`Send` ne traverse une suspension asynchrone.
Un canari de compilation `pre_012_fix_001_start_route_future_is_send_for_tauri_command` impose explicitement le type `Future<...> + Send` au futur retourné par `AppState::start_route`. Le canari desktop vérifie également la portée lexicale et interdit le retour au simple `std::mem::drop(generation)` comme preuve de lifetime.
Non-claims : aucune modification de route, Config, Transport, Store, Worker, Common RAW, monitoring, shutdown ou sécurité IPC.