Compile Pipeline

On Save or Compile, the editor rebuilds the runtime mirror from the graphs inside one scoped transaction. The UEdGraphs are authoritative; the runtime state on UCrimsonSkillTree is reconstructed from them.

RebuildLogicDataFromGraph

  1. Auto-create RootNode if missing; clear stale AllNodes / parent / child / edge arrays.
  2. Walk every Skill/Bridge/Root Out pin through reroute chains to find terminal targets.
  3. Create a UCrimsonSkillTree_Edge per connection and register parent/child + the edge map.
  4. Copy sub-node payloads into ActivationConditions, OnLevelChangedEvents, NodeCosts; resolve FromParentGuid for edge-scoped sub-nodes onto the matching edge.
  5. Stable-sort children/parents by editor X for deterministic traversal.

RebuildVisualDataFromGraph

  1. Reset NodePresentations, Decorations, and ConnectionPaths.
  2. For each Visual Skill mirror -> add a FCrimsonSkillTree_NodePresentation (Guid, GamePosition, widget override, preview level).
  3. For each Decoration -> add a FCrimsonSkillTree_VisualDecoration.
  4. Build a FCrimsonSkillTree_ConnectionPath per connection: per-connection anchors/material are preserved as authored; interior points are rebuilt from the control-point handles (deterministically re-indexed; tangents read from spawned tangent handles or stored values).
One direction only
There is no RebuildGraphsFromAsset. User actions mutate the graphs directly (the schema creates runtime + graph nodes together), so the graphs never drift from the asset. A repair pass re-spawns spline handles from ConnectionPaths if a path exists without them (e.g. data authored on another machine).