Two issues Rob hit:
1. Miter pivoted at the END CENTRE, so 45° only notched a corner — you couldn't
cut edge-to-edge. miter_cutter() now pivots about an EDGE of the end, so a
45° miter is a true full-width corner cut; the angle's sign picks which edge
stays long. Factored into geometry.miter_cutter so the wedge preview uses the
exact same cut. edit_feature keeps a miter on an end face.
2. The Joinery panel showed every input for every feature, so most knobs did
nothing for a miter (only miter/bevel) or chamfer (only width), and the face
dropdown offered faces a miter can't use. The panel now shows only the
relevant rows per kind (KIND_FIELDS) and limits faces per kind (KIND_FACES:
tenon/miter = ends only).
tests: 45° miter wedge spans the full width; miter face stays an end; panel
shows angle-only for miter, width-only for chamfer, box fields for mortise.
243 pass.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>