← Commit history

1.0.49: 1.0.49: kicad_open_footprint_editor no longer blames a stock library for a failed load. The 1.0.37 diagnosis (wiki #111) said library_not_loaded_by_running_kicad for any library found on disk, including Resistor_SMD, which every KiCad loads at start through its nested template table. It now says that only for a row in the user's own fp-lib-table, the only kind that can be added after KiCad starts; everything else stays navigation_failed.

John Lauer ·880f3bbf2b ·1mo ago ·parent 30a72d0
3 files changed +16−4
rust/Cargo.lock+3−3
@@ -244,7 +244,7 @@ dependencies = [  [[package]] name = "kicad-bridge"-version = "1.0.48"+version = "1.0.49" dependencies = [  "kicad-core",  "kicad-platform",@@ -255,7 +255,7 @@ dependencies = [  [[package]] name = "kicad-core"-version = "1.0.48"+version = "1.0.49" dependencies = [  "kicad-ipc-rs",  "kicad-platform",@@ -281,7 +281,7 @@ dependencies = [  [[package]] name = "kicad-platform"-version = "1.0.48"+version = "1.0.49" dependencies = [  "serde",  "serde_json",
rust/Cargo.toml+1−1
@@ -3,7 +3,7 @@ resolver = "2" members = ["crates/*"]  [workspace.package]-version = "1.0.48"+version = "1.0.49" edition = "2021" license = "MIT" publish = false
rust/crates/kicad-bridge/src/verbs_windows.rs+12
@@ -517,6 +517,13 @@ fn spawn_background(exe: &Path, args: &[String], tag: &str, trace_masks: Option<     Ok((pid, log)) } +/// Is `name` a row of the user's own fp-lib-table (not only reachable through a nested table)?+fn user_table_row(ctx: &LibCtx, name: &str) -> bool {+    ctx.fp_lib_table()+        .and_then(|p| kicad_core::libraries::LibTable::parse_file(&p).ok())+        .is_some_and(|t| t.entries.iter().any(|e| e.name == name && !e.lib_type.eq_ignore_ascii_case("Table")))+}+ /// Before a KiCad process starts, and only while none runs: mark KiCad's setup wizard as done so /// it never pops up in front of the user (see kicad_common::mark_first_run_done). fn skip_setup_wizard() {@@ -2064,6 +2071,11 @@ pub(crate) fn open_footprint_editor(state: &mut State, args: &Value) -> Value {                 v["availableFootprints"] = json!(info.footprints.iter().take(40).collect::<Vec<_>>());                 v["_hint"] = json!("Pick a name from availableFootprints (kicad_list_footprints {library} has the full list).");             }+            // Only a row in the user's OWN table can have been added after KiCad started. A stock+            // library (reached through KiCad's nested template table) is loaded by every KiCad at+            // start, so for those the failure is the navigation itself: keep navigation_failed+            // (1.0.37 blamed Resistor_SMD on "registered after launch", AdomLapper 2026-09-21).+            Some(_) if !user_table_row(&ctx, &library_name) => {}             Some((_, info)) => {                 v["errorCode"] = json!("library_not_loaded_by_running_kicad");                 v["libraryOnDisk"] = json!(info.path);