In HCL VersionVault Express, UCM (Unified Change Management) is a structured development process that eliminates the need to deal with individual branches and versions within a source repository. Streams are one of the abstractions that make this possible.
A UCM stream manages a branch of the versioned data. The top-level stream of the project is the integration stream. This stream comes into existence as part of project creation and will primarily be managed by an account in the Builder role. Developers don’t usually check in changes directly to this stream—they normally use developer streams as a place to make their changes and verify them. A view is the VersionVault object that provides filesystem access to the versions selected by the stream. For users who are familiar with git, a view/stream combination is equivalent to a feature branch.
Each developer gets a developer stream when they join the project. Their stream is a child of the integration stream. They can deliver changes from their development stream to the integration stream, making the changes available to other developers, and rebase their stream, to sync up their stream to incorporate the latest changes from other developers’ deliveries.
Additional developer streams can also be created manually after joining a project. These streams can also be children (substreams) of the integration stream, or they can be children of existing development streams. The creation of multi-level hierarchies allows a developer to do more isolated feature work if they wish to restrict the degree to which they sync up with work from other developers. Team members with any role may create streams.
A baseline of a stream specifies a version for each element visible to the stream. The baseline provides a way to reference a set of versions in the project at a specific point in the development lifecycle. It can be used to update a substream via a rebase operation as well as to build a project with a set of known versions. A baseline which has been recommended is provided as the default choice for developers who wish to rebase their substreams. Only team members who have the “Builder” role may create and recommend baselines.
When a developer wishes to update their development stream to pick up new changes from a parent stream (“merging main branch to dev” for git users), they perform a rebase operation. When a rebase is performed, the developer is asked to select a baseline from the parent stream to use as the source of changes. The operation will update the versions visible in the target view/stream, merging source changes when necessary. Only team members who have the “Developer” role may rebase.
Completed work in a developer’s stream may be pushed to a parent stream (“merge dev branch to main”) via a deliver operation. When a deliver is performed, the developer chooses one or more activities from their stream to be merged to the parent stream. Only team members who have the “Developer” role may deliver.


