| Kernel test "passes" instantly / never runs | File is in __kernel-tests__/, excluded from all normal vitest projects — plain pnpm run test:run __kernel-tests__/foo matches nothing | Use pnpm exec vitest run --config vitest.profile.config.ts <pattern>; if it should gate CI, move it into the generators project |
| Export matrix passes suspiciously fast / uniformly | exportBin's last-solid cache is param-blind — without a per-scenario reset every case re-exports the first solid, all assertions vacuous | beforeEach(() => setLastSolid(null)) from shapeCache.ts, as binGenerator.scenario.export-integrity.test.ts does; background: git show 7d935bc55 |
| Snapshots pass but geometry looks wrong | Snapshot is triangleCount only | Add customAssert using meshAssertions.ts helpers for positional/structural claims |
| Feature missing from output, no error | Silent-skip below printable thresholds (tiny cells, pattern height, handle height) | Check size thresholds before suspecting your code; see geometry-generation |
| Parameter edit doesn't change geometry | Param missing from a shape-cache key; stale solid served | Cache-key discipline lives in the geometry-generation skill |
| Path cutout renders as a plain rectangle in 3D, 2D looks fine | Duplicate consecutive vertices → OCCT rejects the wire → silent bounding-box fallback | Dedup via dropCoincidentPoints (src/shared/utils/polyline.ts) in both editor and worker |
| Bounding-box test "off by 0.5 mm" | Outer size is units×42 − 0.5 clearance | Assert with assertBoundingBoxMatchesParams, don't hand-roll expectations |
| Curved edges coarse despite tolerance plumbing | brepkit angular tolerances are radians; a degrees-magnitude value silently disables refinement | Pass EDGE_ANGULAR_TOLERANCE_RAD (src/shared/constants/tessellation.ts) at every meshEdges call site |
Crash a[e] is undefined only at x.5 sizes | Integer assumption on fractional dims | Half-grid recipe above |