Hartmut
ffcaef4659
feat: add workflow output comparison tooling
2026-04-07 11:45:28 +02:00
Hartmut
c17b7d2e8f
feat: execute workflow bridge nodes in graph runtime
2026-04-07 10:42:59 +02:00
Hartmut
6ad34ceed2
feat: add workflow run dispatch foundation
2026-04-07 10:11:46 +02:00
Hartmut
56ee5fc5bf
feat: add workflow node registry phase 2
2026-04-07 08:59:27 +02:00
Hartmut
63e35ce807
feat: stabilize workflow phase 1 foundation
2026-04-07 08:48:48 +02:00
Hartmut
b795f0e6d6
refactor: rebrand project to HartOMat
2026-04-06 12:45:47 +02:00
Hartmut
ec667dd56a
refactor: remove dead export_gltf.py, cleanup rendering tasks, improve tessellation UI
...
- Remove export_gltf.py (Blender-based GLB export replaced by OCC direct)
- Remove unused export_gltf_for_order_line_task
- Add Ultra tessellation preset to Admin settings
- Improve tessellation preset descriptions and styling
- Minor cleanup across media, rendering, and workflow modules
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-13 10:37:35 +01:00
Hartmut
577dd1ca7e
refactor(P11+P12): codebase hygiene — CLAUDE.md rewrite, type safety, dead code removal
...
- Rewrite CLAUDE.md to match current 8-service architecture (was 11, 5 deleted)
- Remove all as-any casts in OrderDetail.tsx (9 casts → 0)
- Add cad_parsed_objects/cad_part_materials to OrderItem interface
- Rename require_admin → require_global_admin across 6 router files (22 calls)
- Remove EXPORT_GLB_PRODUCTION enum + generate_gltf_production_task (dead code)
- Remove worker-thumbnail from ALLOWED_SERVICES, replace Flamenco link
- Delete obsolete PLAN.md (1455 lines) and PLAN_REFACTOR.md (1174 lines)
- Fix digit-only USD prim names with p_ prefix
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-13 07:22:04 +01:00
Hartmut
b41e70cdad
feat(phase7.3-ext): workflow executor + config validation
...
- workflow_schema.py: WorkflowConfig Pydantic model validates all node
step values against StepName enum, edges reference declared node IDs,
unique node IDs enforced; WorkflowEdge uses "from"/"to" aliases
- workflow_executor.py: dispatch_workflow() validates config, topological-
sorts nodes (Kahn's algorithm, raises on cycles), maps StepName →
Celery task name via STEP_TASK_MAP (all 15 StepName values covered),
dispatches via celery_app.send_task()
- workflow_router.py: config validation on POST/PUT (422 on invalid);
POST /{id}/dispatch?context_id= endpoint (PM+) dispatches workflow
steps as Celery tasks for a given entity
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-08 20:41:26 +01:00
Hartmut
1409be171c
feat(phase7.3): workflow editor pipeline step nodes
...
- GET /api/workflows/pipeline-steps: returns all StepName enum values
with category (input|processing|rendering|output) + descriptions;
registered before /{workflow_id} to avoid path collision
- frontend/src/api/workflows.ts: getPipelineSteps(), PipelineStep
and PipelineStepsResponse interfaces
- WorkflowEditor: PipelineStepsPanel showing steps grouped by category
with collapsible accordion sections
- ConfigSidepanel: "Pipeline Step" select dropdown binds any node to a
StepName; selected step description shown below dropdown
- Active workflow indicator: green dot next to is_active=true entries
- Improved empty state with descriptive copy
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-08 20:24:17 +01:00
Hartmut
979b0082ec
fix(api): remove 307 redirect on GET /api/workflows
...
Change list/create route paths from '/' to '' on workflow_router so
GET /api/workflows and POST /api/workflows respond directly without
307 redirect. The redirect was causing axios to drop the Authorization
header, making the WorkflowEditor always show an empty list.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-06 18:26:27 +01:00
Hartmut
7e47e4aca7
feat(C1+C2): workflow system — WorkflowDefinition + Celery Canvas builder
...
Migrations 037 (workflow tables + 3 seed definitions) + 038 (output_types.workflow_definition_id).
WorkflowDefinition/Run/NodeResult SQLAlchemy models in domains/rendering/models.py.
workflow_builder.py: dispatch_workflow() with Celery Canvas for still/turntable/multi_angle.
workflow_router.py: CRUD endpoints at /api/workflows (admin/PM guards).
dispatch_service.py: dispatch_render_with_workflow() prefers workflow path when
OutputType.workflow_definition_id is set, falls back to legacy dispatch otherwise.
main.py: registers workflows_router.
models/__init__.py: re-exports WorkflowDefinition, WorkflowRun, WorkflowNodeResult.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-06 17:07:21 +01:00