Skip to content

Architecture Decision Records

Each ADR records one decision: context, decision, alternatives, consequences. Accepted ADRs are immutable; a superseding ADR links back.

ADR Title Status
0001 Compile to Go source through go/ast Accepted
0002 Compiler in Go; dependencies Accepted
0003 Go type information via go/packages Accepted
0004 Lyth checker plus go/types validation Accepted
0005 Exact source maps plus column-less //line Accepted
0006 Overlay builds; in-tree generation on request Accepted
0007 val/var and value immutability Superseded for locals by 0031
0008 Error handling: throws, ?, catch, throw Accepted
0009 Nullability with platform types and boxed optionals Accepted (smart casts amended by 0031)
0010 Verbatim Go names; pub and capitalization Superseded by 0022
0011 Type syntax: generics-style collections, loose ? Accepted (List<T> superseded by 0023; other type spellings by 0031)
0012 Features considered and rejected Accepted (extended by 0031, which adopts :=)
0013 Public fields by default; automatic json tags Amended by 0022
0014 Tests are Go tests (lyth test) Accepted
0015 Backend services use Go libraries directly Accepted
0016 Type tests are type assertions, with smart casts Accepted (smart casts amended by 0031)
0017 Nullable values may be passed to Go APIs Accepted (refines 0009)
0018 Typed catch clauses match with errors.AsType Accepted (extends 0008)
0019 Named and default arguments for Lyth functions Accepted
0020 Declared conformance: struct T : I Accepted
0021 Inferred results for private expression bodies; pass-through return Accepted (refines 0008)
0022 Capitalization is visibility; Lyth names are Go names Accepted (supersedes 0010)
0023 Slice types are spelled []T Accepted (amended by 0031)
0024 Channel operations are methods; select Accepted (types amended by 0031)
0025 Enums and sealed interfaces Accepted
0026 Null converts to a nil interface Accepted
0027 Only throws and Go callbacks make a lambda fallible Accepted (refines 0008)
0028 Generic declarations are Go generics Accepted (spelling amended by 0031)
0029 Extension functions are Go functions called like methods Accepted (spelling amended by 0031)
0030 The standard library is compiled with the program Accepted
0031 Go’s spelling for what Go already has: func, :=, Go types, [T], headers, self Accepted (supersedes 0007 for locals and parts of 0011; amends 0009, 0012, 0016, 0023, 0024, 0028, 0029)
0032 Go’s typed literals for slices, arrays, and maps Accepted (extends 0031)