Are YJS observers meant to be idempotent?

I know doc updates are idempotent, does that mean we should design our observers to be idempotent as well? I am using observers to sync doc state to a different system, and sometimes I notice duplicate updates.

Document updates (i.e. CRDT updates) are idempotent - meaning that Yjs doesn’t apply the same change twice. It can do that because all changes are uniquely addressed. I can simply filter out known changes.

I’m not sure how observers can be idempotent. Observers describe changes, you can’t really apply observer events. However, if you apply the described changes twice (e.g. insert “X” at position Y), you most definitely will duplicate content.