This is a recursive call-- it makes the existing_item and all descendants draft. I believe the try/except needs to be in the lambda so that you continue making draft of the other descendants (for the case where some of them already have draft versions, but not all of them).

I'm slightly uncomfortable with the fact that this might hide bugs where we don't correctly throw away the draft version on publish. We will be moving towards always having drafts with split, but with current mongo, I think it is important to discard the draft after publish. @dmitchell do you think this change is OK to make? It's certainly true multiple users hitting the page at the same time will hit a race condition.