Classify the change from which version sides are present.
Reading the case from here keeps consumers (e.g.
format_dependency_changes) from re-deriving it via field truthiness,
and turns the meaningless (None, None) shape into a hard error instead
of silently rendering as a removal.