A fork is a deep copy of the live world. The same systems — physics, combat, rules —
run on the fork as on the main world, so a fork evolves exactly as the original would have,
until you intervene on it. That is what makes a fork a genuine counterfactual: any
divergence you observe is caused by your intervention, not by drift.
The pattern is always the same four moves:
Fork
POST /fork deep-clones the main world into a named fork at the current tick.
Intervene
Change the fork — step it further, edit components, apply a scenario — without
touching the main world.
Diff
Compare the fork’s outcome against the original to read off exactly what your
intervention changed.
Drop
DELETE /fork/{id} discards the copy. The main run is untouched throughout.
A what-if run
POST /observe on the main world and GET /fork/{id}/observe return the same shape of
world dump, at different ticks — so the divergence between a fork and its parent is just
a comparison of two tables.
Forks vs. snapshots
The two tools answer different questions:
Counterfactuals as the answer key
Forking is also how Euca answers action-conditioned questions exactly. To compute “what
would the next state be if the agent took action a,” the engine forks the world,
applies a on the copy, and reads the resulting next-step distribution — without
disturbing the real run or consuming the canonical RNG. That operation is the backbone of
world-model evaluation: the exact post-action ground truth a model
is graded against.