Architecture decision records¶
Each record captures one decision that shapes the library: the context it was made in, what was decided, and what follows from it. Records are immutable once accepted — a changed mind is a new record that supersedes the old one, so the history of why survives.
| # | Decision | Status |
|---|---|---|
| 0001 | Write PDF ourselves; Skia only for raster output | Accepted |
| 0002 | A print and typesetting vocabulary, owned by a glossary | Accepted |
| 0003 | Keep the fluent shape; add named style sheets | Accepted |
| 0004 | Colour is Ink: RGB, CMYK and spot, with tints | Accepted |
| 0005 | Target net10.0 and netstandard2.0 | Accepted |
| 0006 | A dependency-free core; native code only by opt-in | Accepted |
| 0007 | Quality gates: coverage, mutation, validators, snapshots | Accepted |
| 0008 | Another library is a reference for behaviour, never a source | Accepted |
| 0009 | Performance targets, measured against a reference | Accepted |
| 0010 | Developer tooling: a dotnet tool with a browser UI | Accepted |
| 0011 | Delivery in phases, one pull request each | Accepted |
| 0012 | Parents allot the final size; decorators fill it | Accepted |
| 0013 | Spans on .NET Framework come from System.Memory | Accepted |
| 0014 | Text is shaped once, in the core, for measuring and drawing alike | Accepted |
| 0015 | The text engine in layers: Unicode rules in the core, complex shaping by opt-in | Accepted |
| 0016 | Layout may draw ahead, and return | Accepted |
| 0017 | Draw order holds a page back | Accepted |
| 0018 | Structure is recorded as content is drawn | Accepted |
A new record has three sections: Context (the forces at play), Decision (what we will do) and Consequences (what becomes easier, what becomes harder, what we now owe).