This directory captures the architectural decisions that shaped Metano. Each ADR is a short MADR-style document answering why a particular choice was made, written at the moment it was made (or retroactively when the decision predates this log). Features and tickets live in GitHub issues; ADRs are for the decisions a future reader might second-guess when they meet the code without the context that led to it.
- Filenames:
nnnn-slug.md, four-digit zero-padded, sequential. - Numbers are permanent. If an ADR is superseded, the replacement gets a
new number and the original is marked
Superseded by ADR-NNNN. - Prefer short ADRs. Use the template and keep each section to what is actually load-bearing.
- Ground every decision in concrete references (file paths, issue numbers, commits). An ADR that can't be traced back to the code is fiction.
| ADR | Title |
|---|---|
| ADR-0001 | Target-agnostic core + per-target projects |
| ADR-0002 | Handler decomposition (not formal GoF Visitor) |
| ADR-0003 | Declarative BCL mappings via [MapMethod] / [MapProperty] |
| ADR-0004 | Cross-project references via Roslyn compilation references |
| ADR-0005 | [InlineWrapper] as branded type + companion namespace |
| ADR-0006 | Namespace-first barrel imports + same-namespace relative |
| ADR-0007 | Output conventions: kebab-case, leaf-only barrels, #/ alias, sideEffects |
| ADR-0008 | Overload dispatch: slow-path dispatcher + fast-path private methods |
| ADR-0009 | Type guards as shape validation with instanceof fast path |
| ADR-0010 | MetanoDiagnostic + MS0001–MS0008 codes |
| ADR-0011 | [EmitPackage] as single source of truth for package.json#name |
| ADR-0012 | LINQ as eager wrapper hierarchy (with pipe-based migration tracked) |