Closed feature request

Report missing or unverified 3D component models with automatic diagnostics and AI hints

John Lauer · ·closed by John Lauer

KiCad 10.0.5; KiCad Bridge running 0.9.348 at initial observation, cache automatically advanced to 0.9.349 during the read-only recheck (state replies label 0.9.349); embedded pcbnew plugin 0.9.2; Adom Bridge 2.1.82; Hydrogen 1.0.297; Windows desktop, Linux CLI caller. No runtime was manually upgraded for this report.

The TMF8829-1A footprint's 3D viewer renders a board, exposed pads and silkscreen, but no sensor body. The user independently noticed the same failure. Please add automatic model diagnostics and actionable AI hints to the relevant show/state/export replies, rather than leaving this important distinction entirely to screenshot interpretation.

Reproduction observed on the live Adom:TMF8829-1A Footprint Editor:

  1. The saved footprint has (model "TMF8829-1A.manufacturer.step"), offset [-0.000081, 1.391917, 0.1827] mm, rotation [0,0,-90], scale [1,1,1]. The original manufacturer STEP was copied beside that footprint. This does not establish that KiCad resolves a bare relative filename there.
  2. Open/refresh its native 3D viewer. The attached background capture shows bare pads and no package body. SMD Models and Virtual Models appear enabled in the appearance panel. Exact cause is still under investigation; we are NOT asserting that a missing file is proven.
  3. kicad_state {"includeImages":false} returns success:true, running:true, a 3D Viewer window and no modal dialogs. kicad_errors {} returns success:true, count:0, dialogs:[]. Neither provides model coverage/load/visibility status or a missing-body warning. State success legitimately describes a successful read; it must not imply model validation.
  4. The current kicad_describe show_3d_chip/show_3d_board/state contracts provide window/render timing hints, but no model health contract. Screenshot review currently catches the failure.

Requested contract (field names illustrative):

  • Associate each viewer with its exact document revision and qualified library:footprint identity, including unsaved editor state. Avoid accepting another library's same basename.
  • Report expected physical models per footprint/component, reference count, original paths, paths resolved using the actual KiCad project/environment/alias context, existence/readability, and enabled/hidden/DNP/model-class state.
  • Separate file resolution, parse/load result, nonempty geometry, and actual viewer visibility. A present model clause or existing STEP file is insufficient. Where render/load introspection is unavailable, return renderVerified:false / unknown and the next background capture/check action, rather than success-by-assumption.
  • Include structured warnings and concise AI hints for zero model references, unresolved path/environment variable, unreadable or corrupt STEP, disabled model class, empty geometry, implausible scale/placement or stale viewer. Distinguish an intentional no-model footprint with an explicit exemption/reason; do not warn on ordinary test pads as if every footprint requires a chip.
  • Attach relevant diagnostics automatically to show_3d_chip, show_3d_board, state and model export/install responses, or include a concrete follow-up diagnostic verb. Keep this read-only/background: never foreground the user's window or alter their visibility preferences to diagnose it.
  • Cover fixtures for no reference, unresolved relative path, valid file, corrupt file, disabled class, intentional no-model, and model-present-but-render-unverified. Verify the exact requested identity and avoid treating board substrate/pads/silk as the component model.

Acceptance: on this bare-pad TMF8829 scene, an AI receives a clear warning or explicit unverified model state plus the next check without needing the human to spot it; after repair, file/model/render checks report separately with evidence. Model placement/orientation still requires independent parity review.

Duplicate check: existing #25/#26 cover opening the 3D surface/fallback; #42 covers wrong-part success. No existing model-coverage diagnostic issue was found. This is a requested diagnostic feature, not a claim that the bridge caused the unresolved model attachment.

kicad-missing-model-current

kicad-missing-model-state.json

kicad-missing-model-errors.json

3 Replies

John Lauer ·

KiCad 10.0.5 / bridge 0.9.349 / AB 2.1.82 / Hydrogen 1.0.299. The original manufacturer body now renders (attached top view). We supplied the supported kicad_install_footprint.model.filePath argument, preserving the existing transform, then restarted only our saved pcbnew preview process. Reopening the footprint frame alone still showed old geometry/reference text; fresh process showed both the linked model and corrected reference placement. This is a successful repair of our attachment/preview, not implementation of the requested diagnostics. Please keep #88 open for automatic referenced/resolved/loaded/visible status and AI recovery hints, including stale-cache detection. No foreground takeover was used. Exact underside alignment and cross-tool parity remain separate checks.

kicad-fresh-process-model

John Lauer ·

Built and shipped in insiders 0.9.350 (zip sha256 6cf7e0bbfa752ab2b8671d648be5b1bb1107e3bd59e38c99d6f77a9d8115e35f). Your diagnosis of the likely cause is right, and the verb now says it out loud.

New verb kicad_model_check (read-only, never touches a window):

  • {"library":"Adom","footprintName":"TMF8829-1A"} or {"boardPath":"C:/.../x.kicad_pcb"}.
  • Per (model ...) reference: the raw reference, the directories KiCad would try (project dir, then the 3D search paths: KICAD10_3DMODEL_DIR, KICAD_3RD_PARTY, extra_3d_search_dirs; Configure Paths overrides honoured), the resolved path, existence, a format sniff (STEP header, VRML header), a geometry count (solids/faces), hidden flag, offset/scale/rotate, and coded warnings: no_model_reference, unresolved_variable, not_found_relative, file_missing, unreadable, not_step_or_vrml, empty_geometry, hidden, implausible_scale, each with a hint.
  • Footprints that need no body (test points, fiducials, mounting holes, jumpers, board-only parts) are exempt with a stated reason; a resistor pad with no model is a warning.
  • renderVerified is always false, with nextCheck naming the 3D frame as the only proof, exactly as you asked: a resolvable file is not a rendered body.

Attached automatically: kicad_show_3d_chip (identity read from the Footprint Editor title, so unsaved editor state is what gets checked) and kicad_show_3d_board {filePath} now carry a models summary and a _modelHint when a body cannot be there.

Your case, reproduced on ConfRoomROG: a footprint with (model "X.manufacturer.step") and the STEP copied beside the .kicad_mod. kicad_model_check answers not_found_relative with the tried directories, and kicad_show_3d_chip on it returns models.ok:false plus the hint: a bare relative path is tried against the project directory and the 3D search paths, never next to the .kicad_mod. Use ${KICAD10_3DMODEL_DIR}/<lib>.3dshapes/<file>.step, a Configure Paths variable, or an absolute path (kicad_install_footprint with a model argument writes an absolute reference for you). On the rp2040 tour board it also found 12 pin headers pointing at ${ADOM_LIBRARY_DIR}, which this box does not define, a real gap I had been hiding by stripping those references in the demo.

Not done, and said plainly: load/parse/visibility introspection inside the viewer. KiCad's IPC API and the pcbnew plugin expose no per-model render state, so the file checks plus the frame are what exists. Docs: SKILL.md (package 1.0.136). Please run it on the TMF8829 editor and post the reply if it says anything other than not_found_relative.

John Lauer closed this ·
John Lauer ·

A current partial-model reproducer on AdomLapper: KiCad Bridge 0.9.350, embedded pcbnew plugin 0.9.2, KiCad 10.0.5, AB 2.1.96. The isolated sensor-native-r114/sensor.kicad_pcb comparison contains 63 physical component footprints plus four board-only NPTH holes. Its portable bundle has 34 model attachments and 29 deliberately unresolved component models. All 17 host-side files match the portable archive hashes. Six formerly missing IC bindings were restored with reviewed native STEP derivatives.

kicad_open_board and kicad_open_3d_viewer both return success/background-window hints, but neither reports model coverage or the known 29 missing-body references. kicad_window_info reports no modal dialogs. Background screenshots and the recorded C154 clip visibly show the restored ICs alongside the remaining bare passive pads. Native binding/source verification is separate from a per-instance rendered-body check; please preserve that distinction in the proposed diagnostic contract.

Please count expected physical component instances separately from mounting holes, return missing refs and resolved model paths, distinguish attached / parsed / rendered / hidden states, and associate the report with the exact PCB and process. The same desktop has an unrelated live-routing editor open; explicit PID selection was used for native readback so the diagnostic must not silently inspect the other board. No foreground access was needed for this inspection.

Project evidence: electrical/sensor-native-r114/model-attachment-review.json, docs/research/kicad-r114-host-hashes.json, docs/research/kicad-r114-board-info.json, and media/metadata/C154-native-kicad.json in adom/tmf8829-depth-lab. This extends the existing issue; it does not claim the underlying diagnostics have been implemented.

Log in to reply.