# `Autonomic.ExecutionDomain`
[🔗](https://github.com/nshkrdotcom/autonomic/blob/v0.1.0-autonomic/lib/autonomic/contracts.ex#L51)

Backend-neutral isolation boundary for an untrusted episode worker.

Implementations MUST treat `epoch` as fencing data and reject lifecycle or exec
operations addressed to a stale domain generation.

# `signal`

```elixir
@type signal() :: :sigterm | :sigkill | :sigint | :sigtstp | :sigcont
```

# `checkpoint`

```elixir
@callback checkpoint(Autonomic.ExecutionDomain.Domain.t()) ::
  {:ok, Autonomic.ExecutionDomain.CheckpointRef.t()} | {:error, term()}
```

# `create`

```elixir
@callback create(Autonomic.ExecutionDomain.Spec.t()) ::
  {:ok, Autonomic.ExecutionDomain.Domain.t()} | {:error, term()}
```

# `destroy`

```elixir
@callback destroy(Autonomic.ExecutionDomain.Domain.t()) :: :ok | {:error, term()}
```

# `exec`

```elixir
@callback exec(
  Autonomic.ExecutionDomain.Domain.t(),
  Autonomic.ExecutionDomain.Command.t()
) ::
  {:ok, Autonomic.ExecutionDomain.Execution.t()} | {:error, term()}
```

# `inspect_domain`

```elixir
@callback inspect_domain(Autonomic.ExecutionDomain.Domain.t()) ::
  {:ok, map()} | {:error, term()}
```

# `restore`

```elixir
@callback restore(Autonomic.ExecutionDomain.CheckpointRef.t()) ::
  {:ok, Autonomic.ExecutionDomain.Domain.t()} | {:error, term()}
```

# `signal`

```elixir
@callback signal(Autonomic.ExecutionDomain.Domain.t(), signal()) :: :ok | {:error, term()}
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
