oh I found the issue I think and in the hindsight what I did was pretty dumb.
simplified:
for n in %markers.get_children():
%markers.remove_child(n)
for k in key.keys():
%markers.add_child(n)
called EVERY FRAME
to be honest I thought remove child is the same thing as queue_free() but I guess its not.. and because it doesn't actually delete the object and I add new objects every frame Godot explodes... whoops