Skip to main content

Architecture Decision Records

MyDash inherits its ADRs from the ConductionNL platform-wide set. There are no MyDash-specific ADRs today — every rule that applies to MyDash comes from the 23 org-wide records maintained in the hydra repo:

Why no app-level ADRs?

Earlier versions of each Conduction app repo carried stale copies of the ADRs in .claude/openspec/architecture/. Those drifted away from the hydra source of truth and triggered false-positive review findings (observed on decidesk #71, 2026-04-19 — the app-level copy of ADR-004 said fetch(), hydra said axios). The stale copies were deleted across every app repo; hydra is now the single source.

When Hydra's builder + reviewer containers operate on a MyDash PR, they bundle the current hydra ADRs into the build image and feed them to the agents as immutable context. So the rules every PR is measured against live in hydra, not here.

Quick index (per app-versions precedent)

ADRTopic
001Data layer (OpenRegister, entities, mappers)
002API design (REST, Common Ground)
003Backend (PHP, DI, 3-layer)
004Frontend (Vue, components, settings)
005Security (auth, CORS, input validation)
006Metrics & observability
007i18n (English primary, Dutch required)
008Testing (PHPUnit, Newman, Playwright)
009Documentation
010NL Design System
011Schema standards (schema.org, DCAT)
012Deduplication
013Container pool
014Licensing (EUPL-1.2)
015Common patterns (rate-limit retry, axios)
016Routes (appinfo/routes.php is the only path)
017Component composition
018Widget header actions
019Integration registry
020Gate scope to PR diff
021Bounded fix scope by change shape
022Apps consume OpenRegister abstractions
023Action-level authorisation

Compliance

MyDash's current compliance posture against the 23 ADRs is tracked in adr-audit.md. That file names per-ADR status (PASS / PARTIAL / FAIL / N/A), evidence, and follow-up items.