# Architecture Decision Records

Each ADR records one decision: context, options, decision, reasons, trade-offs and consequences.

- ADRs are never deleted. When a decision changes, a new ADR supersedes the old one and the old ADR's status says so.
- Status values: **Proposed**, **Accepted**, **Superseded**, **Rejected**.
- Architecture v2 (2026-09-14) is summarised in [../architecture.md](/technical/architecture/).

## Index

| ADR | Title | Status |
|---|---|---|
| [0001](/decisions/0001/) | Framework boundaries | Accepted, amended by 0014, 0019 |
| [0002](/decisions/0002/) | Module architecture | Superseded by 0019, 0021 |
| [0003](/decisions/0003/) | Code generation | Accepted, amended by 0021 |
| [0004](/decisions/0004/) | Dependency injection | Superseded by 0017, 0020 |
| [0005](/decisions/0005/) | Database strategy | Accepted, amended by 0032, 0033 |
| [0006](/decisions/0006/) | Authentication | Superseded by 0024 |
| [0007](/decisions/0007/) | Observability | Accepted, amended by 0019, 0028 |
| [0008](/decisions/0008/) | Configuration | Superseded by 0020 |
| [0009](/decisions/0009/) | Repository strategy | Accepted, amended by 0019 |
| [0010](/decisions/0010/) | Dashboard architecture | Accepted, amended by 0026, 0028 |
| [0011](/decisions/0011/) | GitHub integration | Accepted |
| [0012](/decisions/0012/) | Versioning and upgrades | Superseded by 0015, 0016 |
| [0013](/decisions/0013/) | Multi-tenancy | Superseded by 0023 |
| [0014](/decisions/0014/) | Product shape, presets and creation prompts | Accepted, amended by 0035, 0041, 0050 |
| [0015](/decisions/0015/) | Public API surface and stability tiers | Accepted |
| [0016](/decisions/0016/) | Scaffold compatibility and upgrade path | Accepted, amended by 0050 |
| [0017](/decisions/0017/) | Application lifecycle | Accepted |
| [0018](/decisions/0018/) | Error contract and problem+json | Accepted |
| [0019](/decisions/0019/) | Module dependency rules and core budget | Accepted, amended by 0033 |
| [0020](/decisions/0020/) | Constructors and configuration | Accepted, amended by 0031 |
| [0021](/decisions/0021/) | Generator operation model | Accepted, amended by 0041, 0050 |
| [0022](/decisions/0022/) | Generated application layout | Accepted, amended by 0032 |
| [0023](/decisions/0023/) | Tenancy | Accepted, amended by 0033, 0048 |
| [0024](/decisions/0024/) | Authentication methods | Accepted, amended by 0038, 0043, 0044, 0046 |
| [0025](/decisions/0025/) | Email providers | Accepted, amended by 0033, 0037 |
| [0026](/decisions/0026/) | Operations APIs | Accepted, amended by 0031, 0033, 0034, 0036, 0038, 0051 |
| [0027](/decisions/0027/) | API contract and documentation | Accepted, amended by 0049, 0051 |
| [0028](/decisions/0028/) | Local development environment | Accepted |
| [0029](/decisions/0029/) | Threat model: framework, CLI and ecosystem | Accepted, amended by 0036, 0038 |
| [0030](/decisions/0030/) | Context and correlation propagation | Accepted |
| [0031](/decisions/0031/) | Runtime settings | Accepted |
| [0032](/decisions/0032/) | Hand-written SQL in repositories | Accepted |
| [0033](/decisions/0033/) | Background jobs | Accepted |
| [0034](/decisions/0034/) | Interim ops token | Superseded by 0038 |
| [0035](/decisions/0035/) | Interactive CLI with flag parity | Accepted, amended by 0037 |
| [0036](/decisions/0036/) | Audit storage | Accepted |
| [0037](/decisions/0037/) | Email setup and delivery | Accepted |
| [0038](/decisions/0038/) | Authentication in v0.2 | Accepted, amended by 0048 |
| [0039](/decisions/0039/) | Resource module template | Accepted, amended by 0048 |
| [0040](/decisions/0040/) | Release tracking | Accepted |
| [0041](/decisions/0041/) | Full preset generation | Accepted, amended by 0050 |
| [0042](/decisions/0042/) | Development seed data | Accepted |
| [0043](/decisions/0043/) | Two-factor authentication | Accepted, amended by 0044, 0046 |
| [0044](/decisions/0044/) | Passkeys | Accepted |
| [0045](/decisions/0045/) | Sign-in provider setup | Accepted, amended by 0046 |
| [0046](/decisions/0046/) | Google and Apple sign-in | Accepted |
| [0047](/decisions/0047/) | Client templates: docs site, dashboard and mobile apps from separate template repositories | Proposed |
| [0048](/decisions/0048/) | Organisations (v0.4): tables, org roles, requests, invitations, personal workspaces, lifecycle, generation | Accepted, amended by 0050 |
| [0049](/decisions/0049/) | Public website: landing page, framework docs and API reference in the apistock look; the Go generator in `site/` was replaced by the apistock-web Next.js repository on 2026-09-15 | Accepted |
| [0050](/decisions/0050/) | Upgrading apps and adding features to them (v0.5): lock v2, rebuilt merge base, `aps upgrade`, `aps add orgs` | Accepted |
| [0051](/decisions/0051/) | Operations in v0.5: audit stats, system health, jobs overview, retention, maintenance mode, API exports, `aps doctor` | Accepted |
| [0052](/decisions/0052/) | Shared rate limits and trusted proxies | Accepted |
