CMFEdition overview
Overview of the product and its features
1. Versioning in Plone
Content versioning in Plone, a long awaited feature.
Versioning is about tracking changes over time
Information, in whatever form: documents, spreadsheets, web pages, or source code, changes over time. 
Tracking changes of a document over time is what a versioning system does.
In particular a versioning system records who made a specific change, it allows backing-out undesirable changes, it gives the ability to record why a specific change was made and to know what the document contents were at a specific point in time.
Versioning a content is basically archiving important document versions, to have control on changes over time. Can I modify a content without retracting it, that is edit it while the published version of it stays visible to everyone? No, you can't. This feature, often confused with versioning is more appropriately a staging feature. If you want staging in Plone you have to use a stagin product like PloneMultisite.
Versioning must work with staging, workflow, i18n, ...
Versioning is independent from staging or multisite implementation (PloneMultisite), from versions repository (storage) and from contents implementation; in fact versioning can be added at any time in the system, as contents do not need to be aware that they are versioned.
Versioning must work with multilingual content also: CMFEditions can work with LinguaPlone.
Any content can be versioned: CMF Default, ATContent Types, custom Archetypes based contents. CMFEditions supports the versionining of composite folderish objects and versioning of references.
The save as new version (or save important) creates a new version, but can also trigger things like translation invalidation, events (for example for content subscription), etc.
2. Features
what current versioning system does.

Save as new version
At any time a new version can be created. Every new version is like a snapshot of the content at a given time.
Number of version
The versioning system manages an internal version number (automatically calculated), and an external version number that can be either calculated or manually entered by users.
Date/time stored in version change (timestamp)
Current datetime is stored along with version number and comment to identify the version.
Adding a comment to the saved version
Optionally the user will be able to type into the 'New Version Comment' field a brief note describing the key changes he has made or to describe it.
User information
Versioning keeps track of the user that did the version.
Workflow status information
The history view shows not only the work in
progress but also the major workflow changes, versioning keeps track
of the status of the document at different times. The system
does not automatically saves as a new version the document when it is
published. This is possible writing a simple versioning policy.
Version browsing
It is possible to access and view previous versions of a document from the versioning action of the document. The view call the default view for the content, but it is possible to define custom views that show also comments, or show the metadata, etc.
Rollback to version
It is possible to rollback (revert) to a previous version. Rolling back to a version make the old version the current one. The system can be configured to perform some action both on rollback and on save as new version. For example by default when rolling back the workflow state is set to the current one, overriding the old version one.
Versioned metadata
Metadata are versioned as well. On new version the
metadata is already filled with values of the previous version.
Version and document comments
All comments
to the object are stored in the version (i.e. rollback brings back
also the comments).
Compare version*
It is possible to select two versions of the
document and compare its attributes / metadata.
* requires CMFDiffTool
Folderish objects support
It is possible to save versions of folderish objects; to version a folderish object it must be registered in a config panel; all children objects are recursively versioned togheter with the parent. Rolling back the parent rolls back also the children, no matter if they were changed, deleted, moved...
It is also possible to version the children one by one independently. When parent is versioned every child is saved as a new version (the system does not check if the child had changed since last version, though; this is consistent with the freedom granted to the users to create new versions even if the object has not changed).
References support
References (ATReferences) are supported as well. CMFEditions adresses two main use cases: i) references are stored in versions and restored after a rollback and ii) references are invariant to the version (i.e. not restored after a rollback). Configuration is possible at field level.
Notes
- The system do not provide branching or locking
facilities yet.
- Copying
versioned objects: copying an object with versions copies the object
without the versions informations. The pasted object is a brand new
copy with no versions.
- Delete version and purge options are not yet available, yet planned.
- Reference cascading is not supported.

