I actually think the problem you are facing is this, hashes are used internally by Speckle to identify the uniqueness of objects but not when receiving updates in Revit.
Let me explain how updates currently work in Revit - then I’ll add this in the docs as it’s quite an important topic ;):
- BuiltElements have a property called
applicationId, this is different from the hash, and represents the
id of such element in the host application in which it was first created. If the element was created in Revit it’s the
UniqueId, if coming from Grasshopper/Rhino an analogous field
- when a stream is received in Revit the
applicationIds of all BuiltElements created are cached in the receiver
- when receiving a second time from the same stream, if the received elements have the same
applicationId of something that was previously received (and it still exists in the document), the connector will attempt to modify them instead of creating new ones. If the update fails (or is not permitted by the API), it’ll delete them and create new ones.
- if an element being received doesn’t have an
applicationId (eg it was created in python) no update mechanism will happen
In your specific case, as the issue above explains, since the elements weren’t previously received and cached, then the connector won’t update them.
But we’re planning to change this, so that the connector checks all the elements in the document (and not just cached ones) when something is received.
Hope it makes sense!