The result of Nous.Sandbox.confine/2: an argv to spawn plus the data needed
to interpret what comes back.
Enforcement is data, not behaviour. A provider states which mechanism it
wrapped the argv with and which output patterns mean "denied" or "the runner
broke"; Nous.Sandbox.classify/3 is a pure function over that data. This is
what keeps a cross-backend signature from matching: a bwrap-confined command
carries only bwrap's signatures, so Seatbelt's "operation not permitted"
never applies to it.
Summary
Types
The mechanism that wrapped the argv. :none means the argv was passed
through unconfined (:danger_full_access only).
Types
@type enforcement() :: :sandbox_exec | :bwrap | :none
The mechanism that wrapped the argv. :none means the argv was passed
through unconfined (:danger_full_access only).
@type t() :: %Nous.Sandbox.Confined{ argv: [String.t()], denial_signatures: [String.t()], enforcement: enforcement(), mode: Nous.Sandbox.Policy.mode(), runner_failure_rules: [Nous.Sandbox.RunnerFailureRule.t()] }