There should be a version behaviour, allowing to make dml objects versioned. Things to consider:
Behaviour logic should be same as for transaction, with full object and sublet versioning, recursive etc.
A version should be able to consists of changes to multiple objects
If a new version contains objects that were in a version before, this new version becomes the parent or the former version
a version can have a single parent only, but multiple children
Versions should form non cyclic graphs, any cycle is an error
There should be a version behaviour, allowing to make dml objects versioned. Things to consider: