feat(visual-workflow-editor): apply spec#384
Merged
Merged
Conversation
Implements the drag-and-drop visual editor for workflow templates as defined in openspec/changes/visual-workflow-editor. Frontend-only: the data layer flows through the existing workflow Pinia store (createObjectStore on workflowTemplate), so no PHP / backend changes. What this adds: - @vue-flow/core, @vue-flow/background, @vue-flow/controls dependencies - src/components/workflow/VisualWorkflowEditor.vue — main editor - src/components/workflow/NodePalette.vue — draggable node templates - src/components/workflow/WorkflowCanvas.vue — vue-flow wrapper - src/components/workflow/NodeProperties.vue — selected-node panel - src/components/workflow/EdgeProperties.vue — selected-edge panel - src/components/workflow/validator.js — live graph validator (NO_FINAL_STATUS, UNREACHABLE_FINAL, ORPHAN_NODE, DANGLING_EDGE, DUPLICATE_TRANSITION, MISSING_LABEL, CYCLE_NO_EXIT) - Manifest custom page WorkflowTemplateEditor at /settings/workflow-templates/:id/edit (the ONE acceptable custom page for this spec) - Registration of VisualWorkflowEditor in src/customComponents.js - JSON import/export round-trip through the workflowTemplate schema - openspec/changes/visual-workflow-editor/builds/build.json artifact
Contributor
Quality Report — ConductionNL/procest @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ❌ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ❌ | ||||
| stylelint | ❌ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 419/419 | |||
| PHPUnit | ⏭️ | ||||
| Newman | ⏭️ | ||||
| Playwright | ❌ |
Spec coverage: 3% (21 tests / 673 specs)
Quality workflow — 2026-05-11 11:50 UTC
Download the full PDF report from the workflow artifacts.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Applies
openspec/changes/visual-workflow-editor. Frontend-only — adds a drag-and-drop graph editor for workflow templates, mounted as a single custom manifest page; all persistence flows through the existinguseWorkflowStore(createObjectStore onworkflowTemplate), so no PHP changes.npm install @vue-flow/core@^1 @vue-flow/background @vue-flow/controls --savesrc/components/workflow/:VisualWorkflowEditor.vue(main, registered incustomComponents.js)NodePalette.vue,WorkflowCanvas.vue,NodeProperties.vue,EdgeProperties.vuevalidator.js— live frontend validator (NO_FINAL_STATUS,UNREACHABLE_FINAL,ORPHAN_NODE,DANGLING_EDGE,DUPLICATE_TRANSITION,MISSING_LABEL,CYCLE_NO_EXIT)workflowTemplateshape (steps,transitions,layout).workflowStore.saveTemplate(...)(existing draft path); Publish callsworkflowStore.publishVersion(id)and is gated onhasErrors === false.openspec/changes/visual-workflow-editor/builds/build.json.Out of scope (per spec): guard-expression IDE, routing-rule editor inside nodes (slots in unchanged), backend changes.
Watchdog flags
composer check:strict—php -lnot exercised because no PHP files changed;jqvalidates manifest + build artifact.dagreauto-layout (T09) not added; coordinates fall back to a deterministic left-to-right placement until the layout block is persisted.Test plan
npm run buildsucceeds with vue-flow bundled./settings/workflow-templates/{id}/editfor a draft template — editor mounts.NO_FINAL_STATUSclears.publishVersion.