> For the complete documentation index, see [llms.txt](https://docs.bella.fi/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.bella.fi/guides/advanced-for-a-better-user-experience-as-a-state-machine/forking-and-retracing.md).

# Forking & Retracing

During the lifetime of a program, Tuner will record every step that a `ConfigurableCorePool` went through in memory. With an id of `PoolState`, you can let the pool recover to that state.

```typescript
// current state: foo
let poolStateId: string = configurableCorePool.getPoolState().id;

// some transactions...
// current state: bar

configurableCorePool.recover(poolStateId);
// current state: foo
```

Or just let the pool step back to last state.

```typescript
// current state: foo
let poolStateId: string = configurableCorePool.getPoolState().id;

// one transaction...
// current state: bar

configurableCorePool.stepBack();
// current state: foo
```

Sometime we want multiple instances to try out various of possibilities from current state, it's good time using `fork` to do that.

```typescript
let forkedConfigurableCorePool: ConfigurableCorePool =
  configurableCorePool.fork();

// some transactions with configurableCorePool...

// some transactions with forkedConfigurableCorePool...
```

The forked pool will remain the same state as its parent and the two pools act independently.

Note: `poolState.fromTransition` of a pool built from a `PoolConfig` or recovered from a snapshot will be `undefined` while `poolState.fromTransition` of a forked pool will have a `Record` with `ActionType.FORK` and its parent as source `PoolState`.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.bella.fi/guides/advanced-for-a-better-user-experience-as-a-state-machine/forking-and-retracing.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
