We do a lot of defensive copying of linear model data, and have had difficult bugs in the past due to people modifying passed-by-reference objects. Using something like Facebook's immutable-js https://github.com/salier/immutable-js might protect us against some of these issues.
Cons: Would probably require a lot of additional code, replacing our neat plain object/array APIs with method calls. May also be a performance hit doing method calls instead of simple property accesses.
Thoughts?
Some different language for context
Changes can be made to the document without the software knowing these changes were made. This could lead to the software being out of sync with itself. Example: someone could make a change to the document without them being able to undo or redo that change because no record exists of that change being made.