# OCCT issues Kernel behaviour n3xd works around. Each entry says how to reproduce it, what the app does about it and which OCCT version last showed it. Recheck them on every kernel bump. Missing bindings are not listed here; they live in `NOTEPAD.md`. ## `BRepFilletAPI_MakeFillet` segfaults on a fillet as wide as its wall - **Symptom:** SIGSEGV inside the fillet build. It is a native fault, so no exception reaches Python and the whole process dies. - **Repro:** a 23-face part. It has a 110 × 60 × 20 mm base, a 2 mm diagonal slab and 2 mm side walls, and already carries one r = 2 fillet. A second r = 2 fillet on any edge bounding a 2 mm side wall crashes, for example the wall's outer diagonal edge. r = 1 on the same edges builds. Production project `d0260694`, 2026-10-14. - **Workaround:** every fillet and chamfer builds in a forked child (`app/backend/n3xd/cad/cad_pool.py`), where the fault becomes a "try a smaller radius" error. An earlier gate built parts under 200 faces in the server process, on the assumption that 8.0.1's `ChFi3d_Builder::StartSol()` hardening had removed the fault class. It hadn't. - **Last seen:** OCCT 8.0.1 (`n3xd-ocp` 8.0.1.2). ## Fillets at an exact tangent radius fail or come out invalid - **Symptom:** at a radius that makes the blend exactly tangent to a neighbouring face, `BRepFilletAPI_MakeFillet` either reports `IsDone() == false` or reports success and returns a solid that `BRepCheck_Analyzer` rejects. - **Workaround:** retry with an imperceptibly smaller radius (`app/backend/n3xd/cad/operations/fillet.py`). - **Last seen:** OCCT 8.0.1. ## Tangential union along a closed curve returns an empty shape - **Symptom:** fusing two solids that touch along a full circle (a revolved ring exactly filling a matching hole) gives `IsDone()` and an empty compound, which `BRepCheck_Analyzer` calls valid. Exact, fuzzy, `BOPAlgo_GlueShift`, OBB, `CellsBuilder` and `MakerVolume` all give an empty or invalid result. - **Workaround:** `boolean_combine` rejects the empty result, so the feature reports `boolean_failed`. Moving the tool by 1e-4 mm before the fuse gives the right union in both operand orders, but silently moving user geometry was rejected as a default. The app-side opt-in idea is in `app/NOTEPAD.md`. - **Test:** `app/backend/tests/test_boolean.py::test_tangential_fuse_is_rejected_not_silently_emptied` - **Last seen:** OCCT 8.0.1 (rechecked 2026-08-11). ## `BRepGProp` mass properties drift on spline-bounded shapes - **Symptom:** with default settings, `SurfaceProperties_s` and `VolumeProperties_s` misreport spline-bounded faces and solids, while the geometry itself is exact. A closed Catmull-Rom region in `spline.n3xd` reads 110.64 against a true 110.01 (+0.57 %). Its extrusion reads about 1109 against 1100.1. - **Partial workaround:** the eps overload (`SurfaceProperties_s(shape, props, 1e-6)`) fixes the area (110.01) but makes the volume worse (about 1166), so it is not a drop-in. The app-side follow-up is in `app/NOTEPAD.md`. - **Last seen:** OCCT 7.9 / 8.0 (not rechecked since).