{
 "commit": {
  "sha": "10cc7b9da9335789062942b9faabfe74db4a4027",
  "date": "2026-02-28T18:02:49+00:00",
  "subject": "fix(hw): reduce lower mounting pillars to 3.2mm",
  "url": "https://github.com/DLehenbauer/econopet/commit/10cc7b9da9335789062942b9faabfe74db4a4027",
  "board": "hw/rev-b/mainboard/kicad/Mainboard.kicad_pcb"
 },
 "project": {
  "title": "EconoPET mainboard (rev. B)",
  "repo": "https://github.com/DLehenbauer/econopet",
  "licence": "CC0-1.0"
 },
 "impactDiff": {
  "schema": "nativecad.impactDiff/1",
  "inputs": {
   "before": {
    "format": "kicad_pcb",
    "source": {
     "repo": "https://github.com/DLehenbauer/econopet",
     "sha": "503375ace608a7b0c28cdb39dcfee7c542747f1d",
     "path": "hw/rev-b/mainboard/kicad/Mainboard.kicad_pcb"
    }
   },
   "after": {
    "format": "kicad_pcb",
    "source": {
     "repo": "https://github.com/DLehenbauer/econopet",
     "sha": "10cc7b9da9335789062942b9faabfe74db4a4027",
     "path": "hw/rev-b/mainboard/kicad/Mainboard.kicad_pcb"
    }
   },
   "optionsSha256": null,
   "engine": null
  },
  "layoutDiff": {
   "schema": "pcbDiff/1",
   "identical": false,
   "tolerances": {
    "posTol": 0.001,
    "rotTol": 0.01,
    "widthTol": 0.0001,
    "drillTol": 0.0001,
    "lengthTol": 0.0001,
    "areaTol": 0.000001,
    "thickTol": 0.000001,
    "routeTol": 0.01,
    "sampleStep": 0.1,
    "minPadOverlap": 0.6
   },
   "summary": {
    "components": {
     "added": 0,
     "removed": 0,
     "renamed": 0,
     "moved": 3,
     "rotated": 0,
     "flipped": 0,
     "footprintChanged": 3,
     "valueChanged": 3
    },
    "nets": {
     "added": 0,
     "removed": 0,
     "renamed": 0,
     "changed": 1,
     "rerouted": 0
    },
    "outlineChanged": false,
    "stackupChanged": false
   },
   "components": {
    "source": "explicit",
    "counts": {
     "a": 294,
     "b": 294
    },
    "added": [],
    "removed": [],
    "renamed": [],
    "moved": [
     {
      "refdes": "H2",
      "from": [
       332.4125,
       182.6902
      ],
      "to": [
       332.4125,
       106.492
      ],
      "delta": [
       0,
       -76.1982
      ],
      "distance": 76.1982
     },
     {
      "refdes": "H3",
      "from": [
       332.4125,
       106.492
      ],
      "to": [
       104.7625,
       169.9902
      ],
      "delta": [
       -227.65,
       63.4982
      ],
      "distance": 236.339890631
     },
     {
      "refdes": "H4",
      "from": [
       104.7625,
       169.9902
      ],
      "to": [
       332.4125,
       182.6902
      ],
      "delta": [
       227.65,
       12.7
      ],
      "distance": 228.003974746
     }
    ],
    "rotated": [],
    "flipped": [],
    "footprintChanged": [
     {
      "refdes": "H2",
      "from": "PET:PET_MountingHole_4mm",
      "to": "MountingHole:MountingHole_4mm",
      "pads": {
       "added": [],
       "removed": [],
       "changed": []
      }
     },
     {
      "refdes": "H3",
      "from": "PET:PET_MountingHole_4mm",
      "to": "MountingHole:MountingHole_3.2mm_M3",
      "pads": {
       "added": [],
       "removed": [],
       "changed": []
      }
     },
     {
      "refdes": "H4",
      "from": "PET:PET_MountingHole_4mm",
      "to": "MountingHole:MountingHole_3.2mm_M3",
      "pads": {
       "added": [],
       "removed": [],
       "changed": []
      }
     }
    ],
    "valueChanged": [
     {
      "refdes": "H2",
      "from": "MountingHole",
      "to": "MountingHole_Screw"
     },
     {
      "refdes": "H3",
      "from": "MountingHole",
      "to": "MountingHole_Pillar"
     },
     {
      "refdes": "H4",
      "from": "MountingHole",
      "to": "MountingHole_Pillar"
     }
    ]
   },
   "nets": {
    "added": [],
    "removed": [],
    "renamed": [],
    "changed": [
     {
      "name": "GND",
      "length": {
       "a": 2369.994273074,
       "b": 2369.994273074,
       "delta": 0,
       "perLayer": {}
      },
      "width": {
       "min": {
        "a": 0.2,
        "b": 0.2
       },
       "max": {
        "a": 1.6,
        "b": 1.6
       },
       "perLayer": {}
      },
      "copperArea": {
       "a": 29312.883701283,
       "b": 29424.954707639,
       "delta": 112.071006356,
       "perLayer": {
        "F.Cu": {
         "a": 13733.260097553,
         "b": 13789.295600582,
         "delta": 56.03550303
        },
        "B.Cu": {
         "a": 15579.62360373,
         "b": 15635.659107056,
         "delta": 56.035503326
        }
       },
       "note": "pour (region) area only"
      },
      "vias": {
       "a": 1457,
       "b": 1457,
       "delta": 0,
       "drills": {
        "a": {
         "0.3": 1443,
         "0.8": 14
        },
        "b": {
         "0.3": 1443,
         "0.8": 14
        }
       },
       "drillDelta": {}
      },
      "pads": {
       "a": 262,
       "b": 262,
       "added": [],
       "removed": []
      },
      "reroutedLengthMm": {
       "removed": 0,
       "added": 0
      },
      "viasMoved": {
       "removed": 0,
       "added": 0
      },
      "rerouted": false
     }
    ]
   },
   "outline": {
    "changed": false,
    "loops": {
     "a": 8,
     "b": 8
    },
    "bbox": {
     "a": [
      91.1125,
      93.792,
      353.6125,
      189.04025
     ],
     "b": [
      91.1125,
      93.792,
      353.6125,
      189.04025
     ]
    },
    "size": {
     "a": [
      262.5,
      95.24825
     ],
     "b": [
      262.5,
      95.24825
     ]
    },
    "perimeterMm": {
     "a": 567.876702307,
     "b": 567.876702307,
     "delta": 0
    },
    "areaMm2": {
     "a": 10128.883844019,
     "b": 10128.883844019,
     "delta": 0
    },
    "changedLengthMm": {
     "removed": 0,
     "added": 0
    }
   },
   "stackup": {
    "changed": false,
    "added": [],
    "removed": [],
    "modified": [],
    "reordered": false,
    "thickness": null
   },
   "warnings": []
  },
  "bomDiff": {
   "summary": {
    "added": 0,
    "removed": 0,
    "qtyChanged": 0,
    "valueChanged": 2,
    "footprintChanged": 2,
    "mpnChanged": 0,
    "dnpToggled": 0,
    "categoryChanged": 0,
    "total": 4,
    "unchanged": 291
   },
   "added": [],
   "removed": [],
   "qtyChanged": [],
   "valueChanged": [
    {
     "kind": "value-changed",
     "category": "BOARD_FEATURE",
     "key": "vf:mountinghole_screw|mountinghole_4mm",
     "part": {
      "value": "MountingHole_Screw",
      "footprint": "MountingHole:MountingHole_4mm"
     },
     "from": "MountingHole",
     "to": "MountingHole_Screw",
     "refs": [
      "H2"
     ]
    },
    {
     "kind": "value-changed",
     "category": "BOARD_FEATURE",
     "key": "vf:mountinghole_pillar|mountinghole_3.2mm_m3",
     "part": {
      "value": "MountingHole_Pillar",
      "footprint": "MountingHole:MountingHole_3.2mm_M3"
     },
     "from": "MountingHole",
     "to": "MountingHole_Pillar",
     "refs": [
      "H3",
      "H4"
     ]
    }
   ],
   "footprintChanged": [
    {
     "kind": "footprint-changed",
     "category": "BOARD_FEATURE",
     "key": "vf:mountinghole_screw|mountinghole_4mm",
     "part": {
      "value": "MountingHole_Screw",
      "footprint": "MountingHole:MountingHole_4mm"
     },
     "from": "PET:PET_MountingHole_4mm",
     "to": "MountingHole:MountingHole_4mm",
     "refs": [
      "H2"
     ]
    },
    {
     "kind": "footprint-changed",
     "category": "BOARD_FEATURE",
     "key": "vf:mountinghole_pillar|mountinghole_3.2mm_m3",
     "part": {
      "value": "MountingHole_Pillar",
      "footprint": "MountingHole:MountingHole_3.2mm_M3"
     },
     "from": "PET:PET_MountingHole_4mm",
     "to": "MountingHole:MountingHole_3.2mm_M3",
     "refs": [
      "H3",
      "H4"
     ]
    }
   ],
   "mpnChanged": [],
   "dnpToggled": [],
   "categoryChanged": [],
   "byCategory": {
    "SCH": {},
    "PCB": {},
    "BOARD_FEATURE": {
     "valueChanged": 2,
     "footprintChanged": 2
    }
   }
  },
  "impacts": [
   {
    "id": "debe4a3a90cd2d54",
    "kind": "bom",
    "ref": "H2",
    "category": "BOARD_FEATURE",
    "metric": "footprint",
    "before": "PET:PET_MountingHole_4mm",
    "after": "MountingHole:MountingHole_4mm",
    "delta": null,
    "severity": "info",
    "why": "BOARD_FEATURE line MountingHole_Screw MountingHole_4mm: H2 footprint changed (PET:PET_MountingHole_4mm -> MountingHole:MountingHole_4mm).",
    "causes": [
     "bomDiff.footprintChanged[H2]"
    ],
    "assumptionDependent": false
   },
   {
    "id": "fd72a0dc92c6f47a",
    "kind": "bom",
    "ref": "H2",
    "category": "BOARD_FEATURE",
    "metric": "value",
    "before": "MountingHole",
    "after": "MountingHole_Screw",
    "delta": null,
    "severity": "info",
    "why": "BOARD_FEATURE line MountingHole_Screw MountingHole_4mm: H2 value changed (MountingHole -> MountingHole_Screw).",
    "causes": [
     "bomDiff.valueChanged[H2]"
    ],
    "assumptionDependent": false
   },
   {
    "id": "357468d3ddcd2481",
    "kind": "bom",
    "ref": "H3",
    "refs": [
     "H3",
     "H4"
    ],
    "category": "BOARD_FEATURE",
    "metric": "footprint",
    "before": "PET:PET_MountingHole_4mm",
    "after": "MountingHole:MountingHole_3.2mm_M3",
    "delta": null,
    "severity": "info",
    "why": "BOARD_FEATURE line MountingHole_Pillar MountingHole_3.2mm_M3: H3, H4 footprint changed (PET:PET_MountingHole_4mm -> MountingHole:MountingHole_3.2mm_M3).",
    "causes": [
     "bomDiff.footprintChanged[H3]",
     "bomDiff.footprintChanged[H4]"
    ],
    "assumptionDependent": false
   },
   {
    "id": "2277ac8d0ca58393",
    "kind": "bom",
    "ref": "H3",
    "refs": [
     "H3",
     "H4"
    ],
    "category": "BOARD_FEATURE",
    "metric": "value",
    "before": "MountingHole",
    "after": "MountingHole_Pillar",
    "delta": null,
    "severity": "info",
    "why": "BOARD_FEATURE line MountingHole_Pillar MountingHole_3.2mm_M3: H3, H4 value changed (MountingHole -> MountingHole_Pillar).",
    "causes": [
     "bomDiff.valueChanged[H3]",
     "bomDiff.valueChanged[H4]"
    ],
    "assumptionDependent": false
   }
  ],
  "summary": {
   "counts": {
    "high": 0,
    "medium": 0,
    "low": 0,
    "info": 4
   },
   "headline": "4 informational change(s), none against a limit; first: BOARD_FEATURE line MountingHole_Screw MountingHole_4mm: H2 footprint changed (PET:PET_MountingHole_4mm -> MountingHole:MountingHole_4mm).",
   "markdown": "**4 informational change(s), none against a limit; first: BOARD_FEATURE line MountingHole_Screw MountingHole_4mm: H2 footprint changed (PET:PET_MountingHole_4mm -> MountingHole:MountingHole_4mm).** Layout: components: 3 moved, 3 with a new footprint, 3 with a new value; nets: 1 changed. BOM: 2 changed value, 2 changed footprint. Re-analysed on both revisions, for the changed nets and parts only: impedance, cert. Not run for missing inputs: cert.creepage, returnPath (see refused)."
  },
  "analysed": {
   "ran": [
    "impedance",
    "cert"
   ],
   "nets": [
    "GND"
   ],
   "rails": []
  },
  "assumptions": {
   "before": [
    {
     "source": "default",
     "analysis": "impedance",
     "key": "mask.er",
     "value": 3.8,
     "citation": "LPI solder mask epsilon_r 3.8 (NativeCAD default)",
     "verified": false,
     "affects": [
      "outer-layer traces"
     ]
    },
    {
     "source": "default",
     "analysis": "cert",
     "key": "fab",
     "value": "jlcpcb",
     "citation": "fab profile jlcpcb (NativeCAD default)",
     "verified": true,
     "affects": []
    },
    {
     "source": "default",
     "analysis": "cert",
     "key": "ipc6012.drillPositionTolMm",
     "value": 0.075,
     "unit": "mm",
     "citation": "NativeCAD default (typical standard-technology rigid fab; no fab publishes it)",
     "verified": false,
     "affects": [
      "ipc6012"
     ]
    },
    {
     "source": "default",
     "analysis": "cert",
     "key": "ipc6012.innerRegistrationTolMm",
     "value": 0.075,
     "unit": "mm",
     "citation": "NativeCAD default (typical standard-technology rigid fab; no fab publishes it)",
     "verified": false,
     "affects": [
      "ipc6012"
     ]
    },
    {
     "source": "default",
     "analysis": "cert",
     "key": "ipc6012.outerRegistrationTolMm",
     "value": 0.05,
     "unit": "mm",
     "citation": "NativeCAD default (typical standard-technology rigid fab; no fab publishes it)",
     "verified": false,
     "affects": [
      "ipc6012"
     ]
    },
    {
     "source": "default",
     "analysis": "cert",
     "key": "ipcClass",
     "value": "2",
     "citation": "IPC-6012 Class 2 (dedicated service) - the general commercial default",
     "verified": true,
     "affects": []
    },
    {
     "source": "default",
     "analysis": "cert",
     "key": "motC",
     "value": 105,
     "citation": "requested MOT 105 C (FR-4 laminates' common UL RTI)",
     "verified": false,
     "affects": [],
     "unit": "C"
    },
    {
     "source": "default",
     "analysis": "returnPath",
     "key": "erEff",
     "value": 4,
     "citation": "effective epsilon_r 4 for the stitching distance (NativeCAD default)",
     "verified": false,
     "affects": []
    },
    {
     "source": "derived",
     "analysis": "returnPath",
     "key": "planes",
     "value": [],
     "citation": "inner layer with >= 30 % pour cover of one net (outer: >= 80 % and no other net's traces); voids = holes >= 2 mm^2 in that net's pours, as bounding rectangles",
     "affects": [
      "every finding"
     ]
    },
    {
     "source": "default",
     "analysis": "returnPath",
     "key": "riseTimeNs",
     "value": 1,
     "citation": "edge rise time 1 ns, f_knee = 0.35 / t_r (Johnson & Graham)",
     "verified": true,
     "affects": [],
     "unit": "ns"
    }
   ],
   "after": [
    {
     "source": "default",
     "analysis": "impedance",
     "key": "mask.er",
     "value": 3.8,
     "citation": "LPI solder mask epsilon_r 3.8 (NativeCAD default)",
     "verified": false,
     "affects": [
      "outer-layer traces"
     ]
    },
    {
     "source": "default",
     "analysis": "cert",
     "key": "fab",
     "value": "jlcpcb",
     "citation": "fab profile jlcpcb (NativeCAD default)",
     "verified": true,
     "affects": []
    },
    {
     "source": "default",
     "analysis": "cert",
     "key": "ipc6012.drillPositionTolMm",
     "value": 0.075,
     "unit": "mm",
     "citation": "NativeCAD default (typical standard-technology rigid fab; no fab publishes it)",
     "verified": false,
     "affects": [
      "ipc6012"
     ]
    },
    {
     "source": "default",
     "analysis": "cert",
     "key": "ipc6012.innerRegistrationTolMm",
     "value": 0.075,
     "unit": "mm",
     "citation": "NativeCAD default (typical standard-technology rigid fab; no fab publishes it)",
     "verified": false,
     "affects": [
      "ipc6012"
     ]
    },
    {
     "source": "default",
     "analysis": "cert",
     "key": "ipc6012.outerRegistrationTolMm",
     "value": 0.05,
     "unit": "mm",
     "citation": "NativeCAD default (typical standard-technology rigid fab; no fab publishes it)",
     "verified": false,
     "affects": [
      "ipc6012"
     ]
    },
    {
     "source": "default",
     "analysis": "cert",
     "key": "ipcClass",
     "value": "2",
     "citation": "IPC-6012 Class 2 (dedicated service) - the general commercial default",
     "verified": true,
     "affects": []
    },
    {
     "source": "default",
     "analysis": "cert",
     "key": "motC",
     "value": 105,
     "citation": "requested MOT 105 C (FR-4 laminates' common UL RTI)",
     "verified": false,
     "affects": [],
     "unit": "C"
    },
    {
     "source": "default",
     "analysis": "returnPath",
     "key": "erEff",
     "value": 4,
     "citation": "effective epsilon_r 4 for the stitching distance (NativeCAD default)",
     "verified": false,
     "affects": []
    },
    {
     "source": "derived",
     "analysis": "returnPath",
     "key": "planes",
     "value": [],
     "citation": "inner layer with >= 30 % pour cover of one net (outer: >= 80 % and no other net's traces); voids = holes >= 2 mm^2 in that net's pours, as bounding rectangles",
     "affects": [
      "every finding"
     ]
    },
    {
     "source": "default",
     "analysis": "returnPath",
     "key": "riseTimeNs",
     "value": 1,
     "citation": "edge rise time 1 ns, f_knee = 0.35 / t_r (Johnson & Graham)",
     "verified": true,
     "affects": [],
     "unit": "ns"
    }
   ]
  },
  "refused": {
   "before": [
    {
     "analysis": "cert.creepage",
     "reasonCode": "pcb_analysis_needs_input",
     "needs": [
      "cert.pairs[].a",
      "cert.pairs[].b",
      "cert.pairs[].workingVrms"
     ],
     "remedy": "creepage needs the net pairs and the working voltage between them; UL 796 and IPC-6012 ran without them",
     "requested": false
    },
    {
     "analysis": "returnPath",
     "reasonCode": "pcb_analysis_needs_input",
     "needs": [
      "a reference plane (a poured copper layer)"
     ],
     "remedy": "no layer of this board is a plane, so there is no return path to check",
     "requested": false
    }
   ],
   "after": [
    {
     "analysis": "cert.creepage",
     "reasonCode": "pcb_analysis_needs_input",
     "needs": [
      "cert.pairs[].a",
      "cert.pairs[].b",
      "cert.pairs[].workingVrms"
     ],
     "remedy": "creepage needs the net pairs and the working voltage between them; UL 796 and IPC-6012 ran without them",
     "requested": false
    },
    {
     "analysis": "returnPath",
     "reasonCode": "pcb_analysis_needs_input",
     "needs": [
      "a reference plane (a poured copper layer)"
     ],
     "remedy": "no layer of this board is a plane, so there is no return path to check",
     "requested": false
    }
   ]
  }
 }
}