Hi,
I'm working on the same team as Fredrik, and we've had some discussions regarding the implementation of this functionality.
Just to give you guys a heads up, our proposed solution is as follows:
Each row in the page table is associated with a version of the page. An editor always works with the lastest version (the draft), meanwhile the second lastest version is the published version. When an editor presses the "publish" button, the draft version is copied into a new version. This will implicitly make the "old draft" the published version and the newly created version to the new draft. Initially when a page is created it'll have version 1, which would correspond to the draft since this is the lastest available version of that page. A published version for that page would at first not exist, but it would be created as soon as an editor choose to publish the page. The uniqueness of a page would be identified by its URL, language and version. All page properties (such as name, title, visible in navigation, etc.) would be the same for each and every version of the page.
The reason of storing all old versions is to make it possible for a future implementation of side-by-side comparison. For example, it would be nice to be able to see how a page has envolved over time. The reason we didn't go with the proposed solution with a separate page tree is that we came to the conclusion that the data model with this approach is simpler. We don't have to worry about syncing the two page trees for example if a page is moved. The data model is more simple to understand too, when each page having one or more versions, instead of the drafts being in a separate tree which still requires some association between the pages.
What do you think about this approach, can you see any obvious problems? Would you guys be interested of accepting a pull request if we would implement it this way?
/Jesper