Durable decisions for Echo. Each ADR records context, decision, and consequences. Prefer short ADRs over essays.
Language surface decisions are intentionally sparse after the design reset.
Prefer writing evolving rules in docs/syntax.md / docs/lexer.md until a
choice must stick forever—then add an ADR.
| ADR | Title |
|---|---|
| 0001 | Shared compiler pipeline |
| 0002 | LLVM-only execution backend |
| 0003 | AST is source-shaped |
| 0004 | Rust runtime owns executable semantics |
| 0005 | Structured diagnostics are a shared contract |
| 0006 | Compilation graph is closed |
| 0007 | docs/ vs www/ ownership |
| 0008 | Standalone language, not PHP superset |
| 0009 | Language features land as full vertical slices |
| 0010 | Platform baseline |
| 0011 | Chumsky for parsing |
| 0012 | Analysis product and shared pipeline library |
| 0013 | Tasks + event loop via + / - leaders (not std/task) |
| 0014 | Modules / paths / optional xo.toml / user .xo package cache |
| 0015 | Echo 2026 edition + canonical public Language Spec |
| 0016 | Scope-owned memory: promote / demote / release on scope exit |
| 0018 | Static AOT + scratch OCI packaging |
| ADR | Title |
|---|---|
| 0013 | Task spawn/join leaders + runtime event loop |
| 0014 | Modules / packages / paths / $XO_HOME/packages |
| 0015 | Echo 2026 edition + canonical public Language Spec |
| 0016 | Scope-owned memory (deterministic disposal) |
| 0018 | Static AOT + scratch OCI packaging |
- The choice is hard to reverse or expensive to re-argue.
- Two reasonable alternatives existed and one was selected.
- A product or architecture boundary must stay stable across many PRs.
Do not ADR routine syntax experiments while still exploring. Put those in
syntax.md and the roadmap session log first.