# `Nous.Sandbox.Unavailable`
[🔗](https://github.com/nyo16/nous/blob/v0.17.1/lib/nous/sandbox/unavailable.ex#L1)

The fail-closed default provider: it confines nothing and admits it.

`Nous.Sandbox.backend/0` selects this module when the platform chain is empty
(Windows) or when every candidate provider fails to probe clean. Every
`confine/2` call returns `{:error, {:sandbox_unavailable, mode, nil}}`, so a
caller that wanted confinement is forced to refuse the spawn rather than
quietly run the command unfenced. Silent unconfined passthrough is never
legal; `:danger_full_access` is the explicit, auditable way to ask for none.

That includes `:danger_full_access` itself. `Nous.Sandbox.confine/2` short
circuits that mode before any provider is consulted, so a provider seeing it
means a caller bypassed the dispatch — a bug, not a licence to pass argv
through untouched.

# `confine`

```elixir
@spec confine([String.t()], Nous.Sandbox.Policy.t()) :: {:error, Nous.Sandbox.error()}
```

Always refuse: `{:error, {:sandbox_unavailable, policy.mode, nil}}`.

Uniform across all three modes, on purpose. See the moduledoc.

# `probe`

```elixir
@spec probe(pos_integer()) :: {:error, :unusable}
```

Always `{:error, :unusable}` — this provider is a fallback, never the winner
of a probe.

---

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