There's one concern about explicit branches that I've had for a few years now: do we need to store branch name in the document history?
Some examples
Branches in Git are refs – i.e. pointers to a commit. Normally when you merge a branch into your main branch, the branch name is not preserved in the history (unless you choose to keep the ref laying around, polluting your git branch output). Branch name is especially lost if you choose to fast-forward the merge (when possible) instead of creating merge commits.
In Fossil though, branches are explicit, and preserved in the repository. Fossil has the explicit idea of a closed/merged branch so old branches can be aggregated away from alive branches. In Fossil, every check-in (or commit) can explicitly be attached to a branch.
On the other hand there're systems like Pijul and Darcs, which are a bit closer to our model than Git and Fossil, because they are patch-based, and they define the state of the repository as a set of patches, similar to how we define the state of an entity as a set of changes.
In Darcs and Pijul branches are even more ephemeral than in Git. Granted, Darcs doesn't even have branches, and asks you to create a separate working tree backed by the same blob storage (Horacio would like it :)).
In Pijul branches are called channels, and it's just a name and the set of changes. Of course all changes must come with their dependencies fullfilled.
So in Darcs and Pijul branches are not really part of the repository storage, and are not very much part of the "permanent" data of the repository.
In conclusion, it seems like we'd like to be able to support both workflows. But I'm not sure how yet. Some of the rabbit holes include branch name collisions and stuff like that. A lot to figure out still.