Johannes Schindelin [off-list ref] writes:
I half-agree, the code should decide which fanout scheme to use, but
_only_ when producing new notes.
I imagine that it could merge the existing notes, and try to make sure
that there are no more blobs in a given subtree than a certain threshold;
if that threshold is reached, it could fan-out using 2-digit subtrees,
merging what needs merging (by concatenation) along the way.
The natural precedence of shallower paths/longer basenames should cope
well with that (i.e. prefer to show abcd/... over ab/cd/...).
Oh, if the plan for merging the trees is such that it takes care of
"multiple notes pointing at the same commit" issues like you outline, then
I can see it would work nicely.
At that point, fan-out would become merely an implementation detail,
something the end user never needs to worry about, just like what base
object is chosen to represent another object in a packfile.