Closed bug report

generate invents touching copper pads for explicitly supplied zero-pad off-board footprint

John Lauer · 8d ago ·closed by Colby Knox

adom-lbr 2.47.4 · adom-wiki 1.7.69 · Linux x86_64 container. CLI-only reproduction; no desktop bridge involved.

generate invents copper when an explicitly supplied KiCad footprint contains zero pads. This came from an off-board flying-lead temperature sensor: its symbol has two passive pins and (on_board no); its supplied footprint is explicitly a mechanical envelope with zero copper pads. The separate real PCB connector carries the electrical lands.

Reproduce with the attached symbol and footprint:

adom-lbr generate --sym ntcle428e3103h301a.kicad_sym --fp ntcle428e3103h301a.kicad_mod --output generated-zero-pad.lbr --symbol-layout keep

Expected: preserve the zero-pad semantics, emit an explicitly schematic-only device if supported, or refuse with a clear unsupported-off-board explanation. Never silently create fabrication geometry.

Actual: exit 0, OK: Generated ... (2 pins, 6987 bytes), and HINT: Lint PASSED with 0 error(s), 1 warning(s). The output contains two invented 0.50 mm SMDs on layer1 at (-0.250,0.250) and (0.250,0.250), touching at their edges, plus connects to them. It only warns:

LINT WARN: [pad-clearance] copper closer than 0.2 mm: NTCLE428E3103H301A_MECHANICAL_ONLY pads 1 and 2 are 0.000 mm apart.

The generated file is rejected and retained only as evidence, not published as a reusable library or adopted into the board. Existing valid zero-pad packages and symbol-only export should have regression coverage. Related Wiki publish PINMAP_REQUIRED guidance also assumes every off-board symbol pin needs a PCB pad; a truthful off-board representation should not need fake pads to silence that warning.

First observed 2026-10-11. No claim about when introduced. Exact inputs and generated output attached; there is no GUI screenshot for this CLI transformation.

ntcle428e3103h301a.kicad_sym

ntcle428e3103h301a.kicad_mod

generated-zero-pad.lbr

3 Replies

John Lauer · 8d ago

adom-lbr source 2.47.4 · Linux x86_64 · isolated candidate build; installed 2.47.4 unchanged.

Attached a candidate patch for fail-closed handling, shared by CLI generation and the Manager bundle path. The generator now returns a Result and refuses an explicitly supplied footprint with no parsed electrical pads, including any package variant, before emitting XML. The CLI exits2; the Manager returns a structured error. The documented absent-footprint placeholder path remains distinct.

Validation: all35 unit tests pass, including3 new regression tests using the exact sensor fixture. Two CLI tests prove that rejection leaves an existing output byte-for-byte unchanged and creates no output when absent. Normal two-pad source geometry remains exact in the regression test. Build and cargo check pass.

This prevents invented copper; it does not implement schematic-only EAGLE/Fusion support. No deployed or registry fix is claimed, and the component still does not ship the rejected generated LBR. Patch and machine-readable checks attached for owner review.

lbr-zero-pad.patch

lbr-candidate-checks.json

Colby Knox · 8d ago

Fixed in 2.47.5, using your patch as attached. Thanks for the patch and the fixtures.

The cause: a supplied footprint with no pads took the same branch as having no footprint at all, so it got the placeholder package (two 0.5 mm pads at 0.5 mm pitch, touching).

generate now refuses an explicit zero-pad footprint, or a zero-pad package variant, before writing anything:

  • ERROR: [ZERO_PAD_FOOTPRINT], exit 2
  • no output file is created, and an existing one is left unchanged
  • the Manager returns a structured error

With your exact inputs, 2.47.5 exits 2 and writes nothing. Generating with no --fp still makes the documented placeholder.

Not in this release:

  • A schematic-only EAGLE device (a device with no package, matching KiCad's on_board no). EAGLE can represent this, but it needs a check in Fusion before we emit it.
  • The PINMAP_REQUIRED guidance for off-board parts. That is on the wiki side, and I've passed it along there.
Colby Knox · 8d ago

Wiki side done, on prod (git-wiki 1f0e134):

  • Vendored adom-lbr 2.47.5 (static musl build from 5230534), so Cloud Library Fusion exports get the zero-pad refusal. The export no longer reports a generic "derivation failed" for these parts. It names the skip: "off-board part: its footprint has no pads, so there is no package for Fusion to place (ZERO_PAD_FOOTPRINT)", and suggests adding the connector its leads plug into as its own part.
  • PINMAP_REQUIRED no longer fires for an off-board part. That covers a symbol marked (on_board no) or a footprint with zero pads; such parts get an info-level OFF_BOARD_PART hint instead. Your sensor's pins land on a separate connector, so a pin-to-pad map cannot be truthful. Parts with pads keep the rule exactly as before.

The schematic-only EAGLE device (Fusion check first) is still open, as noted above.

Log in to reply.