Repository navigation
Breaking: effect keys reused with a different payload are rejected
Recording an effect under a key that already exists used to replay the stored result even if the payload was different. So a retry that changed a charge amount but kept the key charge:user silently got the old charge back.
Now that case fails with EffectMismatch in Rust and 409 effect_mismatch over HTTP. Same key with the same payload still replays as before. Results are not compared.
Build keys from whatever identifies the input (e.g. charge:u-77:order-9) and keep values that change on every call, like timestamps or request ids, out of payload.
Changes
forked-core:record_effectchecks the payload of an existing key; newError::EffectMismatch.forked-api: maps it to409 effect_mismatch.@forked-run/client:findEffect(key, { payload })applies the same check on the probe step, before any work runs.@forked-run/mcp:forked_find_effectaccepts an optionalpayload.- Fix:
@forked-run/mcpand@forked-run/langgraph0.1.0 depended on@forked-run/clientthrough a localfile:path that did not resolve from npm. They now depend on^0.2.0.
Packages
- crates.io:
forked-core,forked-api,forked-memory,forked-sqlite,forked-server0.2.0 - npm:
@forked-run/client,@forked-run/mcp,@forked-run/langgraph0.2.0