The Two-Graph Editor

One UCrimsonSkillTree asset, two independent UEdGraphs (editor-only). The Logic Graph is the source of truth for gameplay; the Visual Graph is the source of truth for player-facing layout. They share one Details panel and one Validation panel.

ModeOwnsHas wires?
LogicSkills, dependencies, sub-nodes (conditions/events/costs)Yes - parent->child
VisualLayout, per-node widget overrides, decorations, spline control pointsNo - layout-only

Mirror-on-create

The Visual graph mirrors Logic Skills 1:1 by FGuid. The mapping is one-directional after creation:

EventEffect
Add Logic SkillA Visual mirror auto-spawns at the same position
Move Logic SkillMirror does not move (use Reset Visual Layout from Logic to re-snap)
Move Visual SkillLogic position is unaffected - layout is independent
Delete Logic SkillMirror is cascade-deleted
Live preview is safe
Each Visual mirror renders a real instance of your node widget class, driven through the exact same InitializeSkillNode entry point the game uses - so the preview is WYSIWYG by construction, not by a separate preview code path. The node it is given is a throwaway duplicate stamped with the preview level, so opening a preview never mutates or dirties the asset.

Toolbar commands

CommandWhat it does
Save (Ctrl+S)Run the compile pipeline, then write to disk
CompileRun the compile pipeline + auto-run validators (no disk write)
Validate GraphRun all 9 validators; results in the Validation panel
Zoom to FitFrame every node in the active graph
Reset Visual Layout from LogicOne-shot copy of logic positions into matching visual mirrors