# `Snodo.Protocol.Profile`
[🔗](https://github.com/joshrotenberg/snodo/blob/v0.2.0/lib/snodo/protocol/profile.ex#L122)

Immutable, exact-revision protocol facts used by admission and support reports.

A profile catalogs one pinned revision and distinguishes implemented rules
from known-but-unsupported rules. Admission executes only the implemented
subset; catalog completeness is not a claim of full conformance.

# `batching`

```elixir
@type batching() :: :allowed | :forbidden
```

# `metadata_policy`

```elixir
@type metadata_policy() :: %{
  request: :required | :optional,
  notification: :required | :optional
}
```

# `scope`

```elixir
@type scope() :: :complete | :implemented_slice
```

# `status`

```elixir
@type status() :: :released | :experimental | :deprecated
```

# `t`

```elixir
@type t() :: %Snodo.Protocol.Profile{
  batching: batching(),
  capabilities: [String.t()],
  era: :session | :stateless,
  limitations: %{optional(atom()) =&gt; atom() | String.t()},
  methods: [Snodo.Protocol.Profile.Method.t()],
  request_metadata: metadata_policy(),
  scope: scope(),
  specification: String.t(),
  status: status(),
  transports: %{optional(atom()) =&gt; transport_status()},
  version: String.t()
}
```

# `transport_status`

```elixir
@type transport_status() :: :tested | :implemented | :unsupported | :unmeasured
```

---

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