Skip to content

Architecture Decision Records

One file per decision. Format: Context → Decision → Consequences. Immutable once Accepted — a reversal is a new ADR that supersedes the old one, which is then marked Superseded by ADR-nnnn rather than edited. A later ADR that narrows part of an earlier one without reversing it is an amendment: the earlier ADR keeps its status and gains an Amended by pointer, so the record stays navigable without being rewritten.

Status values: Proposed · Accepted · Superseded by ADR-nnnn · Deprecated

ADR Title Status
0001 Ports and adapters (hexagonal) architecture Accepted
0002 Async-first core on anyio; sync facade derived Accepted
0003 No lowest common denominator: capabilities + .native Accepted
0004 Thin core; adapters behind extras, lazily imported Accepted
0005 Secure by default, enforced in v0.1 Accepted
0006 Isolation tier is a first-class, reported property Accepted
0007 The contract suite is the adapter specification Accepted
0008 Dual configuration: DSN strings and typed config objects Accepted
0009 Library first; MCP is the first server; sandboxio-server is gated Accepted
0010 Error codes are public, semver-covered API Accepted
0011 OTel GenAI semconv isolated behind one mapping module Accepted
0012 No telemetry, no import side effects Accepted
0013 Complement OpenAI's SandboxClient, do not compete with it Accepted
0014 Project name: sandboxio, short code SBX Accepted
0015 Python floor 3.11; develop on 3.14 Accepted
0016 MIT license; DCO for contributions Accepted
0017 SandboxTimeout does not inherit the builtin; timeouts split by phase Accepted
0018 IsolationTier ordering via an explicit rank; UNKNOWN is the default Accepted
0019 Streaming returns a Process context manager, not a bare iterator Accepted
0020 Shielded teardown with a bounded grace; the mandatory timeout is the backstop Accepted
0021 One operation record, three renderings; no inline cost Accepted
0022 Hand-written sync facade over a per-sandbox portal, with a parity test Accepted
0023 Docker cannot filter egress; dependencies come from images or wheelhouses Accepted
0024 Docker declares STATEFUL_CODE off in v0.1 Accepted
0025 v0.1 ships Docker + E2B + Fake; Modal moves to v0.1.1 Accepted
0026 Documentation under CC BY 4.0; code stays MIT Accepted
0027 Blocking adapters get their own thread budget, not anyio's Accepted
0028 Docker containers ship hardened, minus the flags that break images Accepted
0029 Docs site: MkDocs Material on GitHub Pages at docs.sandboxio.dev Accepted

Decisions not yet made live in ../open-questions.md and graduate to an ADR here when settled.