# `ReqManagedAgents.Evidence.Recorder`
[🔗](https://github.com/cash-mckeeman/req_managed_agents/blob/v0.13.0/req_managed_agents/lib/req_managed_agents/evidence/recorder.ex#L8)

Caller-owned, bounded observations for one provider session, independent of Session lifetime. Stop the recorder
after taking its snapshot. Recording failures never retry provider work.

Admission charges external-term bytes plus record overhead across queued and retained
observations; snapshots additionally enforce the encoded artifact limit. Local monotonic
ticks are nanoseconds in the recorder-scoped clock. Rejected
observations and unfinished invocations produce a partial capture. A barrier timeout
returns available validated records with a gap, rather than a consistent completion claim.

AgentCore observations begin at decoded Converse frames. Original EventStream headers,
byte encoding and malformed frames discarded by the transport decoder are unavailable.

# `t`

```elixir
@type t() :: %ReqManagedAgents.Evidence.Recorder{
  capture_id: String.t(),
  clock_id: String.t(),
  counters: :atomics.atomics_ref(),
  options: ReqManagedAgents.Evidence.Options.t(),
  ordinal: non_neg_integer(),
  started_at: DateTime.t(),
  table: :ets.tid()
}
```

# `child_spec`

Returns a specification to start this module under a supervisor.

See `Supervisor`.

# `context`

```elixir
@spec context(pid() | nil, :managed | :agentcore, String.t() | nil) :: :ok
```

Sets provider identity before observations; a missing session may be filled after open.

# `emit`

```elixir
@spec emit(
  pid() | nil,
  ReqManagedAgents.Evidence.LocalRecord.t()
  | ReqManagedAgents.Evidence.Record.t()
) :: :ok
```

Admits an observation without waiting; rejected observations increment the gap count.

# `snapshot`

```elixir
@spec snapshot(pid()) ::
  {:ok, ReqManagedAgents.Evidence.Capture.t()}
  | {:error, ReqManagedAgents.Evidence.Error.t()}
```

Returns bounded evidence, or a safe unavailable error when the recorder cannot be read.

# `start_link`

```elixir
@spec start_link(ReqManagedAgents.Evidence.Options.t()) :: GenServer.on_start()
```

Starts a recorder linked to its caller, using validated capture options.

---

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