# `CodexWrapper.ExecutionObservation`
[🔗](https://github.com/genagent/codex_wrapper_ex/blob/v0.8.1/lib/codex_wrapper/execution_observation.ex#L1)

One correlated terminal fact from an evidenced one-shot execution.

Sent as `{reference, observation}` by the execution caller before returning.
A preceding `SessionObservation` establishes identity only. `:outcome` is the
legacy execution result before JSON/fork convenience projections; `:parsed_result` is the last bounded native
`turn.completed` or `turn.failed` JSON object, independent of process outcome.

`:child_status` and `:child_signal` are raw native reports, never inferred
from JSON, transport closure, or a pre-spawn failure. `:termination` records
protocol/transport termination, while `:reason` records timeout or limit
cancellation. `:cleanup`, `:scope`, and `:guard_close` are separate facts;
missing facts remain `:unknown` (missing child status/signal remains `nil`).
Process-group confirmation does not cover descendants escaping that group.
`:stdout` and `:stderr` are bounded prefixes, including on failure.

# `t`

```elixir
@type t() :: %CodexWrapper.ExecutionObservation{
  child_signal: pos_integer() | nil,
  child_status: non_neg_integer() | nil,
  cleanup: :confirmed | :unconfirmed | :unknown,
  guard_close: term(),
  outcome: term(),
  output_truncated: boolean() | :unknown,
  parsed_result: map() | nil,
  reason: term(),
  scope: :process_group | :active_cgroup | :unknown,
  stderr: binary(),
  stdout: binary(),
  termination: term()
}
```

---

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