# `Forcola.Duplex.Terminal`
[🔗](https://github.com/joshrotenberg/forcola/blob/v0.4.0/lib/forcola/duplex.ex#L112)

Immutable evidence from a duplex session's terminal path.

`:status` is the native child exit code or signal, even when cleanup was
unconfirmed. It is `nil` if no EXIT frame arrived. `:confirmation` is one
of `:confirmed`, `:unconfirmed`, `:timeout`, `:transport_lost`, or
`:not_started`. `:scope` is `:process_group`, `:active_cgroup`, or
`:unknown`; it describes the mechanism the shim reported, not proof that
an escaped descendant outside that mechanism was confined.
`:output` is `:complete`, `:truncated`, `:unknown`, or a typed limit tuple
such as `{:limit, :line, :stdout, 65536}`. Cleanup confirmation and output
completeness are independent observations.

# `t`

```elixir
@type t() :: %Forcola.Duplex.Terminal{
  cause:
    :child_exit
    | :timeout
    | :explicit_close
    | :owner_death
    | :shim_lost
    | :session_lost
    | :output_limit
    | :spawn_error,
  confirmation:
    :confirmed | :unconfirmed | :timeout | :transport_lost | :not_started,
  output:
    :complete
    | :truncated
    | :unknown
    | {:limit, :line | :total, atom(), pos_integer()},
  scope: :process_group | :active_cgroup | :unknown,
  status: non_neg_integer() | {:signal, non_neg_integer()} | nil
}
```

---

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