The op missing is string diff. If a very long string value has changed, no matter how little the change is, you'll have to include the entire string in the patch.
Having implemented a json differ (which is similar, but with different representations of the paths due to having uniform access to nodes in the tree due to having id elements everywhere that matters), I would consider string diffs overengineering.