Quick answer: Offset one of the overlapping CSG primitives by 0.001 to break coplanar faces. Convert finished CSG trees to ArrayMesh to avoid recurring errors during edits.
CSG cube + CSG cube subtraction produces “self-intersecting mesh.” Coplanar faces confuse the boolean.
The Symptom
Console warning. CSG output may render with holes or extra geometry. Subtraction doesn’t work as expected.
The Fix
Select the subtracting CSG primitive. Move position by (0.001, 0, 0) (or whatever axis breaks the coplanar). Boolean now resolves cleanly.
For repeated cleanups, snap to a grid offset by 0.001 from integer coordinates.
Convert When Final
Once the CSG sketch is finalized, select root and use Mesh menu → Convert → ArrayMesh. The result is a baked mesh; further edits to the source CSG don’t affect it. No more boolean errors.
Verifying
Add the offset. Console clear. Output mesh complete. If still self-intersecting, search for other coplanar pairs.
“Offset by epsilon. Convert to mesh when done.”
Related Issues
For CSG editor frozen, see CSG frozen. For MeshInstance3D AABB, see AABB.
Break coplanar. Convert when stable.