ADR Index¶
Architecture Decision Records (ADRs) capture significant choices and the reasoning behind them. We use the MADR format.
ADRs live under docs/architecture/adr/ and are numbered sequentially. They are immutable once accepted — a later decision that replaces or modifies an earlier one creates a new ADR that supersedes the old one.
Accepted¶
| Number | Topic | Date | Milestone |
|---|---|---|---|
| 0001 | Adopt Clean Architecture + DDD layout under src/ |
2026-04-26 | M3 |
| 0002 | OpenAPI 3.1 as the single source of truth for /api/v1/* |
2026-04-26 | M3 |
| 0003 | Pluggable IdP (AuthProvider interface) with OIDC + SAML implementations |
2026-04-26 | M3 |
| 0004 | RFC 7807 Problem Details + SASO-DOMAIN-NNNN codes |
2026-04-26 | M3 |
| 0005 | OpenFeature SDK + DB-backed provider with cron circuit breaker | 2026-04-26 | M4 |
| 0006 | system_setting DB table editable from the admin Web UI |
2026-04-26 | M4 |
| 0007 | Phinx for schema migrations | 2026-04-26 | M4 |
| 0009 | Multi-LLM gateway with provider abstraction (OpenAI / Gemini / Claude) | 2026-04-26 | M6 |
| 0010 | Vector embeddings + image search via OpenSearch k-NN | 2026-04-26 | M6 |
| 0011 | Flexible item attributes (EAV) + storage location codes | 2026-04-26 | M6 |
| 0012 | Search + cache infrastructure: OpenSearch primary, Redis cache | 2026-04-26 | M6 |
| 0013 | Background job queue via Symfony Messenger | 2026-04-26 | M6 |
| 0014 | Flutter device pairing (RFC 8628) + MCP server endpoint | 2026-04-26 | M6 |
| 0015 | Plugin system: Composer-installed packages with extension points | 2026-04-26 | M6 |
| 0016 | English-as-default + extract legacy JA strings into i18n catalogue | 2026-04-26 | M6 |
Planned¶
| Number | Topic | Milestone |
|---|---|---|
| 0008 | Vendor-bundled release ZIP for shared-hosting deploys | M5 |
Format¶
Each ADR follows MADR's slim template:
# NNNN — short title
* Status: accepted | proposed | superseded by ADR-NNNN
* Date: YYYY-MM-DD
* Deciders: @owner-handle, ...
## Context and Problem Statement
## Decision Drivers
## Considered Options
## Decision Outcome
## Consequences
Numbers are assigned at PR-open time. If two ADRs collide, the later one is renumbered before merge.