Found while fixing #253. In axiolid-construct, earcut produced a triangulation with the correct total area but a T-junction: an edge ran straight past a hole's corner. Extruded meshes were then open, and an area check can't detect it. #253 replaced earcut in construct with a certified ear clipper (exact `orient2d` decisions, plus an edge-parity certificate that refuses by name).
`axiolid-mesh-compile` still uses earcut for planar faces, in `planar.rs` (authored polygon faces, including the #254 warped-face path) and in `brep.rs` (planar B-rep faces with holes). The same T-junction can open those meshes.
Done when
Found while fixing #253. In axiolid-construct, earcut produced a triangulation with the correct total area but a T-junction: an edge ran straight past a hole's corner. Extruded meshes were then open, and an area check can't detect it. #253 replaced earcut in construct with a certified ear clipper (exact `orient2d` decisions, plus an edge-parity certificate that refuses by name).
`axiolid-mesh-compile` still uses earcut for planar faces, in `planar.rs` (authored polygon faces, including the #254 warped-face path) and in `brep.rs` (planar B-rep faces with holes). The same T-junction can open those meshes.
Done when