| Core — type compatibility |
✅ |
|
|
|
| Core — workflow serialization (data class) |
✅ |
|
|
|
| Core — workflow JSON round-trip |
✅ |
|
|
|
| Core — WorkflowValue flattening |
✅ |
|
|
|
| Core — validator: missing required inputs |
✅ |
|
|
|
| Core — validator: type-incompatible connections |
✅ |
|
|
|
| Core — downstream node propagation |
✅ |
|
|
|
| Core — execution topological order |
✅ |
|
|
|
| Editor — panel registry stores panels |
✅ |
|
|
|
| Editor — plugin registers panel |
✅ |
|
|
|
| Editor — state tracks outputs & downstream impact |
✅ |
|
|
|
| Editor — state tracks node positions + fallback layout |
✅ |
|
|
|
| Editor — draft connection → workflow connection |
✅ |
|
|
|
| Editor — execution result applied to state |
✅ |
|
|
|
| Editor — delete selected connection |
✅ |
|
|
|
| Editor — reconnect connection replaces target |
✅ |
|
|
|
| Editor — reconnect no-op when none selected |
✅ |
|
|
|
| Editor — begin connection from input port sets isFromInput |
✅ |
|
|
|
| Editor — complete from-input connection swaps endpoint order |
✅ |
|
|
|
| Editor — cancel draft clears connectionDraft |
✅ |
|
|
|
| Editor — delete key deletes selected node |
✅ |
|
|
|
| Editor — delete key deletes selected connection |
✅ |
|
|
|
| Editor — ShowNodePicker stores picker state with draft intact |
✅ |
|
|
|
| Editor — DismissNodePicker clears draft and picker state |
✅ |
|
|
|
| Editor — AddNodeAndConnect adds node and creates connection |
✅ |
|
|
|
| Canvas — clicking empty canvas while draft shows node picker |
|
✅ |
|
|
| Canvas — picking from node picker adds node and connects |
|
✅ |
|
|
| Viewport — panBy moves offset |
✅ |
|
|
|
| Viewport — zoomAt keeps focus stable |
✅ |
|
|
|
| Viewport — minimap layout + viewport rect bounded |
✅ |
|
|
|
| Viewport — minimap point recenters viewport |
✅ |
|
|
|
| Viewport — hit test detects node bounds |
✅ |
|
|
|
| Viewport — drag delta normalized by scale |
✅ |
|
|
|
| Viewport — repeated small drags accumulate without drift |
✅ |
|
|
|
| Viewport — world bounds stable on intra-frame node move |
✅ |
|
|
|
| Viewport — world bounds use configured canvas frame |
✅ |
|
|
|
| Viewport — transform clamped to canvas frame |
✅ |
|
|
|
| Viewport — node positions clamped to canvas frame |
✅ |
|
|
|
| Shell — zoom-in button updates viewport scale |
|
✅ |
✅ |
|
| Shell — registered panel renders for selected node |
|
✅ |
✅ |
|
| Shell — minimap viewport border visible (pixel assert) |
|
✅ |
✅ |
🖼 |
| Canvas — dragging node does not pan viewport |
|
✅ |
|
|
| Canvas — output port dot visible for node with spec |
|
✅ |
|
|
| Canvas — input port dot visible for node with spec |
|
✅ |
|
|
| Canvas — clicking output port starts connection draft |
|
✅ |
|
|
| Canvas — connection midpoint dot visible when connection exists |
|
✅ |
|
|
| Canvas — clicking midpoint dot selects connection |
|
✅ |
|
|
| Canvas — empty nodes hint visible when workflow has no nodes |
|
✅ |
|
|
| Canvas — reconnect via midpoint → input port click |
|
✅ |
|
|
| Canvas — node card renders (screenshot baseline) |
|
|
|
🖼 |
| Canvas — port dots + connection midpoint (screenshot baseline) |
|
|
|
🖼 |
| Canvas — full demo app renders (screenshot baseline) |
|
|
|
🖼 |
| Plugin — SampleLogger installs and executes |
✅ |
|
|
|
| Plugin — SampleLoggerUI registers panel |
✅ |
|
|
|
| Demo — media workflow template wiring |
✅ |
|
|
|
| Demo — media workflow execution (fake executors) |
✅ |
|
|
|