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 — amended by 0016 |
| 0015 | String interpolation — every string, {expr} | Accepted |
| 0016 | Operations on built-in values are methods (amends 0014) | Accepted |
| 0017 | Exceptions for error handling (try / except / finally / raise) | 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.
- Multiple / typed
exceptclauses. Deferred; Korrin has no exception hierarchy to filter on yet (0017).
Resolved: string interpolation (0015); methods on
built-in types (0016, amending
0014); string indexing is s[i]
for one character and s.slice(a, b) for a range; error handling is exceptions
(0017).