When a A exchanges with B, the difference of their supported sidedata categories
is made, and the responsibility is always with the client to generated it:
- If A pushes to B and B requires category foo that A does not have, A will need to generate it when sending it to B.
- If A pulls from B and A needs category foo, it will generate foo before the end of the transaction.
- Any category that is not required is removed. If peers are not compatible, abort.
It is forbidden to rewrite sidedata for a rev that already has sidedata, since
that would introduce unreachable (garbage) data in the data file, something
we're not prepared for yet.