Zum Inhalt

ARCH-2026-003 – Schlanke Architekturentscheidungsnachweise und nachvollziehbare Ablösung

Status: Entwurf
Proposal-Status: under_review
Kategorie: architecture
Erstellt: 2026-07-05
Stand: 2026-07-07
Geprüfter Repository-Stand: f84c881aace65ff9aa857b43fc2de4b0a7998397

Anlass

Der Entscheidungsbestand enthält historisch angenommene oder zurückgestellte Architecture Decision Records, deren Detailaussagen durch spätere Spezifikationen, Verträge und Implementierungen teilweise überholt wurden.

Die Dateien besitzen uneinheitliche Statusfelder, zwei konkurrierende Nummerierungsmuster und keine einheitliche Kennzeichnung ihrer heutigen Relevanz. Dadurch können historische Aussagen fälschlich als aktuelle Architektur gelesen werden.

Bestätigte Teilentscheidung 1 – Rolle und Lifecycle

Am 2026-07-07 wurde Variante B bestätigt:

Der Proposal-Status bleibt der einzige Workflowstatus für Änderungen.

Architecture Decision Records sind informative historische
Entscheidungsnachweise und keine aktuelle technische Wahrheit.

Eine separate ADR wird nur für bedeutende, langfristige und
domänenübergreifende Architekturentscheidungen erzeugt, grundsätzlich
nach vollständiger Integration des zugrunde liegenden Proposals.

Bestehende ADRs bleiben historisch erhalten, erhalten jedoch eindeutige
Metadaten, eine aktuelle Relevanzbewertung und Verweise auf die heute
führenden Quellen.

Diese Teilentscheidung legt die Rolle der ADRs fest. Die konkrete Metadatenstruktur, die Klassifizierung des Altbestands und die Integrationsdetails bleiben Gegenstand weiterer Einzelentscheidungen.

Ausgangsproblem

Der aktuelle Bestand vermischt drei unterschiedliche Dimensionen:

Dokumentstatus
  verbindlich | verbindlicher Zielentwurf | informativ | Entwurf

Workflowstatus eines Änderungsvorschlags
  new | under_review | accepted | rejected | deferred | integrated

historisches Ergebnis und heutige Relevanz einer Entscheidung
  accepted | deferred | rejected
  current | partial | historical

Bestehende ADR-Dateien verwenden Werte wie:

Status: Angenommen
Status: Accepted
Status: Deferred

Das widerspricht dem verbindlichen Dokumentationssystem, nach dem Status: ausschließlich die normative Dokumentklasse bezeichnet.

Zusätzlich existieren gleichzeitig:

ADR-001-tech-stack.md
0001-frontend-mvp-scenario-and-reporting-architecture.md

Beide wirken wie ADR 001, besitzen jedoch keine eindeutige maschinenlesbare Decision-ID.

Relevanter bestehender Stand

Führende Regeln:

docs/governance/documentation-system.md
  keine parallelen Wahrheiten
  ADRs sind keine führenden Spezifikationen
  Status verwendet nur definierte Dokumentklassen

docs/governance/change-control.md
  Proposal-Status ist der verbindliche Änderungsworkflow
  accepted ist noch keine produktive Wahrheit
  erst integrated bedeutet vollständig übernommen
docs/changes/decisions/index.md
  ADRs dokumentieren historischen Kontext
  führende Spezifikationen bleiben aktuelle Wahrheit
  aktuelle Einordnung wird bereits informativ gepflegt
AGENTS.md
  berücksichtigt Entscheidungen, ordnet ihre nicht führende Rolle aber noch nicht präzise ein

Bestehender Entscheidungsbestand:

docs/changes/decisions/ADR-001-tech-stack.md
docs/changes/decisions/0001-frontend-mvp-scenario-and-reporting-architecture.md
docs/changes/decisions/0002-future-private-user-accounts-and-family-workspaces.md
docs/changes/decisions/0003-future-separate-rent-estimation-page.md
docs/changes/decisions/0004-future-batch-reporting-and-data-quality.md
docs/changes/decisions/0005-future-personal-financing-profile.md
docs/changes/decisions/0006-future-admin-data-management-and-market-rent-database.md

Nachgewiesene aktuelle Architekturabweichungen

1. Dokumentstatus und Entscheidungsstatus sind vermischt

Die bestehenden ADRs verwenden Status: für historische Entscheidungsergebnisse. Der verbindliche Dokumentstatus müsste für ADRs jedoch informativ lauten.

2. Aktuelle Relevanz steht nur im Index

Der Entscheidungsindex enthält bereits eine gute aktuelle Einordnung. Die einzelne ADR-Datei zeigt beim direkten Öffnen jedoch nicht zuverlässig:

welche Aussagen weiterhin gelten
welche nur teilweise gelten
welche führenden Quellen heute maßgeblich sind
welche Detailaussagen abgelöst wurden

3. Keine maschinelle Absicherung

Der vorhandene Spezifikationskonsistenztest prüft ADR-Dateien und ADR-Index nicht systematisch.

Nicht geprüft werden unter anderem:

eindeutige Decision-ID
zulässige Metadatenwerte
vollständiger Index
existierende Führende-Quellen-Verweise
notwendige Ablösungshinweise bei historical
nicht existierende Superseded-by-Verweise

4. Zwei Nummerierungssysteme

Die Dateien verwenden sowohl ADR-001-* als auch 0001-*. Eine Umbenennung würde Historie und Links unnötig verändern. Ein eindeutiges neues Metadatenfeld ist daher erforderlich.

5. MkDocs unterscheidet Relevanz nicht sichtbar

Aktuelle, teilweise relevante, historische und zurückgestellte Entscheidungen stehen in derselben Navigationsgruppe. Der Entscheidungsindex erklärt die Einordnung, direkte ADR-Seiten jedoch nicht.

6. Bestehendes Proposal würde einen zweiten Workflow erzeugen

Der ursprüngliche Vorschlag sah einen ADR-Lifecycle mit:

proposed | accepted | deferred | rejected | superseded

vor. Dieser überschneidet sich stark mit dem bereits verbindlichen Proposal-Workflow.

7. Superseded ist keine historische Entscheidungsart

Eine Entscheidung kann historisch accepted gewesen sein und heute historical sein. superseded beschreibt deshalb heutige Relevanz oder Ablösung, nicht das ursprüngliche Entscheidungsergebnis.

8. Zeitpunkt und Pflicht einer ADR sind unklar

Es ist heute nicht geregelt:

wann ein integriertes Architektur-Proposal zusätzlich eine ADR erzeugt
ob jede Architekturänderung zwingend eine ADR benötigt
ob eine ADR bereits bei accepted oder erst bei integrated entsteht

9. AGENTS.md ist missverständlich

docs/changes/decisions/ wird dort unter weiteren führenden Grundlagen genannt. Governance und Entscheidungsindex stellen dagegen klar, dass ADRs historische Begründungsnachweise und keine parallele Wahrheit sind.

Zielprinzip

Ein einziger Änderungsworkflow

Proposal:
new
-> under_review
-> accepted | rejected | deferred
-> Integration und Prüfung
-> integrated

Es wird kein zweiter ADR-Workflow eingeführt.

ADR als historischer Nachweis

Eine ADR dokumentiert:

welche bedeutende Architekturentscheidung getroffen wurde
welche Alternativen betrachtet wurden
warum die Entscheidung getroffen wurde
welche Konsequenzen akzeptiert wurden
wie die Entscheidung später eingeordnet oder abgelöst wurde

Eine ADR ist:

informativ
historisch nachvollziehbar
keine aktuelle fachliche oder technische Wahrheit
kein Ersatz für Spezifikation, Vertrag, Code oder Test

Neue ADR nur bei wesentlichen Entscheidungen

Eine separate ADR ist empfohlen, wenn mehrere der folgenden Kriterien erfüllt sind:

langfristige Wirkung
mehrere Komponenten oder Domänen betroffen
mehrere realistische Alternativen mit relevanten Trade-offs
schwer oder teuer rückgängig zu machen
später voraussichtlich erneut zu hinterfragen
wichtig für das Verständnis der Gesamtarchitektur

Keine automatische ADR-Pflicht besteht für:

lokale Modulzuordnung
kleine Renderer- oder Dateistrukturentscheidung
mechanischen Refactor
Korrektur zur Wiederherstellung einer bestehenden Regel
rein redaktionelle Architekturpräzisierung

Zeitpunkt einer neuen ADR

Neue ADRs werden grundsätzlich erst nach vollständiger Integration erstellt oder finalisiert:

under_review
  Proposal enthält Prüfung und Optionen

accepted
  Proposal enthält die getroffene Entscheidung und offene Integration

integrated
  führende Dokumente, Code und Tests sind synchron
  bei wesentlicher Entscheidung kann eine ADR als historischer Nachweis erstellt werden

Eine vorläufige ADR vor integrated ist nur zulässig, wenn sie eindeutig als Entwurf außerhalb des Entscheidungsbestands geführt wird. Für den normalen Immohai-Prozess ist dies nicht vorgesehen.

Vorgeschlagenes Metadatenmodell

Für bestehende und neue ADRs wird folgende Richtung vorgeschlagen:

Status: informativ
Dokumenttyp: Architecture Decision Record
Decision-ID: eindeutig
Entscheidungsergebnis: accepted | deferred | rejected
Entschieden: YYYY-MM-DD
Zuletzt-geprüft: YYYY-MM-DD
Aktuelle-Relevanz: current | partial | historical
Führende-Quellen:
  - Pfad
  - Pfad
Supersedes: optional
Superseded-by: optional
Ursprungs-Proposal: optional
Integrationsreferenz: optional

Bedeutungen

Entscheidungsergebnis
  beschreibt das historische Ergebnis zum Entscheidungszeitpunkt

Aktuelle-Relevanz
  current:
    Kernaussage und relevante Details weiterhin nutzbar

  partial:
    Grundentscheidung bleibt relevant, einzelne Details sind überholt

  historical:
    Entscheidung dient nur noch als historischer Kontext

Superseded-by
  verweist auf eine nachfolgende ADR oder eine dokumentierte Ersatzentscheidung

Führende-Quellen
  nennt die heute verbindlichen Dokumente des betroffenen Themas

Regel für historical

Bei Aktuelle-Relevanz: historical ist mindestens erforderlich:

Superseded-by
oder
klarer Ablösungshinweis mit führender Ersatzquelle

Regel für partial

Bei Aktuelle-Relevanz: partial ist ein sichtbarer Hinweisblock erforderlich:

welcher Grundsatz weiter gilt
welche Detailaussagen nicht mehr verwendet werden dürfen
welche führenden Quellen heute maßgeblich sind

Eindeutige Decision-IDs und Dateinamen

Bestehende Dateien werden nicht umbenannt.

Empfohlene eindeutige IDs für den Altbestand:

ADR-001-tech-stack
ADR-0001-frontend-mvp
ADR-0002-private-user-accounts
ADR-0003-rent-estimation-page
ADR-0004-batch-reporting-data-quality
ADR-0005-personal-financing-profile
ADR-0006-admin-market-rent-data

Für neue ADRs soll ein einheitliches Muster entschieden werden. Empfohlene Richtung:

ADR-YYYY-NNN-<slug>.md
Decision-ID: ADR-YYYY-NNN-<slug>

Die bestehenden Nummern werden nicht nachträglich in dieses Muster migriert.

Vorläufige Klassifizierung des Altbestands

Die endgültige Klassifizierung bleibt eine eigene Entscheidung. Nach aktuellem Audit ist folgende Richtung plausibel:

Datei historisches Ergebnis vorläufige Relevanz
ADR-001-tech-stack.md accepted partial
0001-frontend-mvp-scenario-and-reporting-architecture.md accepted partial
0002-future-private-user-accounts-and-family-workspaces.md deferred partial
0003-future-separate-rent-estimation-page.md deferred partial
0004-future-batch-reporting-and-data-quality.md accepted partial
0005-future-personal-financing-profile.md deferred current
0006-future-admin-data-management-and-market-rent-database.md accepted partial

Wesentliches Prüfergebnis:

Derzeit ist keine gesamte ADR eindeutig vollständig historical.
Mehrere ADRs besitzen weiterhin gültige Grundentscheidungen,
aber überholte Detailaussagen.

Eine vollständige Ablösung darf deshalb nicht allein aufgrund einzelner veralteter Details gesetzt werden.

Sichtbarer Aktualitätshinweis in jeder ADR

Jede ADR soll vor dem historischen Inhalt einen kompakten Hinweisblock erhalten:

Diese Datei dokumentiert eine historische Architekturentscheidung.
Die aktuelle verbindliche Architektur steht in den unter
„Führende Quellen“ genannten Dokumenten.

Aktuelle Relevanz: partial
Weiterhin gültig: ...
Nicht mehr aktuell: ...

Der historische Haupttext bleibt unverändert. Er wird nicht nachträglich auf aktuelle Feldnamen oder Module umgeschrieben.

Entscheidungsindex und Navigation

Der Index bleibt die zentrale Übersicht und soll mindestens enthalten:

Decision-ID
Datei
Titel
historisches Ergebnis
aktuelle Relevanz
Ursprungs-Proposal optional
Nachfolger oder Ablösung optional
führende Quellen

MkDocs soll deutlich machen, dass Decisions historische Entscheidungsnachweise enthält. Eine zusätzliche Gruppierung nach current, partial und historical ist optional und darf nicht zur manuellen Doppelpflege führen.

Konsistenzprüfung

Empfohlen wird ein eigener Test:

scripts/check-decision-records.mjs

Dieser Test soll prüfen:

alle ADR-Dateien besitzen erforderliche Metadaten
Status ist informativ
Dokumenttyp ist Architecture Decision Record
Decision-ID ist eindeutig
Entscheidungsergebnis besitzt zulässigen Wert
Aktuelle-Relevanz besitzt zulässigen Wert
partial nennt führende Quellen und Aktualitätshinweis
historical nennt Superseded-by oder Ablösungshinweis
alle ADR-Dateien stehen im Index
alle Indexdateien existieren
alle referenzierten führenden Quellen existieren
Ursprungs-Proposal und Superseded-by existieren, sofern als Dateipfad angegeben
keine zwei Dateien verwenden dieselbe Decision-ID

Der Test kann vom Contract Check aufgerufen werden. Die ADR-Prüfung soll fachlich von der Spezifikationskonsistenz getrennt bleiben.

Geltungsbereich

ARCH-2026-003 umfasst:

Rolle von ADRs im Immohai-Dokumentationssystem
Metadatenmodell
historisches Entscheidungsergebnis
aktuelle Relevanz
Ablösungs- und Nachfolgerverweise
Kriterien für neue ADRs
Zeitpunkt der ADR-Erstellung
Klassifizierung des Altbestands
Entscheidungsindex
MkDocs-Kennzeichnung
Konsistenztest
Präzisierung in AGENTS.md

Nicht Teil dieses Proposals:

Änderung der inhaltlichen Architekturentscheidungen selbst
Änderung von Formeln, KPIs oder Datenverträgen
Umbenennung bestehender ADR-Dateien
Löschen historischer Entscheidungen
automatische Erzeugung von ADRs aus Proposals
allgemeine ADR-Regeln für andere Projekte

Allgemeine projektübergreifende ADR-Anleitungen gehören in das Developer Playbook.

Weitere offene Einzelentscheidungen

2. Exakte Metadatenfelder
   Welche Felder sind required, optional und wiederholbar?

3. Decision-ID und Dateimuster
   Welches Muster gilt für neue ADRs?

4. Kriterien für ADR-Pflicht
   Reicht eine Empfehlung oder werden verbindliche Schwellen definiert?

5. Klassifizierung des Altbestands
   Welche ADR ist current, partial oder historical?

6. Hinweisblock und Führende Quellen
   Welche Mindeststruktur erhält jede ADR?

7. Index und MkDocs
   Welche Felder zeigt der Index, ohne doppelte Wahrheit zu erzeugen?

8. Konsistenztest
   Welche Fehler blockieren CI, welche erzeugen nur Hinweise?

9. Verhältnis zu integriertem Proposal
   Welche Inhalte bleiben nur im Proposal, welche werden in eine ADR verdichtet?

Entscheidungsmehrwert

keine Verwechslung zwischen historischem Kontext und aktueller Wahrheit
kein zweiter Workflow neben dem Proposal-Prozess
klare und geringe Pflegekosten
eindeutige Decision-IDs trotz bestehender Dateinamen
nachvollziehbare Teilablösung ohne Umschreiben historischer Texte
klare Verbindung zwischen Proposal, Integration, ADR und Spezifikation
maschinell prüfbarer Entscheidungsbestand

Auswirkungen auf Architektur, Roadmap und Spezifikation

Architektur:

keine Änderung des technischen Systems
Änderung des Architekturentscheidungsprozesses und seiner Dokumentation

Roadmap:

keine Produktprioritätsänderung
einmaliger Pflegeblock für den Altbestand
kleiner dauerhafter Pflegeaufwand bei wesentlichen Architekturentscheidungen

Spezifikation:

keine fachliche Regeländerung
Governance und Dokumentationssystem werden nach Annahme präzisiert
AGENTS.md wird an die führende Governance angepasst

Auswirkungen auf Formeln, KPIs und Datenverträge

keine Änderung
keine Schema- oder Modellversion
keine Engine-Version

Dokumentversionen der betroffenen Governance- und Indexdateien sind bei Integration zu erhöhen.

Auswirkungen auf UI, Reporting und Speicherung

keine produktive Auswirkung
keine Änderung gespeicherter Daten
nur Dokumentationsnavigation und historische Einordnung betroffen

Legacy- und Migrationsfolgen

bestehende Dateien bleiben an ihren Pfaden
historische Haupttexte bleiben erhalten
Metadaten und Aktualitätshinweise werden ergänzt
Index wird synchronisiert
keine inhaltliche Aktualisierung alter ADRs auf heutige Architektur
keine rückwirkende Erzeugung fehlender Proposals

Risikoanalyse

Proposal-Aktualisierung:

niedrig

Spätere Dokumentationsintegration:

niedrig bis mittel

Produkt- und Laufzeitrisiko:

sehr niedrig

Hauptrisiken:

falsche Einstufung als current, partial oder historical
zu viele ADRs und unnötige Doppelpflege
widersprüchliche Angaben zwischen ADR und Index
gebrochene Verweise
historische Texte werden versehentlich inhaltlich umgeschrieben
zukünftige Assistenten verwenden alte Details als aktuelle Vorgabe

Diese Risiken werden durch schlanke Metadaten, führende Quellen und einen dedizierten Konsistenztest begrenzt.

Sicherungs- und Rückfallstrategie

Vor Integration:

aktuellen main-Commit festhalten
Dokumentationsbuild und Contract Check nachweisen
separaten Integrationsbranch verwenden
vollständige Liste aller bestehenden ADR-Pfade sichern
bestehende Links und MkDocs-Navigation prüfen

Da keine produktiven Daten oder Berechnungen betroffen sind, genügt Git als Rückfallmechanismus. Jede ADR-Datei soll in einem kleinen, einzeln prüfbaren Commit aktualisiert werden.

Empfohlene Umsetzungsstruktur nach vollständiger Annahme

Phase 0
  Metadaten und Klassifizierungsregeln final entscheiden

Phase 1
  Governance, AGENTS.md und Decision-Index aktualisieren
  check-decision-records.mjs einführen

Phase 2
  ADR-Dateien einzeln klassifizieren
  Metadaten und Aktualitätshinweise ergänzen

Phase 3
  MkDocs und Querverweise synchronisieren
  Dokumentationsbuild und Contract Check

Phase 4
  Proposal auf integrated setzen
  Integrationscommit dokumentieren

Prüfergebnis

Die ursprüngliche Problemfeststellung ist bestätigt. Der Entscheidungsbestand benötigt eine explizite aktuelle Einordnung in jeder Einzeldatei und eine maschinelle Konsistenzprüfung.

Der ursprünglich vorgeschlagene eigenständige ADR-Lifecycle wäre jedoch unnötig komplex und würde den Proposal-Prozess teilweise duplizieren.

Die schlanke Variante ist geeigneter:

Proposal steuert Änderungen.
Führende Spezifikationen definieren aktuelle Wahrheit.
ADR dokumentiert bedeutende historische Entscheidung und Ablösung.

Entscheidung

Teilentscheidung 1 am 2026-07-07 bestätigt:

Variante B – schlanke historische Decision Records ohne eigenen Workflow.
Der Proposal-Status bleibt der einzige Änderungsworkflow.
Neue ADRs entstehen nur für bedeutende Architekturentscheidungen,
grundsätzlich nach vollständiger Integration.

Gesamtentscheidung: offen
Proposal-Status: under_review

Zieldokumente bei späterer Annahme

AGENTS.md
docs/governance/documentation-system.md
docs/governance/change-control.md
docs/changes/decisions/index.md
docs/changes/decisions/*.md
scripts/check-decision-records.mjs
package.json oder Contract-Check-Einstieg
mkdocs.yml

Integrationscommit

offen