← Commit history

1.0.100: 1.0.100: kicad_update_pcb sets every new part's reference, whichever way its library wrote it (#138), and the verbs ruled on standard #29.

Colby Knox ·849806b180 ·8d ago ·parent 85f32a2
- **#138 fixed:** new parts could keep their library's REF** placeholder and read as missing, because the verb only recognised KiCad's own spacing of the reference. It now handles any spacing or line breaks, bare words and the older fp_text form, and adds the field if the footprint has none. The value is set the same way. - **New refusal:** a part that still doesn't read back with its reference now stops the update with reference_not_set and names the footprint, instead of being written to the board. - **Boards already updated:** a board that already has REF** parts isn't repaired by running the update again. Start from the empty board, or set those references from the matching symbols. - **New verbs:** - **kicad_place_parts:** footprints from a library onto a board, with position, rotation and side, read back. Each part is its own Undo step. - **kicad_edit_tracks:** width, layer and ends of given tracks, as one Undo step. - **kicad_extensions:** list, install or remove plugins through KiCad's Plugin and Content Manager. - **kicad_preferences:** read KiCad's settings by dotted path, or change them. set is refused with reason:"tool_running" while KiCad runs. - **kicad_cancel_run:** stops a background Freerouting job. Nothing from that run reaches the board. - **kicad_physical_properties:** answers not_supported, because KiCad has no materials or masses on a part. - **Standard's shape on existing verbs:** - kicad_sch_label, kicad_sch_no_connect and kicad_sch_wire take sheet and id. kicad_sch_label takes remove:true. - kicad_select_items takes clear and where, and names each designator it couldn't select in failed. where:"sheet" is refused, because the Schematic Editor has no API. Changed: one unknown designator no longer refuses the whole list. - kicad_model_check adds parts and checked, with found and hasGeometry per model. Tested on KiCad 10.0.8 (battery 376/0/1 pass/fail/skip on DESKTOP-BAR6S0F).
1 file changed +8−2
README.md+8−2
@@ -257,7 +257,7 @@ viewer. This is how every 3D shot above exists.  <!-- verbs:start (tools/readme_verbs.py writes this) --> -Every verb of this build (355, `kicad_describe` is the live catalog with inputs, hints and pitfalls). A name marked *standard* is the EDA Bridge Standard's name for the verb after the arrow.+Every verb of this build (361, `kicad_describe` is the live catalog with inputs, hints and pitfalls). A name marked *standard* is the EDA Bridge Standard's name for the verb after the arrow.  **Board model and reads (EDA Bridge Standard)** (12) @@ -477,7 +477,7 @@ Every verb of this build (355, `kicad_describe` is the live catalog with inputs, | `kicad_project_rename` | Rename a project: the .kicad_pro, root .kicad_sch, .kicad_pcb, .kicad_prl (and .kicad_dru, backups folder), with the references inside updated (project file entries, every schematic's instance headers, the board's sheet references and title). Refused while KiCad has the project open. | | `kicad_project_snapshot` | Timestamped copy of the project's files into <project>/snapshots/<stamp>[-label]/, plus schematic and board PDFs made with kicad-cli. | -**Windows, editors, install and the bridge** (172)+**Windows, editors, install and the bridge** (178)  | Verb | What it does | |---|---|@@ -503,6 +503,7 @@ Every verb of this build (355, `kicad_describe` is the live catalog with inputs, | `kicad_build_board` | Build a NEW board from a parts list and a netlist: the outline (a rectangle with rounded corners allowed, or a polygon), every footprint from its library placed by its own origin, pad nets assigned, saved; then read back pin by pin. | | `kicad_build_schematic` | Draw a design's schematic from its netlist with library symbols, as a new sheet (and project): one column per block, every part placed, a wire stub and a net label on every connected pin, the title block filled; then KiCad's netlist of it checked against the nets given, pin by pin, and ERC run. | | `kicad_build_symbol_modes` | Give a library symbol its De Morgan alternate body (KiCad's second display mode): the alternate drawing for every unit, the standard body's pins copied with any pin shapes changed (inverted inputs), and the symbol marked as having two body styles. |+| `kicad_cancel_run` | Stop the bridge's own long job (the standard's cancel_run): a kicad_autoroute Freerouting job in the background, keeping what is done. Nothing else in KiCad can be interrupted from outside. | | `kicad_check_dialogs` | List every KiCad dialog open right now, classified, each with its buttons, what it means and what is safe to do, and a screenshot (the standard's check_dialogs). Answers nothing, closes nothing. | | `kicad_check_for_updates` | Read-only: installed KiCad vs latest stable. | | `kicad_check_orientation` | Advisory: two-pad parts whose rotation could be better. Each part is scored at 0, 90, 180 and 270 degrees by airline length (a net's spanning tree, or for a plane-like net the distance to its nearest pad); parts whose best turn saves minImprovementMm are listed. Nothing is moved. |@@ -533,10 +534,12 @@ Every verb of this build (355, `kicad_describe` is the live catalog with inputs, | `kicad_document_info` | The active KiCad document (the topmost KiCad window): its name, kind (board, schematic, library, project, model), whether it has unsaved changes, where it is saved, and its project (the standard's document_info). Read only; opens nothing. | | `kicad_edit_parts` | *standard* → `kicad_edit_footprint` | | `kicad_edit_pours` | Change existing copper pours (zones) in place without redrawing them: clearance, minimum width, thermal reliefs (on/off, spoke width, gap) or the pad connection, priority, the net, and whether islands are kept; then refill (the standard's edit_pours). |+| `kicad_edit_tracks` | Change given tracks by their routing_state id: width, layer and ends (the standard's edit_tracks). One Undo step, read back. | | `kicad_enable_software_opengl` | LAST-RESORT fallback: deploy Mesa llvmpipe software OpenGL into KiCad's bin so it renders on a GPU-less host (Hyper-V/RDP/headless). SLOW (CPU). Never suggest proactively. | | `kicad_ensure_licensed` | One call to a usable KiCad (the standard's ensure_licensed): KiCad needs no seat or sign-in, so this says it is free and starts it if it is not running. | | `kicad_eval` | Run a Python snippet with KiCad's pcbnew module, headless: with filePath the board is loaded as `board`; set `result` to return a value as JSON. | | `kicad_extension_ping` | Ping the bridge's extension inside the tool (the standard's extension_ping). Not in KiCad: KiCad needs no extension installed inside it: its IPC API is built in, so there is nothing to install, ping or keep a receipt for. |+| `kicad_extensions` | KiCad's plugins and add-ons through its Plugin and Content Manager (the standard's extensions): list what is installed, install one, remove one. | | `kicad_extract_netlist` | Extract the full netlist from a schematic: every component and every net with its nodes (read-only, via kicad-cli). | | `kicad_find_connections` | Everything one component connects to, pin by pin, with peer pins per net (read-only). | | `kicad_find_space` | Free spots on the board for a part near another: clear of every other part's courtyard on that side, of that side's tracks and vias, and inside the outline, nearest first. check:true lists parts that already overlap or leave the outline. |@@ -578,13 +581,16 @@ Every verb of this build (355, `kicad_describe` is the live catalog with inputs, | `kicad_panelize` | Step a rectangular board into a manufacturing panel: rows x cols copies, each copy's nets renamed B<n>-<net>, rails, three tooling holes and three fiducials; separated by V-score (copies abutting, V-cut lines on Cmts.User) or mouse-bite tabs (copies a gap apart, the rout path on Edge.Cuts broken at the tabs, five 0.6 mm holes a tab), with JLCPCB's panel rules checked; written as a new board and checked with KiCad's DRC. | | `kicad_part_parameters` | The parameter (field) names a project's placed parts carry, with how many parts carry each; or, with name, that parameter's value on every part. Read only. | | `kicad_pcb_report` | Numbers instead of pixels (the standard's pcb_report): for a footprint library, every footprint's pads, pad box, primitive census and 3D bodies; for a board, outline, parts with nets and bodies, census and tracks. |+| `kicad_physical_properties` | Volume, mass and centre of mass per part (the standard's physical_properties). Not in KiCad: it has no materials or masses on a part. | | `kicad_pin_pad_check` | Do the footprints fit their symbols? Part by part, the symbol's pin numbers (every pin, from the schematic's netlist) against the footprint's pad numbers on the board: pins with no pad, pads with no pin, and parts only on the sheets or only on the board. | | `kicad_place_footprint` | Deterministically place a footprint into a board preview. | | `kicad_place_on_sch` | Place one symbol or a ';' list of symbols from a .kicad_sym on ONE new sheet, sized from the measured parts (12.7 mm gaps, 15.24 mm margins, A4 at least), each with the next free designator and its name as the value; fills the title block. |+| `kicad_place_parts` | Put footprints from a library onto a board, each with its position, rotation and side (the standard's place_parts), and read them back. | | `kicad_placement_check` | A placement review before routing: parts whose pads and 3D bodies come closer than a margin on the same side, parts off the board or over its edge, pads too close to the edge for assembly and depanelling, and parts on a mounting hole. | | `kicad_plan_route` | Plan a path for one net between two pads without changing the board: a grid search around the existing copper that keeps the clearance rules, on the allowed copper layers, with vias where they help. Answered as kicad_route_net's own arguments. | | `kicad_plate_vias` | Make every drilled pad in a footprint library a plated hole through every copper layer (thru_hole, *.Cu *.Mask): a thru_hole pad on only some copper layers, or an smd pad with a drill (thermal vias written as surface pads). Numbered unplated holes are listed, and plated only with includeNpth. | | `kicad_plugin_diagnose` | Retired: reports that no plugin is expected and whether a leftover Python plugin payload is still on disk. |+| `kicad_preferences` | Read KiCad's own settings, all or one by dotted path, or change them with set (the standard's preferences). KiCad rewrites its settings on exit, so set is refused while it runs. | | `kicad_prewarm` | Get this machine ready for a fast first KiCad call: detect KiCad, seed its first-run config, mark its setup wizard done, repair its taskbar shortcuts. Idempotent. | | `kicad_progress` | What this bridge is doing RIGHT NOW: one progress block per in-flight phase for THIS caller (stepLabel, percent, etaSec, confidence, blockedBy, stepShot), plus the machine's timing history. | | `kicad_read_board` | The whole board in one read (the standard's read_board): components, nets, layers, copper, rules, occupancy and outline, from the open PCB editor when it serves the board, else the file. |