This problem is related to the fact that Field.setBox now checks equality before setting the dirty flag. There are actually 2 problems with BsonRecordField. The first one is there isn't a proper equals method for BsonRecord. I've fixed this by adding one to Record.
The second problem stems from the fact that Record (and BsonRecord) Fields are mutable. So, when you do:
val str = smt2.struct.is
str.fld0("cat")
You're actually modifying the original value, so when setBox goes to compare them they are the same. To help alleviate this I did 2 things:
* Added a copy method to Record that creates a new Record instance with all fields set to the values in the original instance
* Added forceDirty_? to Field. Setting this to true will force the dirty flag to always be set when calling setBox, the same as the previous behavior.
So, you'll be able to either override forceDirty_? and set it to true, or change the above code to:
val str = smt2.struct.is.copy
str.fld0("cat")
Tim