← Commit history
rust/crates/kicad-bridge/src/groups.rs+3
@@ -19,6 +19,9 @@ pub static GROUPS: &[Group] = &[     Group { name: "lint", verbs: || crate::verbs_lint::VERBS, dispatch: crate::verbs_lint::dispatch },     Group { name: "libraries", verbs: || crate::verbs_libraries::VERBS, dispatch: crate::verbs_libraries::dispatch },     Group { name: "maint", verbs: || crate::verbs_maint::VERBS, dispatch: crate::verbs_maint::dispatch },+    Group { name: "schematic", verbs: || crate::verbs_schematic::VERBS, dispatch: crate::verbs_schematic::dispatch },+    Group { name: "misc", verbs: || crate::verbs_misc::VERBS, dispatch: crate::verbs_misc::dispatch },+    Group { name: "install", verbs: || crate::verbs_install::VERBS, dispatch: crate::verbs_install::dispatch }, ];  pub fn dispatch(state: &mut State, command: &str, args: &Value) -> Option<Value> {
rust/crates/kicad-bridge/src/main.rs+3
@@ -11,10 +11,13 @@ mod catalog; mod groups; mod util; mod verbs;+mod verbs_install; mod verbs_libraries; mod verbs_lint; mod verbs_maint;+mod verbs_misc; mod verbs_netlist;+mod verbs_schematic;  use std::time::Instant; 
rust/crates/kicad-bridge/src/verbs_install.rsadded+11
@@ -0,0 +1,11 @@+//! Verb group "install". Placeholder until the port lands.+use serde_json::Value;++use crate::catalog::Verb;+use crate::util::State;++pub static VERBS: &[Verb] = &[];++pub fn dispatch(_state: &mut State, _command: &str, _args: &Value) -> Option<Value> {+    None+}
rust/crates/kicad-bridge/src/verbs_libraries.rs+8−1
@@ -173,7 +173,14 @@ fn list_symbols(state: &mut State, args: &Value) -> Value {     let v = libraries::kicad_parser_verdict(ctx.kicad_cli.as_deref(), &lib_path, Duration::from_secs(60));     let available = v["available"].as_bool().unwrap_or(false);     let ok = v["ok"].as_bool().unwrap_or(false);-    if available && !ok {+    if available && v["timedOut"].as_bool().unwrap_or(false) {+        // A deadline is not a refusal. Large stock libraries (Device has 500+ symbols) take+        // kicad-cli longer than 60 s to plot; the structural list above is still right.+        out["_hint"] = json!(format!(+            "The {} name(s) above come from the bridge's own parser. kicad-cli's plot check did not finish within 60 s on this library (large libraries take longer), so KiCad's own verdict is unknown, not negative. For a definitive check run kicad_lint_library on the file.",+            names.len()+        ));+    } else if available && !ok {         out["_hint"] = json!(format!(             "KiCad REFUSES this library ('{}'); the Symbol Editor shows it empty regardless of the {} name(s) above. kicad_adom_library_heal {{\"mode\":\"prune\"}} names the refused symbol(s).",             v["error"].as_str().unwrap_or(""), names.len()
rust/crates/kicad-bridge/src/verbs_misc.rsadded+11
@@ -0,0 +1,11 @@+//! Verb group "misc". Placeholder until the port lands.+use serde_json::Value;++use crate::catalog::Verb;+use crate::util::State;++pub static VERBS: &[Verb] = &[];++pub fn dispatch(_state: &mut State, _command: &str, _args: &Value) -> Option<Value> {+    None+}
rust/crates/kicad-bridge/src/verbs_schematic.rsadded+11
@@ -0,0 +1,11 @@+//! Verb group "schematic". Placeholder until the port lands.+use serde_json::Value;++use crate::catalog::Verb;+use crate::util::State;++pub static VERBS: &[Verb] = &[];++pub fn dispatch(_state: &mut State, _command: &str, _args: &Value) -> Option<Value> {+    None+}
rust/crates/kicad-core/src/bridge_log.rsadded+1
@@ -0,0 +1 @@+//! Placeholder: filled in by the phase 1 port.
rust/crates/kicad-core/src/kicad_common.rsadded+1
@@ -0,0 +1 @@+//! Placeholder: filled in by the phase 1 port.
rust/crates/kicad-core/src/lib.rs+4
@@ -9,3 +9,7 @@ pub mod design_rules; pub mod model_check; pub mod pcm; pub mod updates;+pub mod schematic;+pub mod kicad_common;+pub mod render;+pub mod bridge_log;
rust/crates/kicad-core/src/libraries.rs+1−1
@@ -847,7 +847,7 @@ pub fn kicad_parser_verdict(cli: Option<&Path>, lib_path: &Path, timeout: Durati     let r = crate::cli::run(cli, &["sym", "export", "svg", "-o", out_s.as_str(), lib_s.as_str()], timeout);     let _ = std::fs::remove_dir_all(&out_dir);     if r.timed_out {-        return json!({"available": true, "ok": false, "symbols": [], "units": 0,+        return json!({"available": true, "ok": false, "timedOut": true, "symbols": [], "units": 0,                       "error": format!("kicad-cli did not answer within {}s", timeout.as_secs())});     }     let text = format!("{}\n{}", r.stdout, r.stderr);
rust/crates/kicad-core/src/render.rsadded+1
@@ -0,0 +1 @@+//! Placeholder: filled in by the phase 1 port.
rust/crates/kicad-core/src/schematic.rsadded+1
@@ -0,0 +1 @@+//! Placeholder: filled in by the phase 1 port.