Files
matthewtrahan 19d32bed1d tines: make them exactly one layer, and let squat walls carry them
Two tine-correctness fixes, both from Matthew's read against Slant3D's spec.

ONE LAYER: tineH was hardcoded 0.3 in both builders (prop.js emitTines and
fins.js) -- Slant3D's number, but his layer height. At Matthew's 0.2mm that bakes
a 1.5-layer tine, which slices into two beads and loses the "single continuous
layer line" that is the whole reason a horizontal tine fuses in yet snaps off
(FIN-SPEC "Why the tines must be horizontal"). Set both to 0.2 = one slicer
layer, with a comment that it must track the layer height. (Tines were already
geometrically horizontal -- verified 0 slanted faces across 33,768 tine triangles
over every stress model and pose; the "not horizontal" look is the comb marching
up a sloped wall, each rung flat.)

SQUAT WALLS GOT NO TINES: emitTines gated out any wall whose top sits below
baseH+0.2 -- correct for a flanged wall (nothing but flange down there) but it
skipped every squat wall (top 0.4-1.3mm). Added a minTop param defaulting to the
flanged floor; the squat pass passes squatBrimH so tines attach above the brim.
Squat walls now carry tines wherever the low overhang is steep enough to grip
(a near-horizontal ledge still honestly gets none -- can't bite a flat ceiling).

tests/tine_shape.test.js pins all of it: tineH == one layer in both builders;
every tooth exactly one layer tall with no slanted faces; and a low-contact wall
gets 0 tines at the flanged floor but >=1 at the brim floor.
2026-09-06 19:33:00 -05:00
..