From da13b99b75c93d4e5145b39e73492f93e2fffc59 Mon Sep 17 00:00:00 2001 From: teernisse Date: Thu, 26 Feb 2026 10:16:42 -0500 Subject: [PATCH] fix: add missing specta annotations, scope tmp cleanup, and secure state file permissions --- src-tauri/src/commands/mod.rs | 24 ++++++++++++------------ src-tauri/src/data/bridge.rs | 8 ++++---- src-tauri/src/lib.rs | 7 ++++--- 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/src-tauri/src/commands/mod.rs b/src-tauri/src/commands/mod.rs index 87d5ac9..19e800f 100644 --- a/src-tauri/src/commands/mod.rs +++ b/src-tauri/src/commands/mod.rs @@ -29,9 +29,9 @@ pub struct LoreStatus { /// Summary counts from lore for the status response #[derive(Debug, Clone, Serialize, Type)] pub struct LoreSummaryStatus { - pub open_issues: usize, - pub authored_mrs: usize, - pub reviewing_mrs: usize, + pub open_issues: u32, + pub authored_mrs: u32, + pub reviewing_mrs: u32, } /// Get the current status of lore integration by calling the real CLI. @@ -47,9 +47,9 @@ fn get_lore_status_with(cli: &dyn LoreCli) -> Result { Ok(true) => match cli.get_me() { Ok(response) => { let summary = LoreSummaryStatus { - open_issues: response.data.open_issues.len(), - authored_mrs: response.data.open_mrs_authored.len(), - reviewing_mrs: response.data.reviewing_mrs.len(), + open_issues: response.data.open_issues.len() as u32, + authored_mrs: response.data.open_mrs_authored.len() as u32, + reviewing_mrs: response.data.reviewing_mrs.len() as u32, }; Ok(LoreStatus { last_sync: response.data.since_iso.clone(), @@ -95,11 +95,11 @@ fn get_lore_status_with(cli: &dyn LoreCli) -> Result { #[derive(Debug, Clone, Serialize, Type)] pub struct BridgeStatus { /// Total mapped items - pub mapping_count: usize, + pub mapping_count: u32, /// Items with pending bead creation - pub pending_count: usize, + pub pending_count: u32, /// Items flagged as suspect orphan (first strike) - pub suspect_count: usize, + pub suspect_count: u32, /// Last incremental sync timestamp pub last_sync: Option, /// Last full reconciliation timestamp @@ -131,9 +131,9 @@ fn get_bridge_status_inner( let map = bridge.load_map()?; Ok(BridgeStatus { - mapping_count: map.mappings.len(), - pending_count: map.mappings.values().filter(|e| e.pending).count(), - suspect_count: map.mappings.values().filter(|e| e.suspect_orphan).count(), + mapping_count: map.mappings.len() as u32, + pending_count: map.mappings.values().filter(|e| e.pending).count() as u32, + suspect_count: map.mappings.values().filter(|e| e.suspect_orphan).count() as u32, last_sync: map.cursor.last_check_timestamp, last_reconciliation: map.cursor.last_reconciliation, }) diff --git a/src-tauri/src/data/bridge.rs b/src-tauri/src/data/bridge.rs index 29d2266..055799e 100644 --- a/src-tauri/src/data/bridge.rs +++ b/src-tauri/src/data/bridge.rs @@ -113,13 +113,13 @@ impl MappingKey { #[derive(Debug, Default, Serialize, Type)] pub struct SyncResult { /// Number of new beads created - pub created: usize, + pub created: u32, /// Number of existing items skipped (dedup) - pub skipped: usize, + pub skipped: u32, /// Number of beads closed (two-strike) - pub closed: usize, + pub closed: u32, /// Number of suspect_orphan flags cleared (item reappeared) - pub healed: usize, + pub healed: u32, /// Errors encountered (non-fatal, processing continued) pub errors: Vec, } diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index a62cf98..ecec932 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -9,6 +9,7 @@ pub mod commands; pub mod data; pub mod error; +pub mod sync; pub mod watcher; use tauri::menu::{MenuBuilder, MenuItemBuilder}; @@ -109,9 +110,6 @@ pub fn run() { tracing::info!("Starting Mission Control"); // Build tauri-specta builder for type-safe IPC - // Note: read_state/write_state/clear_state use serde_json::Value which doesn't - // implement specta::Type, so they're excluded from the builder but kept in - // the invoke_handler via generate_handler! let builder = Builder::::new().commands(collect_commands![ commands::greet, commands::get_lore_status, @@ -119,6 +117,9 @@ pub fn run() { commands::sync_now, commands::reconcile, commands::quick_capture, + commands::read_state, + commands::write_state, + commands::clear_state, ]); // Export TypeScript bindings in debug builds