Yeah... I fought with this type for almost a day ;D
But than some weirder things has been discovered.
I have this easy code in TagData plugin:
def Execute(self, tag, doc, op, bt, priority, flags):
op.SetDirty(c4d.DIRTYFLAGS_CHILDREN)
print op.GetDirty(c4d.DIRTYFLAGS_CHILDREN)
It always prints 0, no matter what happens to the children. I also tried other model, DIRTYFLAGS_ALL - there it starts with a small random number and adds 1 every update even if nothing happens. I tried DIRTY_CHILDREN also, the same "0".
Can't get how hierarchy change checking works. And does it?