woodshop/tests
rob 7f49e65c33 Miter: full-width cut + per-kind feature inputs (usability)
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>
2026-05-31 09:18:55 -03:00
..
test_bom_window.py Mark purchased: scan a receipt to fill actual prices 2026-05-30 23:47:00 -03:00
test_command_bar.py Multi-image reference + render-feedback "Match photo" self-correction 2026-05-30 23:25:13 -03:00
test_cutlist.py Unify CLI/voice cut list onto the CutPlan (single source of truth) 2026-05-30 22:06:49 -03:00
test_cutplan.py Fix material/inventory boundary + offcut-preservation (Codex review) 2026-05-30 20:01:23 -03:00
test_driver.py Mark purchased: scan a receipt to fill actual prices 2026-05-30 23:47:00 -03:00
test_estimate.py Phase 2: finish costs by kind in the estimate 2026-05-30 19:04:44 -03:00
test_feature_panel.py Miter: full-width cut + per-kind feature inputs (usability) 2026-05-31 09:18:55 -03:00
test_gen_tools.py Portability + consistency polish (Codex review) 2026-05-30 21:56:28 -03:00
test_geometry.py Add auto-assembly (Make connection) + feature rotation 2026-05-29 17:15:51 -03:00
test_gui_controller.py Multi-image reference + render-feedback "Match photo" self-correction 2026-05-30 23:25:13 -03:00
test_instructions.py Phase 2: structured build instructions (deterministic + optional AI polish) 2026-05-30 14:36:50 -03:00
test_inventory.py Fix material/inventory boundary + offcut-preservation (Codex review) 2026-05-30 20:01:23 -03:00
test_inventory_window.py Phase 7: shop Inventory window + stats 2026-05-30 19:25:28 -03:00
test_jigs.py Address shop-packet review (consistency, determinism, validation, jigs) 2026-05-30 15:11:02 -03:00
test_layout.py BOM window: tabs + cut-layout nesting + print (phase 1 of shop output) 2026-05-30 13:07:49 -03:00
test_materials.py Phase 1: material + finish fields + color resolver 2026-05-30 19:01:28 -03:00
test_miter.py Miter: full-width cut + per-kind feature inputs (usability) 2026-05-31 09:18:55 -03:00
test_prices.py Material-aware pricing: oak ≠ pine 2026-05-30 19:48:26 -03:00
test_scene.py Phase 1: material + finish fields + color resolver 2026-05-30 19:01:28 -03:00