Over there the protocol simply mandates both backwards and forwards compatibility. But often times the thing to is to reference another lexicon, or to create a sub schema.
So let's say in a lexicon called:
com.example.post
I have an author field, and for that field I want to reference the profile definition in another lexicon called com.example.user, I pop in:
"author": {"type": "ref", "ref": "com.example.user#/defs/profile"}
And that references:
"profile": {
"type": "object",
"properties": {
"handle": {"type": "string"},
"displayName": {"type": "string", "maxLength": 256},
"avatar": {"type": "string", "format": "uri", "nullable": true}
}
Then it's all just lego blocks and you can worry about them block by block.
But even if you have a breaking change and you come up with a new lexicon for it, all the other apps using the old lexicon will continue to use it, it can't be deleted, so you've not broken anything on their end.
