# ExSandbox v1.0.0 - Table of Contents

> Isolated execution sandboxes: a composition and evidence layer over operating-system containment facilities, which refuses to run rather than confine partially.

## Pages

- [ExSandbox](readme.md)
- [Changelog](changelog.md)
- [Requirement IDs](requirement-ids.md)
- [The public interface of ex_sandbox](boundary.md)

## Modules

- [ExSandbox.Mechanism.Beam.Exec](ExSandbox.Mechanism.Beam.Exec.md): Builds the expression that runs one command **inside** a BEAM sandbox, and
decodes what comes back (008 T002, T003).
- [ExSandbox.Mechanism.Beam.NodeLauncher](ExSandbox.Mechanism.Beam.NodeLauncher.md): Starts, probes, and terminates one hardened sandbox node (005 T020-T026).
- [ExSandbox.Proxy](ExSandbox.Proxy.md): Forwards a request to a running sandbox's address (012 T041, contracts/boundary.md).
- [ExSandbox.Telemetry](ExSandbox.Telemetry.md): Events both libraries emit, carrying the opaque `owner_ref` (012 T043).

- Interface
  - [ExSandbox](ExSandbox.md): Isolated execution sandboxes, as a library with no host-application concepts.
  - [ExSandbox.Capability](ExSandbox.Capability.md): What this library needs from its host, and whether it is actually there
(012 T013, T022, FR-016).
  - [ExSandbox.Mechanism](ExSandbox.Mechanism.md): The behaviour every isolation mechanism implements (012 T019, T020).
  - [ExSandbox.Sandbox](ExSandbox.Sandbox.md): The struct every `ExSandbox.Mechanism` callback receives (012 T012).

- Mechanisms
  - [ExSandbox.Mechanism.Beam](ExSandbox.Mechanism.Beam.md): Runs a tenant's Elixir application on its own hardened OS-level BEAM node
(005 T027).
  - [ExSandbox.Mechanism.Docker](ExSandbox.Mechanism.Docker.md): A sandbox is one container, managed through the `docker` CLI.

- Conformance
  - [ExSandbox.Conformance](ExSandbox.Conformance.md): The conformance suite every mechanism is held to (012 T030–T035, FR-010).
  - [ExSandbox.Conformance.CapabilityUnavailable](ExSandbox.Conformance.CapabilityUnavailable.md): The suite's third outcome (012 T034).
  - [ExSandbox.Conformance.Census](ExSandbox.Conformance.Census.md): Separates the suite's third outcome from failure **in the exit status**
(`012-FR-016a`).
  - [ExSandbox.Conformance.Credentials](ExSandbox.Conformance.Credentials.md): Conformance group: a sandbox's credential reaches its own store and nothing
else (003 T030–T033, `FR-018` – `FR-021`, quickstart Scenario 4).
  - [ExSandbox.Conformance.Credentials.Probe](ExSandbox.Conformance.Credentials.Probe.md): What a host supplies so the credentials group can attempt real connections.
  - [ExSandbox.Conformance.Execution](ExSandbox.Conformance.Execution.md): Conformance group: running a command inside a sandbox (008 T005).
  - [ExSandbox.Conformance.Group](ExSandbox.Conformance.Group.md): Emits one conformance check as an ExUnit test (012 T034).
  - [ExSandbox.Conformance.Helpers](ExSandbox.Conformance.Helpers.md): The shared vocabulary of the conformance suite (012 T033, T034, T034b).
  - [ExSandbox.Conformance.Isolation](ExSandbox.Conformance.Isolation.md): Conformance group: isolation (012 T031; `003` quickstart Scenario 1).
  - [ExSandbox.Conformance.Lifecycle](ExSandbox.Conformance.Lifecycle.md): Conformance group: the sandbox lifecycle (012 T032; `003-FR-010`, `003-FR-013`).
  - [ExSandbox.Conformance.Network](ExSandbox.Conformance.Network.md): Conformance group: network confinement (005 T060b, T060d; `003-FR-002`,
`005-FR-003`, `005-FR-011a`–`FR-011d`).
  - [ExSandbox.Conformance.Reachability](ExSandbox.Conformance.Reachability.md): Conformance group: the states a request to a sandbox can land in
(003 T021, `FR-022` – `FR-024`, quickstart Scenario 5).
  - [ExSandbox.Conformance.Reconciliation](ExSandbox.Conformance.Reconciliation.md): Conformance group: what a mechanism must provide for reconciliation to be
possible at all (003 T022, `FR-015`, `SC-008`, quickstart Scenario 6).
  - [ExSandbox.Conformance.ResourceLimits](ExSandbox.Conformance.ResourceLimits.md): Conformance group: resource limits (012 T034a, T034b; `FR-012a`, `SC-008`).

- Hardening
  - [ExSandbox.Hardening](ExSandbox.Hardening.md): The OS-level enforcement seam (012 T021, from `005`'s `contracts/hardening.md`).
  - [ExSandbox.Hardening.Confinement](ExSandbox.Hardening.Confinement.md): Confines a **control-plane** process to one filesystem path (015 T107, from
research R16 and R30).
  - [ExSandbox.Hardening.Darwin](ExSandbox.Hardening.Darwin.md): OS-level confinement for the BEAM mechanism on macOS (014 T011 – T015, from
`005` R9b and `014`'s re-measurement at
`docs/legacy/specify/014-desktop-deployment/spikes/darwin-hardening/baseline.md`).
  - [ExSandbox.Hardening.Linux](ExSandbox.Hardening.Linux.md): OS-level confinement for the BEAM mechanism on Linux (005 T004 – T012,
contracts/hardening.md, research R2, R3, R9).

- Egress
  - [ExSandbox.Egress.Acceptor](ExSandbox.Egress.Acceptor.md): The listener that lives inside one sandbox's network namespace
(005 T060a1/T060a3, `contracts/egress.md`).
  - [ExSandbox.Egress.Allocator](ExSandbox.Egress.Allocator.md): Hands out the `/30` a sandbox's netns is built on, and takes it back only
when the sandbox's policy is gone (005 T060a3, `contracts/egress.md`).
  - [ExSandbox.Egress.Allowlist](ExSandbox.Egress.Allowlist.md): Turns a tenant project's configured destinations into the form
`ExSandbox.Egress.Policy` enforces (005 T060a2, `013-FR-014b`).
  - [ExSandbox.Egress.Binding](ExSandbox.Egress.Binding.md): Ties one sandbox's resolved allowlist to the `/30` its traffic arrives from,
and takes both back together (005 T060a2/T060a6, `005-FR-011a`–`FR-011e`).
  - [ExSandbox.Egress.ByteProbe](ExSandbox.Egress.ByteProbe.md): The `029-FR-016` instrument: **did any bytes cross?**
  - [ExSandbox.Egress.HostAliases](ExSandbox.Egress.HostAliases.md): Every address that **is this host**, as this host currently reports itself
(029 T014's supply half, `029-FR-015`, D103).
  - [ExSandbox.Egress.LaunchPlan](ExSandbox.Egress.LaunchPlan.md): The ordered steps that put a tenant process inside a policed namespace
(005 T060a3, `contracts/egress.md` §Lifecycle).
  - [ExSandbox.Egress.Netns](ExSandbox.Egress.Netns.md): The commands that turn a sandbox's network namespace into its only path out
(005 T060a3, `contracts/egress.md`).
  - [ExSandbox.Egress.OriginalDst](ExSandbox.Egress.OriginalDst.md): Recovers the destination a sandbox's connection was *originally* aimed at,
before the netns redirect sent it to the pool (005 T060a3,
`contracts/egress.md`).
  - [ExSandbox.Egress.Pasta](ExSandbox.Egress.Pasta.md): Finds the process that actually holds a sandbox's network namespace
(005 T060a3, `contracts/egress.md`).
  - [ExSandbox.Egress.Policy](ExSandbox.Egress.Policy.md): Which destinations one sandbox may reach, and how that sandbox is identified
(005 T060a1/T060a2, `contracts/egress.md`, `005-FR-011a`–`FR-011e`).
  - [ExSandbox.Egress.Pool](ExSandbox.Egress.Pool.md): One acceptor pool for every sandbox, enforcing each one's allowlist
(005 T060a1/T060a3, `contracts/egress.md`).
  - [ExSandbox.Egress.Registry](ExSandbox.Egress.Registry.md): Holds each running sandbox's egress policy, keyed by its source /30
(005 T060a1/T060a6, `005-FR-011a`–`FR-011e`).
  - [ExSandbox.Egress.Relay](ExSandbox.Egress.Relay.md): Forwards a **permitted** connection to its destination (005 T060a9,
`contracts/egress.md`).
  - [ExSandbox.Egress.Resolver](ExSandbox.Egress.Resolver.md): The platform's DNS service for sandboxes (029 T015, `029-FR-013`,
`029-FR-012`, `029-FR-015`).
  - [ExSandbox.Egress.Verdict](ExSandbox.Egress.Verdict.md): Answers "may this sandbox reach this destination?" for the per-namespace
acceptors (005 T060a1, `contracts/egress.md`).
  - [ExSandbox.Egress.Verification](ExSandbox.Egress.Verification.md): Whether a running sandbox is *policed* rather than merely *isolated*
(005 T060a3/T060a5, `contracts/egress.md` §Capability probing).

