3 Commits

Author SHA1 Message Date
Hartmut b795f0e6d6 refactor: rebrand project to HartOMat 2026-04-06 12:45:47 +02:00
Hartmut cc3071297b feat(M5-M7): embed canonical material names in USD via customData + pxr direct read
- export_step_to_usd.py: accept --material_map CLI arg, write
  schaeffler:canonicalMaterialName as customData on each Mesh prim,
  fix geometry transform (strip shape Location before face exploration,
  apply both face_loc and shape_loc sequentially)
- import_usd.py: after Blender USD import, use pxr to read customData
  directly from the USD file — builds {part_key: material_name} lookup
  (Blender ignores STRING primvars and customData, but pxr reads both)
- _blender_materials.py: add apply_material_library_direct() for exact
  dict-based material assignment without name-matching heuristics
- _blender_scene_setup.py: prefer direct USD lookup, fall back to
  name-matching for legacy USD files without material metadata
- export_glb.py (generate_usd_master_task): resolve material_map via
  material_service.resolve_material_map() and pass to subprocess;
  include material hash in cache key for invalidation
- ROADMAP.md: update P5 status, add M5-M7 milestones

Tested: 3/3 parts matched (ans_lfs120), 172/175 parts matched
(F-802007.TR4-D1-H122AG). Previous: 0/25 matched.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 23:04:26 +01:00
Hartmut 9c6ae18b28 chore(agents): add three new specialist agents
/usd-export — USD authoring specialist
  - Full pxr API reference (Stage, Mesh, Primvars, MaterialBinding, Override layers)
  - XCAF traversal pattern for partKey generation
  - Coordinate system (OCC Z-up mm → USD Y-up mm, no scaling needed)
  - FlattenLayerStack delivery pattern
  - Test commands + common errors table
  - Failure protocol linking to /plan

/render-pipeline — Render script chain specialist
  - Full script chain (export_step_to_gltf → export_gltf → still_render → turntable_render)
  - GPU activation 6-step order (critical, open_mainfile resets compute_device_type)
  - AF suffix stripping for material matching
  - GLB extras round-trip documentation
  - GCPnts_UniformAbscissa requirement (Polygon3D_s returns None in XCAF)
  - Parameter propagation rule (admin.py → export_glb.py → script → Blender)
  - Direct subprocess test commands

/tenant-audit — RLS correctness specialist
  - HTTP + Celery layer audit steps
  - Live cross-tenant leak test pattern (SET LOCAL + count comparison)
  - Fix patterns for middleware and task-side set_tenant_context
  - Role permission matrix
  - Tables requiring RLS policies

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-11 19:04:00 +01:00