D48 — Opt-in side assignment by annealer flip moves¶
Decision¶
Side assignment (doc 04 §3 C/E, §9) is opt-in (--flip) and done by the annealer: a flip move (KiCad top/bottom mirror plus any turn, at the body centre or the nets' weighted median) for movable surface-mount parts on 2+ copper-layer boards whose footprint the writer can mirror exactly, plus a via-estimate cost (per net min(front, back) surface-mount pins × weight × --flip-via-mm 2). No FM/CP-SAT partition in stage (C), no side capacity in (B), no flips in ECO or exact windows. Orientation states become 0–7 (bit 2 = other side). The writer reproduces KiCad's FOOTPRINT::Flip, so a flip rewrites the footprint's child coordinates and layers (doc 04 §5 said only at, layer and pad layers change)
Alternatives¶
FM min-cut partition with area capacity per side, CP-SAT for ≤ 40 parts (doc 04 §3 C); flipping on by default
Reason¶
The annealer already holds the exact legality and incremental cost, so a flip move gets side assignment that respects courtyards on both sides, through-holes and copper for free; a partition before legalisation knows none of that. Off by default because double-sided assembly is a design decision and the via cost is real (23 boards: HPWL −7.9 % full / −7.6 % refine, crossings −31 %, but the via estimate rises 85 → ~480, routability unmeasured). Mirroring geometry by KiCad's own rules was verified against pcbnew on 2,529 footprints with 0 differences