# `CliSubprocessCore.ExecutionSurface`
[🔗](https://github.com/nshkrdotcom/cli_subprocess_core/blob/v0.8.0/lib/cli_subprocess_core/execution_surface.ex#L1)

Backward-compatible execution-surface facade for downstream CLI packages.

`cli_subprocess_core` no longer owns the transport substrate. This module
preserves the historical `CliSubprocessCore.ExecutionSurface` struct while
delegating validation and capability lookup to
`ExecutionPlane.Process.Transport.Surface`.

# `boundary_class`

```elixir
@type boundary_class() :: atom() | String.t() | nil
```

# `contract_version`

```elixir
@type contract_version() :: String.t()
```

# `projected_t`

```elixir
@type projected_t() :: %{
  contract_version: contract_version(),
  surface_kind: surface_kind(),
  transport_options: map(),
  target_id: String.t() | nil,
  lease_ref: String.t() | nil,
  surface_ref: String.t() | nil,
  boundary_class: boundary_class(),
  observability: map()
}
```

# `reserved_key`

```elixir
@type reserved_key() ::
  :contract_version
  | :surface_kind
  | :transport_options
  | :target_id
  | :lease_ref
  | :surface_ref
  | :boundary_class
  | :observability
```

# `resolution_error`

```elixir
@type resolution_error() :: term()
```

# `resolved`

```elixir
@type resolved() :: map()
```

# `surface_kind`

```elixir
@type surface_kind() :: atom()
```

# `t`

```elixir
@type t() :: %CliSubprocessCore.ExecutionSurface{
  boundary_class: boundary_class(),
  contract_version: contract_version(),
  lease_ref: String.t() | nil,
  observability: map(),
  surface_kind: surface_kind(),
  surface_ref: String.t() | nil,
  target_id: String.t() | nil,
  transport_options: keyword()
}
```

# `validation_error`

```elixir
@type validation_error() :: term()
```

# `capabilities`

```elixir
@spec capabilities(t() | struct() | atom() | keyword() | map() | nil) ::
  {:ok, term()} | {:error, term()}
```

# `contract_version`

```elixir
@spec contract_version() :: contract_version()
```

# `default_surface_kind`

```elixir
@spec default_surface_kind() :: surface_kind()
```

# `from_runtime_surface`

```elixir
@spec from_runtime_surface(struct()) :: t()
```

# `new`

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

# `new!`

```elixir
@spec new!(keyword() | map() | t() | struct()) :: t()
```

# `nonlocal_path_surface?`

```elixir
@spec nonlocal_path_surface?(t() | struct() | atom() | keyword() | map() | nil) ::
  boolean()
```

# `normalize_surface_kind`

```elixir
@spec normalize_surface_kind(term()) :: {:ok, surface_kind()} | {:error, term()}
```

# `normalize_transport_options`

```elixir
@spec normalize_transport_options(term()) :: {:ok, keyword()} | {:error, term()}
```

# `path_semantics`

```elixir
@spec path_semantics(t() | struct() | atom() | keyword() | map() | nil) ::
  atom() | nil
```

# `remote_surface?`

```elixir
@spec remote_surface?(t() | struct() | atom() | keyword() | map() | nil) :: boolean()
```

# `remote_surface_kind?`

```elixir
@spec remote_surface_kind?(surface_kind()) :: boolean()
```

# `reserved_keys`

```elixir
@spec reserved_keys() :: [reserved_key(), ...]
```

# `resolve`

```elixir
@spec resolve(keyword()) ::
  {:ok, resolved()} | {:error, validation_error() | resolution_error()}
```

# `supported_surface_kinds`

```elixir
@spec supported_surface_kinds() :: [atom(), ...]
```

# `surface_metadata`

```elixir
@spec surface_metadata(t() | struct()) :: keyword()
```

# `to_map`

```elixir
@spec to_map(t() | struct()) :: projected_t()
```

# `to_runtime_surface`

```elixir
@spec to_runtime_surface(t() | struct()) :: struct()
```

---

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