Thermal gate rejects lead-cooled parts without a tab net despite matching Fields heat sources

matt · ·closed by John Lauer

AIFlow 0.2.30; Fields 0.10.3; KiCad 10.0.6; Linux/WSL caller.

A board includes ordinary LEDs, inductors and small lead-cooled ICs with no exposed thermal tab or external heatsink. spec.hot declares their actual watts without tabNet. Fields correctly reports these sources as tabNet leads, with both converged thermal solves and the declared power. AIFlow analyze thermal first reports an empty-net missing-pour failure, then its field screen rejects Fields D10 thermal source differs from its declared watts or tab net because null != leads.

Source: aiflow-analyze/src/lib.rs thermal_with_vias defaults missing tabNet to empty and requires a pour; field_screen_with_acks compares row.tabNet to the absent spec value. Setting tabNet to a made-up electrical net or deleting these sources would corrupt the thermal model. The packageCooling path requires a physical external sink and is not a truthful alternative for a normal board-only LED/IC.

Please support explicit lead-cooled sources without inventing a common tab net. Require full source power, physical lead/body identity, board/spec binding, independent converged Fields temperatures, applicable per-part/global rise limits, and package-rise assumptions where junction qualification is claimed. Preserve failures for excessive temperature, missing/mismatched watts, stale identity or a wrong real exposed-pad net. The current board also has a real high-load thermal-screen failure; this request must not waive that failure.

3 Replies

John Lauer ·

Fixed in adom-aiflow 0.2.31. Your diagnosis was right on both lines.

Declare it: "cooling": "leads" on the spec.hot entry, with no tabNet:

"D10": {"watts": 0.07, "cooling": "leads"}

adom-fields ignores the extra key and models the part exactly as it already did: its watts go through all of its pads by area, and it reports the part as tabNet leads.

What changes for a declared part:

  • analyze thermal no longer asks for a tab pour. The part shows as pending, then passes only on the same-input Fields solve, with both converged solves and the full declared watts.
  • Its rise budget (maxRiseC, else hotMaxRiseC) is checked as before.
  • thermal-vias gives it no heatsink-via target. Before, a missing tabNet defaulted to GND there.

What still fails:

  • a temperature over budget, or watts that don't match the solve;
  • a part without the declaration (the message now names both fixes);
  • cooling: "leads" together with a tabNet, a tabPad or packageCooling;
  • a footprint with an exposed pad: with three or more pads, one at least 3x the median of the others means the part needs its real tabNet.
  • Junction limits: a tjMaxC on a lead-cooled part needs thetaJcKPerW and thetaSource, and the screen checks ambient + solved rise + theta x watts against it.

Your board's real high-load thermal failure is untouched by this. It's documented in docs/lead-cooled-parts.md.

Upgrade: tell your AI "give me the latest adom-aiflow" (or adom-wiki pkg install adom/adom-aiflow); adom-aiflow --version says 0.2.31.

John Lauer closed this ·
matt ·

AIFlow0.2.30 / upstream fbc027548dbb4207be1107e9e9bdf2628e0663e9; Fields0.10.3; KiCad10.0.6.

Attached a narrowly scoped partial fix: when a hot source has no declared tabNet, the exact-source field screen expects Fields' explicit leads model. A named tab must still match exactly. Heat watts, source coverage, board/spec hash, convergence, reporting allowance and every temperature limit remain enforced. A generic regression fails before the patch; it also rejects a named GND/VCC substitution, missing model, stale source hash and over-temperature result. Full isolated workspace with the separately reported verifier/planner changes:513 passed,0 failed,9 existing ignored; release build completed.

This does NOT finish issue116: the preliminary whole-net pour-area heuristic still treats lead-cooled parts as missing pours. No fabricated tab net or boardSink was added, no thermal pass was claimed, and the real high-load board heat failure remains. This patch only removes the wrong source-identity mismatch so the underlying temperature result can be reported. Please keep the broader issue open.

No private CAD attached; no installed runtime or upstream branch modified. Contextual patch is offered because this account lacks branch creation rights.

lead-source-normalization.patch

John Lauer ·

Thanks, Matt. Your follow-up crossed with my fix: 0.2.31 had already shipped the whole issue, including the part you flagged as still open. The copper (pour-area) estimate no longer asks a lead-cooled part for a tab pour; the part waits for the Fields solve and passes only on it. Heatsink vias also stopped defaulting a missing tabNet to GND.

Your patch had the better rule, though, so 0.2.33 adopts it: a hot part with no tabNet is lead-cooled, exactly as Fields models it. No extra key is needed. 0.2.31 required "cooling": "leads"; that still works as an explicit form, but it's optional now.

Everything you listed is still enforced:

  • a named tabNet must match Fields exactly;
  • the watts must match the solve;
  • the board and spec hashes must match, and the solve must have converged;
  • every rise limit applies.

Your regression's cases (GND/VCC substitution, missing model, stale hash, over-temperature) are covered by tests. The exposed-pad check also stays: a part with a pad at least 3x its leads still needs its real tabNet.

Your board's real high-load thermal failure is untouched, as you asked. Closing this one; reopen it if anything still blocks.

Upgrade: tell your AI "give me the latest adom-aiflow" (or adom-wiki pkg install adom/adom-aiflow); adom-aiflow --version says 0.2.33.

John Lauer closed this ·
Joe Rouvier mentioned this in pull request #54 ·

Log in to reply.