Architecture decision records¶
Each record captures one decision about lattice as a whole: the context that forced it, the options considered, and the consequences we accepted. Records are immutable once accepted; a changed decision gets a new record that amends or supersedes the old one. A decision about one package is recorded in that package's own series, in docs/<package>/adr/. The proposal that made lattice is stackr RFC-0003, and these records begin with what its move decided that the RFC's design didn't.
Outside its own series, a record is named with its package, as in "reflexr ADR-0003", and these as "lattice ADR-0002".
| ADR | Title | Status |
|---|---|---|
| 0001 | lattice's brand | Accepted, amended by 0014 |
| 0002 | CI runs every affected project and its dependents | Accepted, amended by stackr ADR-0018 |
| 0003 | CI on pull requests, Nightly on main, and a required Title check | Accepted, amended by 0012, 0016 and 0017 |
| 0004 | One GitHub App for release-please and Renovate | Accepted |
| 0005 | Renovate runs in lattice's own Actions | Accepted |
| 0006 | release-please: first versions, pre-1.0 bumps, and what releases | Accepted, amended by 0023 |
| 0007 | A timeout on every test and every job | Accepted |
| 0008 | One resolution, with litellm held at 1.83.0 | Accepted |
| 0009 | One dev container, at the root | Accepted |
| 0010 | Every project's tests run in a random order | Accepted |
| 0011 | CodeQL on every change, and Scorecard every week | Accepted |
| 0012 | The Title check holds each break in a public API to its marking | Accepted |
| 0013 | pyright stays until ty can replace it | Accepted |
| 0014 | portalr's and grantr's marks | Accepted |
| 0015 | Acceptance tests against the reference applications | Accepted, amended by artifactr 0061 and 0063, and reflexr 0060 and 0061 |
| 0016 | A merge queue on Mergify | Accepted, amended by 0024 |
| 0017 | CI installs its toolchain from a cache, with retries | Accepted |
| 0018 | lattice-core, what the libraries share | Accepted, amended by 0020 and 0021 |
| 0019 | A tag for each tenant's workspace | Accepted |
| 0020 | The telemetry contract needs no extra | Accepted |
| 0021 | The refusal schema needs no extra | Accepted |
| 0022 | LiteLLM requests carry the propagated trace tags | Accepted |
| 0023 | Publishing to PyPI from the release workflow | Accepted, amended by 0026 |
| 0024 | A parallel, batched merge queue | Accepted |
| 0025 | Formal specs in TLA+ and Lean | Accepted |
| 0026 | A distribution needs a reason; integrations are extras | Accepted |
| 0027 | Integrations switched per workspace, through one port | Accepted |
To add a record, copy template.md to the next number and add a row above. Each package's series uses the same template.