fix: properly handle removed items in diff