anchor.diff:  
   /// Tracks changes in a hierarchical system.
   type HierarchyChange =
  -    | HierarchyAdd of Guid * Guid
  -    | HierarchyRemove of Guid * Guid
  +    | NodeAdded of Guid * Guid option
  +    | NodeRemoved of Guid // TODO: try to figure out how to add parentId option here.
  +    | ComponentAddedToNode of Guid * Guid
  +    | ComponentRemovedFromNode of Guid * Guid
   
   /// An Ecs system that stores components in a tree hierarchy.
   type SystemHierarchical<'c, 'w when 'c : struct and 'c :> 'c Component> (buffered, isolated, ecs : 'w Ecs) =
  
positive.code:             | None ->
                  systemTree |> ListTree.tryAdd tautology system
          if Option.isSome addedOpt then
              systemDict.Add (nodeId, system)
              Some nodeId
          else None
  
      member this.RemoveNode nodeId =
          let nodeIdStr = string nodeId
          systemTree |>
          ListTree.findAll (fun system -> system.Name = nodeIdStr) |>
          Seq.iter (fun system ->
              system.GetEntitiesCorrelated () |>
              Seq.map (fun correlated -> changes.Add (HierarchyRemove (nodeId, correlated)); correlated) |>
              Seq.iter (fun correlated -> system.UnregisterCorrelated correlated |> ignore<bool>))
          systemDict.Remove nodeId
  
      member this.QualifyHierarchical nodeId entityId =
          match systemDict.TryGetValue nodeId with
  
negative.code: 
      let systemTree = ListTree.makeEmpty<SystemCorrelated<'c, 'w>> ()
      let systemDict = dictPlus<Guid, SystemCorrelated<'c, 'w>> HashIdentity.Structural []
      let mutable hierarchyChanges = List<HierarchyChange> ()
  
      new (ecs) = SystemHierarchical (false, false, ecs)
  
      member this.Hierarchy with get () =
          systemTree |> ListTree.map (fun system -> system.Correlateds)
  
      member this.WithHierarchyBuffered fn worldOpt =
          systemTree |> ListTree.map (fun system -> system.WithCorrelatedsBuffered fn worldOpt)
  
      member this.PopHierarchyChanges () =
          let popped = hierarchyChanges
          hierarchyChanges <- List<HierarchyChange> ()
          popped
  
      member this.IndexNode nodeId =
  