--- type: adr id: "0023" status: accepted date: 2026-08-19 supersedes: null superseded_by: null related: - "docs/adr/0009-commit-konventionen-und-historien-anonymisierung.md" - "docs/adr/0022-upstream-anschluss-durch-einmaligen-merge.md" - "docs/issues/0104-daueralarme-melden-nichts-mehr.md" --- # ADR-0023: Fremde Historie von der Git-Hygiene ausnehmen — erklärt, nicht global ## Kontext Der Upstream-Merge aus [ADR-0022](0022-upstream-anschluss-durch-einmaligen-merge.md) hat am 2026-08-19 **70.265 fremde Commits** in `ThreadNet-Web` geholt. Sie stammen von Element und tragen deren Zeitstempel und Identitäten. Die Git-Hygiene-Prüfung aus [ADR-0009](0009-commit-konventionen-und-historien-anonymisierung.md) (`gruppenpruefung.py`, Prüfung 5) bemängelte davon sofort **39 Commits** als „Echtzeit-Stempel" — alle im Fenster seit der Regel-Grenze 2026-08-07. Das ist kein Fehlalarm im engeren Sinn: Die Commits verletzen die Konvention wirklich. Sie konnten ihr aber nie folgen, weil sie nicht bei uns entstanden sind, und sie werden sich nie ändern lassen. Damit war die Prüfung dauerhaft rot — genau der Zustand, den [#0104](../issues/0104-daueralarme-melden-nichts-mehr.md) am selben Tag beseitigt hatte. Ein Alarm, der immer rot ist, meldet nichts mehr. ## Optionen **A: Quittieren** über den Mechanismus aus ADR-0020. Verworfen: 39 Einträge, und die Quittung verlangt eine Frist — hier gäbe es keine, weil sich nichts ändern wird. ADR-0020 lässt „permanent" ausdrücklich nur als ADR zu, was auf diese ADR hinausläuft, aber mit 39 Zeilen Ballast im Quittungs-Log. **B: Regel-Grenze verschieben oder die Prüfung global lockern.** Verworfen: Das nähme allen Repos den Schutz, um einem zu helfen. **C: Fremde Absender hart im Code ausnehmen** (`releases@riot.im`, `noreply@github.com`). Verworfen: Das ist eine Liste, die mit jedem neuen fremden Beitragenden wächst — dieselbe Falle, die MASCHINEN bewusst per Adresse und nicht per Name matched, nur eine Ebene höher. **D: Erklärte Ausnahme pro Komponente.** Neues Feld `fremdhistorie` in `docs/components/*.md`. Wo es gesetzt ist, prüft die Hygiene nur noch Commits, die von **eigenen Identitäten committet** wurden. ## Entscheidung **Option D** (sorb, 2026-08-19: „gruppenprüfung fixen, upstream-commits ausnehmen"). Der Trennschnitt ist der **Committer**, nicht der Autor. Gemessen an ThreadNet-Web im Fenster seit 2026-08-07: 18 eigene Commits, alle von `cfx@riot.8shield.net` committet; 39 fremde, committet von `GitHub ` (35) und `RiotRobot` (4). **Keine Überschneidung.** Der Autor taugt nicht als Kriterium — unsere eigenen Commits können fremde Autoren tragen (Cherry-Picks), und fremde Commits tragen Autoren, die wie Menschen aussehen. Der Feldwert ist die **Begründung**, kein Schalter: Wer die Ausnahme erklärt, sagt, woher die fremden Commits stammen. Das folgt dem Muster der Quittungen aus ADR-0020 — eine Ausnahme ohne Begründung gibt es nicht. ## Konsequenzen - Die Alarmanlage ist wieder grün und damit wieder aussagekräftig: 0 offene Befunde, 20 quittiert. - Die Prüfung bleibt in ThreadNet-Web **wirksam** — nachgewiesen, nicht angenommen: Nach dem Fix werden dort weiterhin 18 Commits geprüft, alle auf `12:00:00`. - ⚠️ **Der Preis, ehrlich benannt:** In Repos mit erklärter Fremdhistorie fällt ein Commit durchs Raster, den jemand von uns unter einer **völlig unbekannten** Identität erzeugt — also weder eigene Adresse als Autor noch als Committer. Genau diesen Fall fängt die Identitätsprüfung sonst. Deshalb gilt die Ausnahme nur dort, wo sie deklariert ist, und nicht global. - Wer künftig ein Repo mit fremder Historie aufnimmt, muss das Feld setzen — sonst färbt die Prüfung rot, und das ist richtig so: Die Ausnahme soll eine bewusste Erklärung sein, kein stiller Nebeneffekt. - Nicht gelöst: Der Gitea-Spiegel von ThreadNet-Web scheitert seit demselben Merge am Umfang des Pushs (70.269 Commits, ~600 MB, `HTTP 499`). Eigener Vorgang.