Errors
EFFECT_DUPLICATE_ID
Two custom effect definitions use the same id and version.
What failed
effect() found a different definition object with the same (id, version)
identity.
Why
Effect identity controls receipt and recovery semantics. Allowing two implementations to share it would make recovery ambiguous, so Crux rejects the second definition.
Fix
Define the effect once and import that definition wherever it is used. If the
execution or recovery contract intentionally changed, give the new definition
a new version.
Do not generate effect IDs per call. Use a stable dotted domain name such as
"billing.charge".
See Version recovery contracts for when a contract change needs a new version.