Fab thinks board has short circuits, but it passes DRC

Yes, fill the zone, which DRC does anyway, and if you can’t adjust things so that the zones connect to all pads then make any remaining connections with tracks.


I’m interested in why the fab flagged it, as you say without netlist how do they know? But then if they do e-test as some claim, then they would need to regenerate a partial netlist from the Gerbers. Maybe it got confused by tracks that appear to loop back on themself.

I wondered if it might be a track-track clearance issue, but that doesn’t seem to be consistent with the arrows.

1 Like

As long as the zone is connected to a net I think it will be contained by the edge cuts. At least that’s the way it works in the nightly I’m using and I think remembering it that way in 4.0.debian ancient kludge.

1 Like

I’m sure they could generate a netlist that would correspond with the gerbers but in the case of two shorted nets it would simply treat them as one net. I suspect this didn’t pass the initial visual inspection. I’m sure the op could simply declare there is no short and ask them to proceed with manufacturing if he really wanted to.

Thanks, that’s good to know. I’d just been operating under the assumption that KiCad ignores Edge.Cuts, because I know that the interactive router will happily route tracks across Edge.Cuts. (Which gets very annoying with an oddly-shaped board like this.)

What you said about interactive routing is true, at least up to a year ago . . . perhaps it gets improved in Ver 5. But (like @hermit said) the “Fill” algorithm does a good job of honoring Edge.Cuts, at least it does so if your Edge.Cuts define a closed polygon.

KiCAD’s “Fill” algorithm seems to treat an Edge.Cut line as if it was a trace. This means it will leave a gap equal to the zone’s “Clearance” parameter between the edge-cut line, and the filled zone. See the screenshot attached to my post at Creating “zone outlines” for Odd Shaped PCB’s . The clearance is to the EDGE of the line-width of the drawn edge.cuts line - same as it does for tracks. So if you want a larger gap to the edge of the board vs. the zone’s clearance to other parts of your design (tracks, vias, etc) just modify the edge.cuts line width. A thicker line will cause a larger gap towards the edge of the board. (Every modern board manufacturer defines the CENTER of the edge.cuts line as the edge of the board.)



In that post, I don’t understand why you recommend exporting and importing the Edge.Cuts as a DXF. If filled zones honor the Edge.Cuts, couldn’t I just draw a bounding rectangle around my entire board?

I’d use a fill area for that, or make the pad itself larger.
Was the lifting issue during assembly, or in use ?

Yes, or make the GND traces larger, to remove the slit effects everywhere.

I had a board with a bad pot, so I desoldered the pot using some Chip Quik. In so doing, one of the pads for the pot pulled off, hanging just by the tiny track attached to it. I figured that by adding more tracks I would give it more to hang on with. It takes me about an hour to solder one of these boards, so I don’t want to have to throw out a board just because I messed up desoldering a bad component.

(In practice, the pot is the only one of the SMT components I’ve had to desolder. I’ve never had a problem with the SMT resistors and capacitors. And although I’ve had to desolder some LEDs, they are THT and don’t seem to have as much trouble with delamination.)

I’d originally been following @dchisholm’s advice from the Turn off GND airwires thread:

Both approaches are valid - if you rely on fill connecting, you do have to ensure you run DRC before plotting !!

If your fill clearance is larger than trace clearances, and your board is denser, you can find fill does not reach all pads.
In this case, manually running GND traces makes sense, and also remind you to leave room…

Nightly interactive routing has understood the edge.cuts and keep outs for a month or so.

One thing to watch for is that Pcbnew Netlist import defaults to “keep tracks joining two nets”, raising the possibilty of there actually being a short

But wouldn’t DRC catch this?

Yes DRC should detect this.

You would be surprised how often people come here complaining that kicad did something wrong only to discover they should have run DRC before ordering their PCBs.

1 Like

I understand, but I think that approach tends to work better when there is a layer dedicated to a zone, such as a ground plane. Then you don’t need to worry about the zone covering the redundant tracks. I personally don’t use that approach as I find the redundant tracks just create more work, not just routing them in the first place but having to move them whenever you move a component. The redundant tracks are not necessary and all those tracks hidden behind zones can become a burden. That’s just my personal opinion, others will surely have other opinions.

1 Like

My post didn’t make it clear that I was answering a two-part question. (And, the original question may have been edited at some point.)

The first part dealt with creating a complex shape on the Edge.Cuts layer (or, any other layer). Exporting to *.DXF, editing, then importing is (in my mind) the most efficient way to do this. The drawing tools in KiCAD are very rudimentary. Other CAD programs - intended for drafting of mechanical parts and assemblies - have capabilities that run rings around KiCAD. They allow you to do more complex work, in much less time, and with lower probability of error. My reference to *.DXF files was an answer to the general question of “How do you create complex shapes in KiCAD?”

Go ahead and create a filled zone using just a bounding rectangle around your board. Fill it, and examine it carefully. If everything is satisfactory, your problem is solved and you can take a rest. On many boards you may want to adjust the zone at a few points, even if it’s just for aesthetics. That is when you weigh the benefits of advanced drafting tools (in a different CAD program) versus the time and hassle of exporting and importing.


p.s. - If you think KiCAD’s drawing tools are more than one step beyond Etch-A-Sketch, try to put a uniform radius on the corners of a simple rectangular board. You gotta calculate the center point for each corner . . . then translate your ideas about “radius” into the arc’s end point . . . then mess around with the angles. And, finally, shorten the sides of the existing edge lines so they exactly intersect the arcs. In LibreCAD, I select the tool, specify a radius, and click on the two lines I want joined by the arc. Four clicks plus one numeric entry, tops. And no calculations, where errors can breed and multiply.

That’s right - by satisfying the requirement for netlist connectivity with explicit traces, you can be certain there are no isolated islands from a FILL operation. If you have multiple, overlapping, fill zones from different nets, those redundant traces help you control the shape of the zones .


Remembering to set Zone priority level so that overlapping fills are at different priorities, otherwise unexpected things may happen


Yes, zone priorities are the starting point for managing fills with overlapping zones.

Occasionally there are still cases where you want one zone to take precedence in some areas, but the other zone to take precedence in other areas. This is where it’s helpful to lay down a trace, helping to define which of the two zones controls the space.


For this special case, could you have two zones on each net, assigning the higher priority a “2” and the lower “1”?

edit: Higher numbers are higher priority

1 Like