# `MingaAgent.Tool.Output.Revision`
[🔗](https://github.com/jsmestad/minga/blob/main/lib/minga_agent/tool/output/revision.ex#L1)

Content-based source freshness. A requested range is never a whole-file mutation revision.

# `source_kind`

```elixir
@type source_kind() ::
  :disk | :buffer | :fork | :changeset | :project_view | :query_snapshot
```

# `t`

```elixir
@type t() :: %MingaAgent.Tool.Output.Revision{
  generation: non_neg_integer() | nil,
  scope: MingaAgent.Tool.Output.Range.t(),
  sha256: String.t(),
  source_id: String.t(),
  source_kind: source_kind()
}
```

# `full_source?`

```elixir
@spec full_source?(t()) :: boolean()
```

True only when this revision covers the full source rather than a requested range or query page.

# `new`

```elixir
@spec new(keyword()) :: {:ok, t()} | {:error, :invalid_revision}
```

Builds a revision from the captured content digest and an atomic source generation, when available.

# `token`

```elixir
@spec token(t()) :: String.t()
```

Returns an unambiguous token binding the identity, captured scope, generation, and bytes.

---

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