ADR-0001: ADR-Format & Prozess

Status
Proposed
Datum
2026-05-15
Decider
Malte (mit Claude)
Verwandt
alle ADRs (Meta)
Tags
meta, process, documentation

Kontext

mvest soll alle relevanten Architektur-Entscheidungen als ADRs dokumentieren. Damit ADRs konsistent, lesbar und visuell ansprechend sind, brauchen wir ein festes Format, Konventionen für Erstellung und Status-Übergänge sowie eine klare Sprach-Wahl.

Diese ADR wurde rückwirkend geschrieben, nachdem sich das Format in ADR-0003 bis ADR-0007 und ADR-0014 in der Praxis etabliert hatte. Sie dokumentiert, was bereits gelebt wird, und macht es zur verbindlichen Norm für künftige ADRs.

Entscheidungstreiber

Betrachtete Optionen

Option A — MADR (Markdown)

Standard-Format für ADRs, bekannt und tooling-stark.

Industriestandard, Tooling vorhanden (adr-tools, log4brains).

Einfach zu diffen, GitHub-rendert nativ.

Visuell limitiert; Diagramme nur über Mermaid-Codeblocks, kein freies Styling.

Nutzer hat explizit visuell aufbereitete Doku gewünscht — Markdown wirkt schnell „langweilig".

Option B — Eigenes HTML-Format

Handgeschriebenes HTML mit zentralem Stylesheet, Mermaid via CDN, Status-Badges, Option-Cards.

Volle visuelle Kontrolle, freie Layouts (Karten, Tabellen, Diagramme).

Kein Build-Schritt — direkt über nginx als Static-Files served.

Bereits in 0003–0007/0014 erprobt, das Format funktioniert.

Mehr Schreibaufwand als Markdown.

Tooling (Linting, Diffing) weniger ausgereift als für Markdown.

Option C — Externe Tools (Confluence, Notion)

Vendor-Lock-in, schlecht versionierbar, nicht im Repo.

Nicht offline lesbar.

Entscheidung

Wir nutzen Option B: handgeschriebenes HTML in adr/ mit einem gemeinsamen Stylesheet und festen Konventionen.

Datei- und Verzeichnis-Konventionen

Pflicht-Struktur einer ADR

  1. Header (<header class="adr-header">):
    • Navigations-Link zum Index (<nav><a href="index.html">← ADR-Index</a></nav>)
    • <h1>: ADR-NNNN: Titel
    • Meta-Liste (<dl class="meta">) mit Pflichtfeldern:
      • Status — als Badge
      • Datum — ISO YYYY-MM-DD, Datum der letzten Statusänderung
      • Decider — wer entschieden hat
      • Verwandt — Liste verbundener ADRs (oder „—")
      • Tags — Schlagworte für Filterbarkeit
    • Optionale Meta-Felder: Supersedes, Superseded by, Deprecates.
  2. Sektionen (<section id="..."> mit <h2>):
    • Kontext — Pflicht. Warum stellt sich die Frage?
    • Entscheidungstreiber — Pflicht. Welche Kriterien beeinflussen die Wahl?
    • Betrachtete Optionen — Pflicht. Mindestens zwei Optionen, davon eine markiert als gewählt.
    • Entscheidung — Pflicht. Welche Option und warum, plus konkrete Festlegungen.
    • Konsequenzen — Pflicht. Mit Sub-Headings „Positiv", „Negativ / Trade-offs", optional „Risiken".
    • Optionale Sektionen: Architektur (mit Mermaid-Diagramm), Implementierungsstatus (Tabelle), Offene Fragen / nachfolgende ADRs.
  3. Footer (<footer class="adr-footer">) mit ADR-ID, Datum, Link zurück zum Index.

Stil- und CSS-Klassen-Konventionen

Status-Lifecycle

stateDiagram-v2 [*] --> Proposed: ADR geschrieben Proposed --> Accepted: Decider stimmt zu Proposed --> Verworfen: nicht weiterverfolgt Accepted --> Deprecated: Kontext obsolet Accepted --> Superseded: andere ADR ersetzt Deprecated --> [*] Superseded --> [*] Verworfen --> [*]
StatusBedeutungÜbergang
Proposed ADR ist geschrieben, aber noch nicht abgenommen. Entscheidung ist zur Diskussion. Default beim Erstellen.
Accepted Entscheidung ist getroffen und verbindlich. Nur bei expliziter Zustimmung des Deciders ("passt", "accepted", o. ä.).
Deprecated Entscheidung gilt nicht mehr; der Kontext ist obsolet, ohne dass eine ersetzende ADR existiert. Manuell, mit Begründung im ADR-Body.
Superseded Entscheidung wurde durch eine spätere ADR ersetzt. Pflichtfeld Superseded by: ADR-XXXX in der Meta.

Wichtige Regel: Eine neu geschriebene ADR steht immer auf Proposed. Der Wechsel auf Accepted erfolgt erst nach expliziter Bestätigung durch den Decider — nicht durch den Autor selbst, wenn das verschiedene Personen sind. Im Falle von KI-assistierter ADR-Erstellung: die KI darf nicht eigenmächtig „Accepted" setzen.

Inhaltliche Konventionen

ADRs zurückziehen oder ersetzen

Erstellungs-Prozess

  1. Diskussion: Optionen und Tradeoffs werden in der Conversation oder Issue durchgesprochen.
  2. Entwurf: ADR wird basierend auf der Diskussion geschrieben (Template als Basis).
  3. Status: Proposed beim ersten Commit.
  4. Review: Decider liest, gibt Feedback. Iteration falls nötig — Status bleibt Proposed.
  5. Abnahme: Decider sagt explizit „passt" / „accepted". Status auf Accepted, Datum bei Bedarf aktualisieren, ggf. Footer-Notiz „Accepted on YYYY-MM-DD".
  6. Pflege: bei späteren Änderungen am Kontext — Status auf Deprecated oder Superseded, je nach Lage.

Konsequenzen

Positiv

Negativ / Trade-offs