refactor: rebrand project to HartOMat
This commit is contained in:
+10
-10
@@ -1,4 +1,4 @@
|
||||
# Schaeffler Automat — Master Roadmap
|
||||
# HartOMat — Master Roadmap
|
||||
|
||||
> **Consolidated:** 2026-03-11
|
||||
> **Branch:** `refactor/v2`
|
||||
@@ -53,7 +53,7 @@ Verified against the repository on `2026-03-13`.
|
||||
|
||||
This roadmap now treats the USD refactor as an implementation workstream, not as a blocked strategic idea.
|
||||
|
||||
The key architectural clarification from [docs/rfcs/0001-step-to-usd-workflow.md](/home/hartmut/Documents/Copilot/schaefflerautomat/docs/rfcs/0001-step-to-usd-workflow.md#L139) is:
|
||||
The key architectural clarification from [docs/rfcs/0001-step-to-usd-workflow.md](/home/hartmut/Documents/Copilot/hartomat/docs/rfcs/0001-step-to-usd-workflow.md#L139) is:
|
||||
|
||||
- USD becomes the canonical persisted scene asset
|
||||
- the browser does not need to render USD directly
|
||||
@@ -112,7 +112,7 @@ This priority combines dead-code deletion and task decomposition because both ar
|
||||
**Status:** Not started in code. Architecture decisions are documented, but repo work has not begun.
|
||||
|
||||
**Milestones:**
|
||||
- M1: `export_step_to_usd.py` produces valid USD with part hierarchy and `schaeffler:partKey` on every prim
|
||||
- M1: `export_step_to_usd.py` produces valid USD with part hierarchy and `hartomat:partKey` on every prim
|
||||
- M2: `usd_master` MediaAsset type exists in DB and is stored after each export
|
||||
- M3: `GET /api/cad/{id}/scene-manifest` returns partKey list with effective assignments
|
||||
- M4: `PUT /api/cad/{id}/part-materials` accepts `{partKey → materialName}` map and persists it
|
||||
@@ -139,7 +139,7 @@ This priority combines dead-code deletion and task decomposition because both ar
|
||||
- None blocking at the architecture level. The roadmap decisions for `usd-core` and index-space seam/sharp primvars are already captured in `docs/plans/0001-step-to-usd-implementation.md`.
|
||||
|
||||
**Acceptance gates:**
|
||||
- `python3 export_step_to_usd.py --step_path 81113-l_cut.stp` → valid `.usd` file, 25 part prims, each has `schaeffler:partKey` attribute
|
||||
- `python3 export_step_to_usd.py --step_path 81113-l_cut.stp` → valid `.usd` file, 25 part prims, each has `hartomat:partKey` attribute
|
||||
- `GET /api/cad/{id}/scene-manifest` returns `parts[]` array with `part_key`, `source_name`, `effective_material`, `is_unassigned`
|
||||
- Click part in ThreeDViewer → assign material → reload page → material still assigned (persisted via `partKey`, not mesh name)
|
||||
- CAD file with mismatched Excel names: UI shows `unmatched_source_rows` count > 0 and unassigned parts highlighted
|
||||
@@ -226,7 +226,7 @@ This priority combines dead-code deletion and task decomposition because both ar
|
||||
The current USD render path matches 0/25 parts for material assignment because Blender has no way to resolve canonical material names from the imported USD prims. This milestone embeds that metadata directly into the USD file.
|
||||
|
||||
- Pass resolved `material_map` to `export_step_to_usd.py` via `--material_map` CLI arg (JSON string)
|
||||
- Write `schaeffler:canonicalMaterialName` as a STRING primvar on each Mesh prim during USD export
|
||||
- Write `hartomat:canonicalMaterialName` as a STRING primvar on each Mesh prim during USD export
|
||||
- `import_usd.py` reads the primvar after import and performs direct material lookup (no name-matching heuristics)
|
||||
- Acceptance: Blender log shows `25/25 parts matched` for material assignment from USD
|
||||
|
||||
@@ -244,20 +244,20 @@ Currently `generate_usd_master_task` does not resolve the material map before pa
|
||||
|
||||
- `generate_usd_master_task` must resolve `material_map` via `material_service.resolve_material_map()` and pass to subprocess
|
||||
- This makes the USD file self-contained: canonical material names baked into the asset
|
||||
- Acceptance: USD file inspected via `pxr` shows `schaeffler:canonicalMaterialName` on every mesh prim
|
||||
- Acceptance: USD file inspected via `pxr` shows `hartomat:canonicalMaterialName` on every mesh prim
|
||||
|
||||
**File targets:**
|
||||
|
||||
| Action | Path |
|
||||
|---|---|
|
||||
| CREATE | `render-worker/scripts/export_step_to_usd.py` — STEP→USD exporter (seam/sharp payload on mesh prims) |
|
||||
| CREATE | `render-worker/scripts/import_usd.py` — Blender USD import helper: reads `primvars:schaeffler:seamEdgeVertexPairs`, marks seam+sharp |
|
||||
| CREATE | `render-worker/scripts/import_usd.py` — Blender USD import helper: reads `primvars:hartomat:seamEdgeVertexPairs`, marks seam+sharp |
|
||||
| MODIFY | `render-worker/scripts/blender_render.py` — accept `--usd_path` flag alongside `--glb_path` |
|
||||
| MODIFY | `backend/app/services/render_blender.py` — pass `usd_master` asset path when available |
|
||||
| MODIFY | `backend/app/domains/pipeline/tasks/export_glb.py` — retire `generate_gltf_production_task` once USD path validated |
|
||||
| KEEP (compat) | `render-worker/scripts/export_gltf.py` — retained as fallback until USD path confirmed stable |
|
||||
| MODIFY (M5) | `render-worker/scripts/export_step_to_usd.py` — accept `--material_map` CLI arg, write `schaeffler:canonicalMaterialName` primvar on each Mesh prim |
|
||||
| MODIFY (M5) | `render-worker/scripts/import_usd.py` — read `schaeffler:canonicalMaterialName` primvar after import, use for direct material lookup |
|
||||
| MODIFY (M5) | `render-worker/scripts/export_step_to_usd.py` — accept `--material_map` CLI arg, write `hartomat:canonicalMaterialName` primvar on each Mesh prim |
|
||||
| MODIFY (M5) | `render-worker/scripts/import_usd.py` — read `hartomat:canonicalMaterialName` primvar after import, use for direct material lookup |
|
||||
| MODIFY (M6) | `render-worker/scripts/export_step_to_usd.py` — fix `_extract_mesh()` to strip shape Location; accumulate parent transforms in `_traverse_xcaf` |
|
||||
| MODIFY (M7) | `backend/app/domains/pipeline/tasks/export_glb.py` (or USD task) — call `resolve_material_map()` and pass result to export subprocess |
|
||||
|
||||
@@ -268,7 +268,7 @@ Currently `generate_usd_master_task` does not resolve the material map before pa
|
||||
- Turntable MP4 plays without texture or material pop artifacts
|
||||
- (M5) Blender log shows `[USD_IMPORT] 25/25 parts matched` for material assignment (not 0/25)
|
||||
- (M6) USD render geometry matches STEP import geometry side-by-side for multi-level assemblies (no displaced/rotated parts)
|
||||
- (M7) `python3 -c "from pxr import Usd; stage=Usd.Stage.Open('usd_master.usd'); [print(p.GetAttribute('primvars:schaeffler:canonicalMaterialName').Get()) for p in stage.Traverse()]"` → prints canonical material name for every mesh prim
|
||||
- (M7) `python3 -c "from pxr import Usd; stage=Usd.Stage.Open('usd_master.usd'); [print(p.GetAttribute('primvars:hartomat:canonicalMaterialName').Get()) for p in stage.Traverse()]"` → prints canonical material name for every mesh prim
|
||||
|
||||
### Priority 6 — Admin and Product Surface Simplification
|
||||
|
||||
|
||||
Reference in New Issue
Block a user