I don't think so. since the item move down the list, the items between it's current position and the target move up one, so the target position has to move up in the list as well if you want to keep the behaviour consistent.

So I guess the question is: what should insert_at do. Ensure the value of position? Or ensure the resulting list order is consistent?