AI Flow
Public Made by Adomby adom
Adom's AI Flow: a tool to help the AI follow all of the steps it takes to build a board.
analyze current: single-pad contacts are dropped as side parts, so a contact-fed net can never pass the pour check
adom-aiflow 0.2.56+noah.1 (local build of 0.2.56), KiCad 10.0.6, WSL2 (Hydrogen local workspace).
analyze current can never pass a net whose load enters through single-pad parts (machine contacts), however good its pour.
In crates/aiflow-analyze/src/pour_cover.rs, check() builds the load terminals as the net's pads that are not zero-amp and not a "side part". side_part(q) is board.pads.iter().filter(|o| o.reference == q.reference && o.net != net).all(...). For a single-pad part (MachineContactLarge, MachinePin) that iterator is empty, so .all() is true and the contact is dropped as a side part.
Board: a 4-in-1 ESC whose battery minus (BATN) enters through two MachineContactLarge (MC13, MC14, -16 A each in loads.BATN.terminals) and leaves through the shunt's BATN pad (R501.2, +32 A). After the filter only R501.2 is left, so terminals.len() >= 2 && missed.is_empty() can never hold, and the output is:
BATN fail: the BATN pour does not carry the load: it leaves the 0.20 mm piece on F.Cu ... uncovered ... and no one pour reaches every terminal (the best, on B.Cu+F.Cu, misses ).
Note the empty "misses" list: one pour does reach every real terminal. The 0.20 mm piece is the INA180 Kelvin trace (U501.4, declared 0 A). The same happens with --fields.
Suggested fix: a part with no other pads is never a side part (!others.is_empty() && others.all(...)), or treat machine contacts and pins as terminals by library.
2 Replies
Log in to reply.