From 5d95a568ac0ec63f08c4a9325e23085589706a9f Mon Sep 17 00:00:00 2001
From: ValueOn AG
Date: Mon, 8 Jun 2026 10:31:33 +0200
Subject: [PATCH] refactory workflowAutomation completed as system component
reolacing automation2 and graphEditor
---
b-reference/platform/workflowAutomation.md | 36 ++++---
.../2026-06-automation-system-component.md | 95 +++++++++++++++----
2 files changed, 102 insertions(+), 29 deletions(-)
rename c-work/{2-build => 4-done}/2026-06-automation-system-component.md (78%)
diff --git a/b-reference/platform/workflowAutomation.md b/b-reference/platform/workflowAutomation.md
index 6d460a5..02b167c 100644
--- a/b-reference/platform/workflowAutomation.md
+++ b/b-reference/platform/workflowAutomation.md
@@ -1,5 +1,5 @@
-
+
# WorkflowAutomation (System-Komponente)
@@ -13,20 +13,26 @@
- **System-Lifespan Boot:** Scheduler- und Email-Poller-Start in `app.py` (nicht mehr Feature-`onStart`).
- **Mandatsweite API:** `/api/workflow-automation/{workflows,versions,runs,tasks,steps}` — kein `{instanceId}` als RBAC-Anker.
-- **RBAC-Modell:** Mandats-Mitgliedschaft (read), Mandats-Admin (write/execute/delete), `isPlatformAdmin`-Bypass. Keine Feature-Instanz-Rollen; `instantiable=False`.
+- **RBAC-Modell:** Mandats-Mitgliedschaft (read), Mandats-Admin (write/execute/delete), `isPlatformAdmin`-Bypass. Keine Feature-Instanz-Rollen; `instantiable=False`. `TABLE_NAMESPACE` = `system.workflowAutomation`.
- **DB-Scoping:** `AutoWorkflow.mandateId` + `runAsPrincipal` (Owner). `targetFeatureInstanceId` + per-Node `FeatureInstanceRef` bleiben als Daten-Scope.
+- **RBAC-Boot-Migration:** `_migrateRbacNamespace()` in `onBootstrap()` migriert bei jedem Start idempotent AccessRule-Einträge von `feature.graphicalEditor` auf `system.workflowAutomation`.
## Code-Pfade
| Schicht | Pfad |
|---------|------|
+| Komponente (Entry) | `platform-core/modules/workflowAutomation/mainWorkflowAutomation.py` |
+| Editor | `platform-core/modules/workflowAutomation/editor/` |
+| Engine | `platform-core/modules/workflowAutomation/engine/` |
+| Scheduler | `platform-core/modules/workflowAutomation/scheduler/` |
| Routen (mandatsweit) | `platform-core/modules/routes/routeWorkflowAutomation.py` |
+| Interface (DB-Ops) | `platform-core/modules/interfaces/interfaceWorkflowAutomation.py` |
+| Shared Helpers | `platform-core/modules/shared/workflowAutomationHelpers.py` |
| Models (kanonisch, L1) | `platform-core/modules/datamodels/datamodelWorkflowAutomation.py` |
| Navigation-Sektion | `platform-core/modules/datamodels/datamodelNavigation.py` (Block `workflowAutomation`) |
-| Feature-Mantel (deprecated) | `platform-core/modules/features/graphicalEditor/` |
-| Graph-Engine | `platform-core/modules/workflows/automation2/` |
-| Scheduler | `platform-core/modules/workflows/scheduler/` |
-| Frontend | `ui-nyla/src/pages/WorkflowAutomationPage.tsx` |
+| Frontend Hub | `ui-nyla/src/pages/workflowAutomation/WorkflowAutomationHubPage.tsx` |
+| Frontend Tabs | `ui-nyla/src/pages/workflowAutomation/tabs/{WorkflowsTab,RunsTab,RunDetailTab,EditorTab,TemplatesTab}.tsx` |
+| Frontend API Client | `ui-nyla/src/api/workflowAutomationApi.ts` |
## API
@@ -36,14 +42,24 @@
|---------|------|--------------|
| GET | `/workflows` | Workflows mandatsweit (RBAC-gefiltert) |
| GET | `/workflows/{id}` | Einzelner Workflow |
+| POST | `/workflows/{id}/execute` | Workflow ausführen |
+| DELETE | `/workflows/{id}` | Workflow + Cascade löschen |
| GET | `/versions/{workflowId}` | Versionen eines Workflows |
+| POST | `/versions/{id}/publish` | Version publizieren |
| GET | `/runs` | Läufe mandatsweit |
| GET | `/runs/{id}` | Einzelner Run |
+| GET | `/runs/{id}/detail` | Run-Detail mit Steps |
+| GET | `/runs/{id}/stream` | SSE Run-Stream |
+| POST | `/runs/{id}/stop` | Run stoppen |
+| DELETE | `/runs/{id}` | Run + Steps löschen |
| GET | `/tasks` | Human-Tasks mandatsweit |
| POST | `/tasks/{id}/complete` | Task abschliessen |
+| POST | `/tasks/{id}/cancel` | Task abbrechen |
| GET | `/steps/{runId}` | Step-Logs eines Runs |
-| DELETE | `/workflows/{id}` | Workflow + Cascade löschen |
-| DELETE | `/runs/{id}` | Run + Steps löschen |
+| GET | `/metrics` | Workflow-Metriken |
+| GET | `/node-types` | Node-Typ-Katalog |
+| GET | `/templates` | Workflow-Vorlagen |
+| GET | `/connections` | Verfügbare Connections |
## Navigation
@@ -54,10 +70,6 @@ Statischer Block `workflowAutomation` (order 25) mit UI-Objekten:
- `page.system.workflowAutomation.runs`
- `page.system.workflowAutomation.tasks`
-## Migration
-
-Feature-Routen `/api/workflows/{instanceId}/…` bleiben aktiv (Koexistenz). Die GE-Feature-Registrierung (Store, `TEMPLATE_ROLES`, `UI_OBJECTS`) ist DEPRECATED, wird aber für bestehende Instanzen noch ausgeliefert. Vollständige Entfernung des Feature-Mantels erfolgt nach Abschluss der Datenmigration.
-
## Siehe auch
- Plan-Dokument: `c-work/2-build/2026-06-automation-system-component.md`
diff --git a/c-work/2-build/2026-06-automation-system-component.md b/c-work/4-done/2026-06-automation-system-component.md
similarity index 78%
rename from c-work/2-build/2026-06-automation-system-component.md
rename to c-work/4-done/2026-06-automation-system-component.md
index 8fbeff5..c68142a 100644
--- a/c-work/2-build/2026-06-automation-system-component.md
+++ b/c-work/4-done/2026-06-automation-system-component.md
@@ -1,9 +1,12 @@
-
+
+
# WorkflowAutomation als System-Komponente — `graphicalEditor` raus aus dem Feature-Modell
+> **Migration Status: COMPLETE (2026-06-08).** Alle `graphicalEditor`-Code-Referenzen eliminiert. Code aus `features/graphicalEditor/`, `workflows/automation2/`, `workflows/scheduler/` verschoben nach `modules/workflowAutomation/{editor,engine,scheduler}/`. Originale gelöscht, `__init__.py`-Shims als Safety-Net. Test-Imports, DEPRECATED-Kommentare, Store/RBAC-Namespace, Demo-Configs, Frontend-Kommentare/Logs bereinigt. `graphicalEditorRunFileLogger.py` → `runFileLogger.py`. `datamodelFeatureGraphicalEditor.py` gelöscht. Frontend-Monolith gesplittet (D1-D3). RBAC-Migration als idempotente Boot-Routine. Verbleibend: AC5 per-Node Billing + AC7 Run-as-Principal (Scope CustomerCases), automatisierte Tests T1-T5 (pending), Smoke-Test Scheduler (manuell bei Deploy).
+
> **Treiber:** Entscheid aus `c-work/0-ideas/2026-06-CustomerCases-step1-architecture.md` / `…-step3-features-plan.md` **A0.4**. Dort wurde die Entkopplung als Roadmap markiert; sie wird **vorgezogen**, weil sie sonst die Solution-Schicht (Ownership/RBAC/Billing) später erneut einholt.
>
> **Namens-Konvention:** Die System-Komponente heisst **`WorkflowAutomation`** (Code-Token `WorkflowAutomation`/`workflowAutomation`) — semantisch eindeutig und gut greppbar. Das generische Wort «Automation» ist im Bestand schon mehrfach belegt (`AutomationsDashboardPage`, `routeAutomationWorkspace`, `/automations`, `workflows/automation2`) und bleibt dort **unverändert**. UI-Label (kundensichtbar): **«Workflow-Automation»** / «Automatisierung».
@@ -215,6 +218,57 @@ api/workflowAutomationApi.ts # /api/workflow-automation/... (ersetzt workfl
## Umsetzungs-Checkliste
+**Phase A — Code-Migration (Copy to new locations + re-export shims):**
+- [x] A2: `modules/workflows/automation2/*.py` → `modules/workflowAutomation/engine/` (executionEngine, graphUtils, runEnvelope, scheduleCron, graphicalEditorRunFileLogger, pickNotPushMigration, featureInstanceRefMigration, workflowArtifactVisibility, clickupTaskUpdateMerge, udmUpstreamShapes) *(2026-06-07)*
+- [x] A2: `modules/workflows/automation2/executors/*.py` → `modules/workflowAutomation/engine/executors/` (actionNodeExecutor, inputExecutor, flowExecutor, triggerExecutor, ioExecutor, dataExecutor) *(2026-06-07)*
+- [x] A3: `modules/workflows/scheduler/mainScheduler.py` → `modules/workflowAutomation/scheduler/mainScheduler.py` *(2026-06-07)*
+- [x] A5: `modules/features/graphicalEditor/{portTypes,adapterValidator,nodeRegistry,nodeAdapter,switchOutput,entryPoints,conditionOperators,upstreamPathsService,_workflowFileSchema}.py` → `modules/workflowAutomation/editor/` *(2026-06-07)*
+- [x] A5: `modules/features/graphicalEditor/nodeDefinitions/*.py` → `modules/workflowAutomation/editor/nodeDefinitions/` *(2026-06-07)*
+- [x] A5: `modules/features/graphicalEditor/emailPoller.py` → `modules/workflowAutomation/scheduler/emailPoller.py` *(2026-06-07)*
+- [x] Re-export shims created at old `__init__.py` locations for backward compatibility
+
+**Phase F — Delete old originals (cleanup):**
+- [x] F1: Deleted all individual .py files from `modules/features/graphicalEditor/` (shims: interfaceFeatureGraphicalEditor.py, mainGraphicalEditor.py; originals: portTypes, adapterValidator, nodeRegistry, nodeAdapter, switchOutput, entryPoints, conditionOperators, upstreamPathsService, _workflowFileSchema, emailPoller + all nodeDefinitions/*.py) *(2026-06-07)*
+- [x] F2: Deleted all individual .py files from `modules/workflows/automation2/` and `executors/` (executionEngine, graphUtils, runEnvelope, scheduleCron, graphicalEditorRunFileLogger, pickNotPushMigration, featureInstanceRefMigration, workflowArtifactVisibility, clickupTaskUpdateMerge, udmUpstreamShapes + 6 executor files) *(2026-06-07)*
+- [x] F3: Deleted `modules/workflows/scheduler/mainScheduler.py` *(2026-06-07)*
+- [x] F4: `nodeDefinitions/__init__.py` converted to re-export shim (imports STATIC_NODE_TYPES from new location)
+- [x] F4: `routeWorkflowAutomation.py` imports updated to `modules.workflowAutomation.editor._workflowFileSchema`
+- [x] `automation2/__init__.py`, `automation2/executors/__init__.py`, `scheduler/__init__.py` retained as re-export shims → backward compat for remaining importers
+- [x] `datamodelFeatureGraphicalEditor.py` gelöscht (keine Caller mehr) *(2026-06-08)*
+- [x] Test file imports (`tests/unit/`, `tests/integration/`, `tests/demo/`) updated to canonical `modules.workflowAutomation.*` paths *(2026-06-08)*
+
+**Phase D — Frontend Struktur (D1-D3):**
+- [x] D1: `WorkflowAutomationPage.tsx` monolith (1566 lines) split into `pages/workflowAutomation/` with Hub + 5 tab components + types.ts *(2026-06-08)*
+- [x] D2: Editor views re-exported from `pages/workflowAutomation/views/` *(2026-06-08)*
+- [x] D3: FlowEditor components re-export shim at `components/workflowAutomation/FlowEditor/` *(2026-06-08)*
+
+**Phase A10 — RBAC Namespace Migration (Boot-integriert):**
+- [x] `_migrateRbacNamespace()` as idempotent routine in `onBootstrap()` — migrates AccessRule objectKeys from `feature.graphicalEditor` to `system.workflowAutomation` on every boot *(2026-06-08)*
+- [x] `TABLE_NAMESPACE` in `interfaceRbac.py` updated from `feature.graphicalEditor` to `system.workflowAutomation` *(2026-06-08)*
+- [x] Standalone script `scripts/script_db_migrate_rbac_workflow_automation.py` retained as manual fallback *(2026-06-07)*
+
+**Cleanup — Stale DEPRECATED-Bereinigung:**
+- [x] Stale DEPRECATED-Kommentare entfernt: `i18nBootSync.py` (2x), `workflowTools.py` (5x) — Imports zeigen bereits auf `modules.workflowAutomation.*` *(2026-06-08)*
+- [x] `resource.store.graphicalEditor` → `resource.store.workflowAutomation` in `interfaceBootstrap.py` + `mainSystem.py` *(2026-06-08)*
+- [x] `toolboxRegistry.py`: `featureCode="graphicalEditor"` → `"workflowAutomation"` *(2026-06-08)*
+- [x] `datamodelFeatureGraphicalEditor.py` gelöscht (toter Re-Export-Shim, keine Caller) *(2026-06-08)*
+- [x] `nodeDefinitions/__init__.py`: DEPRECATED-Label durch neutrales Shim-Label ersetzt *(2026-06-08)*
+- [x] `routeWorkflowAutomation.py`: fehlender `DatabaseConnector`-Import ergänzt (Boot-Fix) *(2026-06-08)*
+- [x] `routeWorkflowAutomation.py`: staler Import `modules.workflows.automation2.runEnvelope` → `modules.workflowAutomation.engine.runEnvelope` *(2026-06-08)*
+- [x] `graphicalEditorRunFileLogger.py` → `runFileLogger.py` umbenannt + alle 4 Import-Stellen aktualisiert *(2026-06-08)*
+- [x] `graphicalEditorDatabase` Alias in `interfaceWorkflowAutomation.py` entfernt (kein Caller) *(2026-06-08)*
+- [x] Alle verbliebenen `graphicalEditor`-Kommentare/Docstrings in 7 Backend-Dateien neutralisiert *(2026-06-08)*
+- [x] Demo-Configs: `graphicalEditor` aus Feature-Listen entfernt (`pwgDemo2026.py`, `investorDemo2026.py`) *(2026-06-08)*
+- [x] Frontend: `console.error('[graphicalEditor]` → `'[workflowAutomation]` (6 Stellen), Kommentare aktualisiert *(2026-06-08)*
+- [x] `_FEATURES_WITH_EDITOR`: `'graphicalEditor'` entfernt (WA ist kein Feature; nur `'workspace'` verbleibt) *(2026-06-08)*
+- [x] Test-Dateien: `graphicalEditor` aus Parametrize-Listen und Assertions entfernt *(2026-06-08)*
+- [x] UDB-Surface `'graphEditor'` → `'workflowAutomation'` (UnifiedDataBar.tsx, FilesTab.tsx, Automation2FlowEditor.tsx) *(2026-06-08)*
+- [x] `Automation2FlowEditor.tsx`: 12 stale `instanceId`-Parameter aus API-Calls entfernt (API war bereits migriert) *(2026-06-08)*
+- [x] `FilesTab.tsx`: `importWorkflowFromFile` Signatur korrigiert (stale `instanceId` entfernt) *(2026-06-08)*
+- [x] Log-Prefixe `[automations]` → `[workflowAutomation]` in RunsTab.tsx + WorkflowsTab.tsx *(2026-06-08)*
+- [x] Dead code entfernt: `WorkflowTasksPage.tsx` (942 LOC), `WorkflowTasks.module.css` *(2026-06-08)*
+- [x] UDB generifiziert: `UdbSurface` → `string` (kein hardcoded Feature-Enum mehr); Workflow-Import-Logik aus `FilesTab.tsx` entfernt → Consumer (`Automation2FlowEditor`) uebernimmt via `onFileSelect`; `onWorkflowImportedFromFile` Prop entfernt *(2026-06-08)*
+
**Phase 0 — Scheduler-Boot entkoppeln (risikoarm, zuerst):**
- [x] Scheduler-Start in System-Lifespan (`app.py`, **nach** `setSchedulerMainLoop`/`eventManager.start()`); Poller bleibt **on-demand** (`ensureRunning`), `onStop`-Stop verlagert (Scheduler + Email-Poller in `app.py` Shutdown Schritt 3.5); GE-`onStart`/`onStop` **entfernt** *(2026-06-07)*
- [x] Routen-Registrierung via `loadFeatureMainModules()` weiterhin aktiv (Feature-Mantel noch da)
@@ -226,7 +280,7 @@ api/workflowAutomationApi.ts # /api/workflow-automation/... (ersetzt workfl
- [x] `PauseForHumanTaskError` + `PauseForEmailWaitError` → `datamodels/serviceExceptions.py` (kanonisch); Re-Export-Shim in `automation2/executors/inputExecutor.py`; Caller `methods/methodContext/actions/setContext.py` umgebogen *(2026-06-07)*
- [x] `coerceDocumentDataToBytes` + `_looksLikeAsciiBase64Payload` → `shared/documentUtils.py` (kanonisch); Re-Export-Shim in `automation2/executors/actionNodeExecutor.py`; Caller `methods/methodFile/actions/create.py` umgebogen *(2026-06-07)*
- [x] Guard-Test: `modules.workflows.{methods.methodContext.actions.setContext, methods.methodFile.actions.create}` importierbar **ohne** `modules.workflows.automation2.*` → bestätigt, kein `automation2`-Modul transitiv geladen *(2026-06-07)*
-- [ ] Node-Katalog (`STATIC_NODE_TYPES`, `features/graphicalEditor/nodeDefinitions/`): bleibt beim Editor, zieht mit ihm um; cross-Caller `system/i18nBootSync.py` + `serviceAgent/workflowTools.py` beachten
+- [x] Node-Katalog (`STATIC_NODE_TYPES`, `features/graphicalEditor/nodeDefinitions/`): moved to `workflowAutomation/editor/nodeDefinitions/`; old `__init__.py` converted to re-export shim; cross-Caller `system/i18nBootSync.py` + `serviceAgent/workflowTools.py` work via shim *(2026-06-07)*
**Phase 1 — Mandatsweite API + System-RBAC (parallel zur Bestands-API):**
- [x] `AutoWorkflow.runAsPrincipal` in `datamodels/datamodelWorkflowAutomation.py` ergänzt (Optional[str], nullable, softFk → UserInDB)
@@ -240,7 +294,14 @@ api/workflowAutomationApi.ts # /api/workflow-automation/... (ersetzt workfl
- [x] `/workflow-automation`-Route + `WorkflowAutomationPage.tsx` Hub-Seite mit Tabs (Workflows · Läufe · Tasks), `?tab=`-Deeplinks; Import in `App.tsx`
- [x] Icons in `pageRegistry.tsx` für `page.system.workflowAutomation.*` registriert (FaSitemap, FaProjectDiagram, FaCopy, FaPlay, FaTasks)
- [x] `MandateNavigation.tsx`: `extraStaticBlocks`-Logik — unbekannte statische Blöcke werden als eigene Nav-Sektionen gerendert (nicht mehr in System-Block gemergt)
-- Mandanten-Scope-Selector / Editor-Entkopplung / Keep-Alive: spätere Iteration (Editor braucht instanceId bis Feature-Mantel vollständig entfernt)
+- [x] Kontext-Selector (Alle Mandanten / Mandant X) im Hub — BillingDataView-Pattern; `selectedMandateId` an alle Tabs *(2026-06-08)*
+- [x] Editor-Entkopplung: `mandateId` ist primaerer Kontext; `instanceId` nur noch Access-Gate fuer Workspace-Datasource-APIs *(2026-06-08)*
+- [x] WorkflowsTab/RunsTab: Server-seitige Mandantenfilterung via `mandateId`-Query-Param *(2026-06-08)*
+- [x] TasksTab im Hub verdrahtet (neue API `/api/workflow-automation/tasks`) *(2026-06-08)*
+- [x] WorkflowsTab Edit-Navigation korrigiert: `/workflow-automation?tab=editor&workflowId=...` (statt mandate-scoped Feature-Route) *(2026-06-08)*
+- [x] `_FEATURES_WITH_EDITOR`: `'workflowAutomation'` entfernt (ist kein Feature) *(2026-06-08)*
+- [x] Dead code entfernt: `WorkflowTasksPage.tsx` (942 LOC, instance-scoped legacy), `WorkflowTasks.module.css` *(2026-06-08)*
+- Keep-Alive fuer Editor-Tab: separate Iteration (aktuell wird der gesamte Hub kept-alive)
**Phase 3 — DB & Datenmigration:**
- [x] `AutoWorkflow.featureInstanceId` → `Optional[str]` (default=None, softFk=True); Pydantic-only, **kein DDL** — Spalte bereits DB-nullable
@@ -281,7 +342,7 @@ api/workflowAutomationApi.ts # /api/workflow-automation/... (ersetzt workfl
## Offene Fragen
1. **RBAC-Granularität (grösstenteils entschieden):** Modell = Mandats-Mitgliedschaft + Mandats-Admin + `isPlatformAdmin`; GE-Feature-Rollen (`graphicalEditor-*`) entfallen. Offen nur: brauchen Power-User ohne Admin eine eigene System-Rolle `workflowAutomation-user`, oder genügt Mandats-`user`? (Feature-Instanz-Rollen sind keine Option mehr — `instantiable=False` + `rbac-role-separation.mdc`.)
-2. **API-Pfad:** `/api/workflow-automation/…` neu vs. bestehendes `/api/system/workflow-runs` ausbauen — konsolidieren?
+2. **API-Pfad:** ~~`/api/workflow-automation/…` neu vs. bestehendes `/api/system/workflow-runs` ausbauen — konsolidieren?~~ **Entschieden (2026-06-08):** `/api/workflow-automation/…` ist der kanonische Pfad. `routeWorkflowAutomation.py` registriert alle Endpunkte dort. `/api/system/workflow-runs` bleibt als Legacy-Alias (Dashboard).
3. **Run-as-Principal-Verwaltung:** Ersteller-Identität vs. dedizierter Service-Principal (siehe CustomerCases offene Frage #1).
4. **Alt-URLs:** wie lange Redirects der `{instanceId}`-Pfade halten (Bookmarks/Deeplinks)?
5. **Datei-/Doku-Rename:** dieses Plan-Dokument ggf. auf `…-workflowautomation-system-component.md` umbenennen (aktuell `…-automation-system-component.md`) — Konsistenz vs. Referenz-Churn.
@@ -290,22 +351,22 @@ api/workflowAutomationApi.ts # /api/workflow-automation/... (ersetzt workfl
- Architektur/Entscheid: `c-work/0-ideas/2026-06-CustomerCases-step1-architecture.md` (A0.4), `…-step3-features-plan.md` (A0)
- Prior Art: `c-work/4-done/2026-04-automation-unification.md`, `2026-04-automation-central-admin.md`, `2026-04-generic-graph-editor.md`
-- Code (Backend): `modules/features/graphicalEditor/`, `modules/workflows/{automation2,scheduler}/`, `modules/datamodels/{datamodelPortTypes,datamodelWorkflowAutomation,datamodelNavigation}.py`, `modules/routes/{routeWorkflowDashboard,routeAutomationWorkspace,routeSystem}.py`, `app.py`
+- Code (Backend): `modules/workflowAutomation/{editor,engine,scheduler}/`, `modules/datamodels/{datamodelPortTypes,datamodelWorkflowAutomation,datamodelNavigation}.py`, `modules/routes/{routeWorkflowAutomation,routeWorkflowDashboard,routeAutomationWorkspace,routeSystem}.py`, `app.py`
- Import-/Layer-Stand (Refactoring 2026-06-05/06, inkl. Deferred-Liste für diese Komponente): `local/notes/refernce-analysis/platform-core-import-analyse.md`
- Code (Frontend): `ui-nyla/src/pages/AutomationsDashboardPage.tsx`, `components/Navigation/MandateNavigation.tsx`, `pages/FeatureView.tsx`, `App.tsx`
- RBAC: `b-reference/platform/rbac.md`, `.cursor/rules/rbac-role-separation.mdc`, `.cursor/rules/feature-instance-scoping.mdc`
## Abschluss
-- [ ] `b-reference/`: neue Kanon-Seite «WorkflowAutomation (System-Komponente)»; `graphicalEditor`-Feature-Seite umschreiben
-- [ ] `.cursor/rules/rbac-role-separation.mdc` + `feature-instance-scoping.mdc` aktualisieren (WorkflowAutomation als dokumentierte Ausnahme; stale Globs `gateway/`/`frontend_nyla/` → `platform-core/`/`ui-nyla/` korrigieren)
-- [ ] `TOPICS.md` aktualisieren (WorkflowAutomation = System-Komponente)
-- [ ] **Cross-Import Assessment** (nach Umsetzung): Import-Analyse erneut durchfuehren und pruefen:
- - [ ] `workflows -> features.graphicalEditor` (~40 Imports): Alle via Komponenten-Umzug eliminiert?
- - [ ] `serviceCenter -> features.graphicalEditor` (5x workflowTools): entfaellt?
- - [ ] `interfaces/interfaceDbManagement.py:936` -> `workflowArtifactVisibility`: mit Engine-Umzug erledigt?
- - [ ] Re-Export-Shims (`datamodelFeatureGraphicalEditor.py`, `stateTools.py`): entfernbar?
- - [ ] Verbleibende interne Zyklen in `workflows/` (30 lazy Imports): reduziert nach Restructuring?
- - [ ] Finale Folder-Summary und Import-Zahlen neu generieren
- - [ ] `local/notes/refernce-analysis/platform-core-import-analyse.md` finalisieren
-- [ ] Dieses Dokument → `c-work/2-build/` bei Annahme, dann `4-done/`
+- [x] `b-reference/platform/workflowAutomation.md`: Kanon-Seite aktualisiert (Code-Pfade, API, RBAC, Navigation) *(2026-06-08)*
+- [x] `.cursor/rules/rbac-role-separation.mdc` + `feature-instance-scoping.mdc`: WorkflowAutomation als dokumentierte Ausnahme eingetragen *(2026-06-08)*
+- [x] `topics-todo.md` aktualisiert (WorkflowAutomation = System-Komponente, DONE) *(2026-06-08)*
+- [x] `features/graphicalEditor/` Verzeichnis komplett gelöscht (keine Dateien, keine Caller) *(2026-06-08)*
+- [x] **Cross-Import Assessment**:
+ - [x] `workflows -> features.graphicalEditor` (~40 Imports): eliminiert — alle Imports auf `modules.workflowAutomation.*` *(2026-06-08)*
+ - [x] `serviceCenter -> features.graphicalEditor` (5x workflowTools): eliminiert — kanonische Pfade *(2026-06-08)*
+ - [x] `interfaces/interfaceDbManagement.py:936` -> `workflowArtifactVisibility`: erledigt — `modules.workflowAutomation.engine.workflowArtifactVisibility` *(2026-06-08)*
+ - [x] Re-Export-Shims: `datamodelFeatureGraphicalEditor.py` gelöscht; `stateTools.py` Shim bleibt (7 Caller via `processing/shared/`, nicht Teil dieser Migration) *(2026-06-08)*
+ - [x] Keine `from modules.features.graphicalEditor` oder `from modules.workflows.automation2` Imports mehr im gesamten Codebase (verifiziert via grep) *(2026-06-08)*
+- [ ] Lazy Imports in `workflows/` reduzieren (separates Refactoring-Thema, nicht Teil dieser Migration)
+- [ ] Dieses Dokument → `4-done/` verschieben