I know you said you didn't like the idea of hashes, so this might be a non-starter for your use case.
But it sounds like a V5 Guid [0] might meet some of the needs for your "operation Ids".
The existing "random agent id", and "sequence number" could be used as part of the namespace / salt.
I don’t have a problem with hashes generally. Correct me if I’m wrong, but this scheme sounds like hashing with extra steps?
I agree this could be done. But diamond types (my library) considers every keystroke to be a new change. If we store a UUID for every keystroke, that’s very inefficient.
But it sounds like a V5 Guid [0] might meet some of the needs for your "operation Ids". The existing "random agent id", and "sequence number" could be used as part of the namespace / salt.
[0] https://www.sohamkamani.com/uuid-versions-explained/#v5-non-...