Architecture Decision Records
This directory records why Korrin is the way it is. Each file captures one decision — the context that forced it, the choice made, the consequences, and the alternatives rejected. The process itself is ADR 0000.
New ADRs use template.md. Every ADR must appear in the table
below; CI (crates/korrin/tests/adr.rs) enforces that, and that each ADR has the
required sections. README.md and template.md are exempt.
For what Korrin does (as opposed to why), see the specification.
Index
| # | Title | Status |
|---|---|---|
| 0000 | Architecture Decision Records: the process | Accepted |
| 0001 | Indentation defines blocks | Accepted |
| 0002 | Documentation is enforced by CI | Accepted |
| 0003 | Newlines terminate statements | Accepted |
| 0004 | A tree-walking interpreter first | Accepted |
| 0005 | Methods take an explicit self parameter | Accepted |
| 0006 | The Milestone 1 keyword set | Accepted |
| 0007 | INDENT / DEDENT tokenization, spaces only | Accepted |
| 0008 | Byte-offset spans, one diagnostic type, ariadne | Accepted |
| 0009 | Only nil and false are falsy | Accepted |
| 0010 | Numeric model: int/float split, / true division, checked overflow | Accepted |
| 0011 | Bare assignment, lexical block scope, nearest-binding rule | Accepted |
| 0012 | Cargo workspace: library plus thin CLI | Accepted |
| 0013 | Dependency policy | Accepted |
| 0014 | Built-in collection operations are free functions (M1) | Accepted |
| 0015 | String interpolation — every string, {expr} | Accepted |
Open questions
Decisions we know we need to make but have deliberately deferred. Each becomes a
Proposed ADR when work starts on it.
- Floor-division operator (
//). Only ifint(a / b)proves insufficient in practice. - Arbitrary-precision integers. Whether
intshould stop beingi64. - Module / import system. Milestone 2.
- Error handling (
try/raise). Milestone 2. - Methods on built-in types. Milestone 2 (amends 0014).
Resolved: string interpolation (0015); string
indexing is s[i] for one character and s.slice(a, b) for a range (M2).