# `MailglassInbound.InboundRecords.ExecutionRun`
[🔗](https://github.com/szTheory/mailglass/blob/v0.1.0/lib/mailglass_inbound/inbound_records/execution_run.ex#L1)

Append-only execution lineage row shared by fresh ingress and replay.

Execution runs always point back to the immutable canonical inbound record
and stored evidence row they processed.

# `outcome`

```elixir
@type outcome() :: :no_match | :accept | :ignore | :reject | :bounce | :failed
```

# `source`

```elixir
@type source() :: :fresh | :replay
```

# `t`

```elixir
@type t() :: %MailglassInbound.InboundRecords.ExecutionRun{
  __meta__: term(),
  executed_at: DateTime.t() | nil,
  failure: map(),
  id: Ecto.UUID.t() | nil,
  inbound_evidence: term(),
  inbound_evidence_id: Ecto.UUID.t() | nil,
  inbound_record: term(),
  inbound_record_id: Ecto.UUID.t() | nil,
  inserted_at: DateTime.t() | nil,
  mailbox: String.t() | nil,
  metadata: map(),
  outcome: outcome() | nil,
  outcome_reason: String.t() | nil,
  source: source() | nil,
  tenant_id: String.t() | nil,
  updated_at: DateTime.t() | nil
}
```

# `changeset`

```elixir
@spec changeset(map()) :: Ecto.Changeset.t()
```

---

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