anchor.diff:              let state = this.Publish<EcsRegistrationData, obj> (EcsEvents.Unregistering termName) eventData (state :> obj) :?> 's
               archetype.Unregister archetypeSlot.ArchetypeIndex
               archetypeSlots.Remove entityRef.EntityId |> ignore<bool>
  -            let archetypeId = { Terms = Dictionary<_, _> archetype.Id.Terms }
  +            let archetypeId = ArchetypeId.make (Dictionary<_, _> archetype.Id.Terms)
               archetypeId.Terms.Remove termName |> ignore<bool>
               if archetypeId.Terms.Count > 0 then
                   let archetypeIndex = archetype.Register comps
  
positive.code:             let eventData = { EntityRef = entityRef; ContextName = termName }
              this.Publish<EcsRegistrationData, obj> (EcsEvents.Register termName) eventData (state :> obj) :?> 's
          | (false, _) ->
              let archetypeId = { Terms = Dictionary.singleton HashIdentity.Structural termName term }
              let comps = dictPlus HashIdentity.Structural [] // TODO: use cached empty dictionary.
              match term with Extra (compName, _, comp) -> comps.Add (compName, comp.AlwaysEqualValue) | _ -> ()
              let state =
  
negative.code:             let eventData = { EntityRef = entityRef; ContextName = compName }
              this.Publish<EcsRegistrationData, obj> (EcsEvents.Register compName) eventData (state :> obj) :?> 's
          | (false, _) ->
              let archetypeId = ArchetypeId.make (Dictionary.singleton HashIdentity.Structural ("@" + compName) (Intra (compName, typeof<'c>, { AlwaysEqualValue = null })))
              let comps = Dictionary.singleton HashIdentity.Structural compName (comp :> obj)
              let state =
                  match archetypes.TryGetValue archetypeId with
  