woodshop/tests
rob c36ed3407e Phase 1: material + finish fields + color resolver
Parts now carry material/finish/finish_color instead of a finishes list.

- Part: material, finish (raw|sanded|clear|stain|paint), finish_color (hex).
  from_dict migrates the old finishes list; serialization additive.
- scene.set_material / set_finish / paint (finish() kept as alias); colors
  normalized via new colors.py (name->hex, lighten/darken/blend).
- part_color() resolves stock->material->finish->visual; viewer applies it with
  a subtle deterministic per-part tint (same-material boards stay distinct);
  sanded reads lighter, painted shows its color, stain/clear tint.
- lumber.MATERIAL_COLORS + default_material(stock).
- CLI: paint / finish / material subcommands; controller TOOL_CMD wood-paint/
  finish/material + group methods; Parts panel Paint…/Material… buttons +
  inspector shows material/finish.
- Updated instructions (sand + finish coats), cli status, estimate to new model.
- tests: set/paint/migrate/json-roundtrip, color priority + fallback, helpers.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 19:01:28 -03:00
..
test_bom_window.py Add project estimate: consumables, labor, and suggested selling price 2026-05-30 16:40:15 -03:00
test_cutlist.py Add plywood (sheet stock) 2026-05-30 12:33:49 -03:00
test_cutplan.py Fix lock-aware plywood reopt + honest Best-of-100 when locked 2026-05-30 15:46:39 -03:00
test_driver.py Carry conversation history so "yes" / "do that" resolve 2026-05-30 15:42:33 -03:00
test_estimate.py Add project estimate: consumables, labor, and suggested selling price 2026-05-30 16:40:15 -03:00
test_geometry.py Add auto-assembly (Make connection) + feature rotation 2026-05-29 17:15:51 -03:00
test_gui_controller.py Carry conversation history so "yes" / "do that" resolve 2026-05-30 15:42:33 -03:00
test_instructions.py Phase 2: structured build instructions (deterministic + optional AI polish) 2026-05-30 14:36:50 -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_prices.py Add cost estimate (Cost tab) with editable Kent NB price book 2026-05-30 16:23:59 -03:00
test_scene.py Phase 1: material + finish fields + color resolver 2026-05-30 19:01:28 -03:00