Repository navigation
Releases: clibequilibrium/forked
Release list
forked 0.2.0
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
forked 0.1.0
First public release.
Git for agent state: fork, rewind and replay structured AI agent state, with a side-effect log that keeps emails, payments and API calls effectively-once across retries and rewinds.
Crates (crates.io): forked-core, forked-api, forked-memory, forked-sqlite, forked-server
npm: @forked-run/client, @forked-run/langgraph (LangGraph checkpointer), @forked-run/mcp (MCP server)
A fork is one ref write: 1,000 branches in about 1.4 ms in memory, zero bytes of state copied. Reproduce with: cargo run --release -p forked-sqlite --example bench
Self-host: cargo install forked-server, or the Dockerfile in forked-server/
Managed: https://forked.run
Docs: docs/API.md and docs/FORMAT.md