Architecture decision records
One record per numbered architecture decision in the approved plan, plus records for decisions that were only forced once the code existed. A record states what was decided and what it cost; its Status line says which milestone it shipped in. A decision is reversed by a new record that supersedes an old one, never by rewriting one.
- ADR 0001 — npm workspaces, tsdown, and a development export condition
- ADR 0002 — One guest export per frame: tick(frame-input) -> frame-output
- ADR 0003 — Dev mode runs the same TypeScript directly; wasm is the shipping path
- ADR 0004 — v1 runs the guest and Jolt on the main thread behind a Sandbox interface
- ADR 0005 — Fork three.js's GaussianSplat into @aosengine/splat as AnimatedGaussianSplat
- ADR 0006 — The renderer owns the GPUDevice; everything else borrows it
- ADR 0007 — Pluggable RigBackend: ORL now, GNM next
- ADR 0008 — Docs are markdown once: VitePress, TypeDoc markdown, generated llms bundles
- ADR 0009 — Flat ESLint plus Prettier, with a local plugin encoding the hard rules
- ADR 0010 — Placeholder assets ship as an npm package, not as LFS content
- ADR 0011 — Packages are implemented by opus subagents; Fable orchestrates
- ADR 0012 — The GNM head reaches the browser as an aosRig BakedHead, baked to .aosrig
- ADR 0013 — One key table, and it lives in @aosengine/sdk/keycodes