
HartmutandClaude Sonnet 4.6
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
..
2026-03-08 20:37:05 +01:00
2026-03-08 19:42:10 +01:00
2026-03-05 22:13:21 +01:00
2026-03-08 20:41:26 +01:00
2026-03-06 21:50:07 +01:00
2026-03-08 20:37:05 +01:00
2026-03-08 20:20:07 +01:00
2026-03-08 20:34:36 +01:00
2026-03-08 19:42:10 +01:00
2026-03-05 22:12:38 +01:00
2026-03-05 22:12:38 +01:00
2026-03-08 19:42:10 +01:00
2026-03-08 19:25:08 +01:00