# `Mutare.RuntimeId`
[🔗](https://github.com/foxbenjaminfox/mutare/blob/v0.2.1/lib/mutare/runtime_id.ex#L1)

The identity embedded in a metamutant, separate from its report number.

Schema builds use `{root_relative_file, local_id}`. The local id reserves every
candidate, including withheld ones, and starts at one in each file. An unrelated
file's candidate count can therefore change report numbers without changing this
file's generated code. Standalone transforms retain their integer identity.

Sites carry both identities. Coverage translates runtime identities through
`index/1`; the source file is already available during poison attribution, which uses `file_index/1`.
Both indexes are built from the current run's sites, never persisted across runs.

# `t`

```elixir
@type t() :: non_neg_integer() | {String.t(), pos_integer()}
```

# `file_index`

```elixir
@spec file_index([Mutare.Site.t()]) :: %{
  required({String.t(), pos_integer()}) =&gt; pos_integer()
}
```

Map each file's emitted integers to report ids for lazy poison attribution.

# `index`

```elixir
@spec index([Mutare.Site.t()]) :: %{required(t()) =&gt; pos_integer()}
```

Map the current run's runtime identities to report ids for coverage decoding.

# `of`

```elixir
@spec of(Mutare.Site.t()) :: t()
```

The runtime selection for a Site, retaining integer selection for standalone transforms.

---

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