ADR-0023: fremde Historie erklaert von der Git-Hygiene ausnehmen
Der Upstream-Merge holte 70.265 fremde Commits nach ThreadNet-Web; 39 davon faerbten die Gruppenpruefung als Echtzeit-Stempel rot. Sie verletzen die Konvention wirklich, konnten ihr aber nie folgen und werden sich nie aendern - also ein Dauerrot, und ein Dauerrot meldet nichts mehr (#0104). Neues Feld fremdhistorie in docs/components/*.md. Wo gesetzt, prueft die Hygiene nur Commits, die von eigenen Identitaeten COMMITTET wurden. Der Trennschnitt ist gemessen, nicht geraten: 18 eigene Commits, alle von uns committet; 39 fremde von GitHub/RiotRobot; keine Ueberschneidung. Der Autor taugt nicht - eigene Commits koennen fremde Autoren tragen (Cherry-Picks). Der Feldwert ist die Begruendung, kein Schalter - Muster der Quittungen aus ADR-0020. Die Ausnahme gilt nur, wo sie deklariert ist, nicht global; der Preis (ein Commit unter voellig unbekannter Identitaet faellt dort durchs Raster) steht in den Konsequenzen. Belegt: nach dem Fix 0 offene Befunde bei 20 Quittungen, und in ThreadNet-Web werden weiterhin 18 Commits geprueft, alle auf 12:00:00. Ausserdem zurueckgenommen: mein Nachtrag an ADR-0022. Eine angenommene ADR wird nicht editiert (Regel in der Vorlage) - die Erkenntnis steht jetzt in #0099.
This commit is contained in:
@@ -73,31 +73,3 @@ und ohne diese Messung wäre der Merge auf eine erfundene Grundlage gelaufen.
|
||||
empfangen) ist der Merge nicht abgenommen.
|
||||
- Schritt 4 aus #0099 — ein Verfahren zum Auftragen der Patches — wird damit
|
||||
gegenstandslos.
|
||||
|
||||
## Nachtrag 2026-08-19: ausgeführt, und was die Ausführung korrigiert
|
||||
|
||||
Vollzogen. `ThreadNet-Web:main` steht auf `8ca03fe`, der Merge-Commit `88c4e15` trägt
|
||||
beide echten Eltern. Produktion läuft auf `v0.6.0`. Zwei Annahmen dieser ADR haben sich
|
||||
in der Praxis verschoben:
|
||||
|
||||
**Die stille Klasse verschwindet nicht ganz — sie dreht sich um.** Die Entscheidung
|
||||
begründet sich damit, dass Git künftig meldet, wenn Upstream eine Datei verschiebt, die
|
||||
wir angefasst haben. Das hat gehalten (`RoomListItemWrapper`-Umbenennung wurde als
|
||||
Konflikt gemeldet). Was ein Drei-Wege-Merge **nicht** meldet, ist der umgekehrte Fall:
|
||||
Beide Seiten überleben die Auflösung, aber nur eine ergibt noch Sinn. Genau das brach
|
||||
`v0.6.0-rc.2` in Produktion — eine `getValue`-Zeile auf einen von Upstream entfernten
|
||||
Einstellungsschlüssel, die niemand mehr liest und die trotzdem wirft.
|
||||
|
||||
**Ein grüner Build ist keine Abnahme, und war nie eine.** Diese ADR sagt richtig
|
||||
„Abnahme ist kein Build, sondern ein Funktionstest" — gemeint war der ClamAV-Test. Der
|
||||
rc.2-Vorfall zeigt die Lücke davor: Der CI-Job `web` **baut** nur, webpack entfernt
|
||||
Typen ohne sie zu prüfen. `tsc` meldete den Fehler durchgehend, gefragt hatte ihn
|
||||
niemand. Seit `8ca03fe` führt `docker_web` den Job `typecheck` als `needs`; kein Image
|
||||
entsteht mehr ohne bestandene Typprüfung.
|
||||
|
||||
**Daraus die stehende Regel für künftige Upstream-Merges:** Nach der Konfliktauflösung
|
||||
gehört eine Prüfung auf *überlebende* Reste — nicht nur auf verlorene Zeilen. Der
|
||||
billigste Hebel ist die Typprüfung; sie fand beide Reste sofort. Wo Zeichenketten statt
|
||||
Typen im Spiel sind (Einstellungsschlüssel, Feature-Namen, Übersetzungs-IDs), reicht sie
|
||||
nicht, und es braucht einen Abgleich gegen die jeweilige Registry — für Einstellungen
|
||||
wurde er einmalig gefahren: 135 abgefragte gegen 152 registrierte.
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
---
|
||||
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 <noreply@github.com>` (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.
|
||||
@@ -5,8 +5,10 @@ anzeigename: "ThreadNet Web"
|
||||
phase: active
|
||||
gitlab: "axion1337.chat/ThreadNet-Web"
|
||||
mirror: "rohana.axion1337.de/sorb/ThreadNet-Web"
|
||||
fremdhistorie: "Element Web, seit dem Upstream-Merge 88c4e15 am 2026-08-19 (ADR-0022): 70.265 fremde Commits"
|
||||
related:
|
||||
- "docs/adr/0013-gruppenregeln-kanonisch-mit-pruefung.md"
|
||||
- "docs/adr/0022-upstream-anschluss-durch-einmaligen-merge.md"
|
||||
---
|
||||
|
||||
# ThreadNet Web
|
||||
|
||||
@@ -360,6 +360,23 @@ eingesetzter Zeile scheitert es und benennt beide Fehler, ohne sie besteht es
|
||||
scheitert zusätzlich bei leerer `tsc`-Ausgabe, damit ein stiller Erfolg nicht als
|
||||
Prüfung durchgeht.
|
||||
|
||||
### Was ADR-0022 dabei nicht vorhergesehen hat
|
||||
|
||||
Die ADR begründet die Entscheidung damit, dass Git künftig **meldet**, wenn Upstream
|
||||
eine Datei verschiebt, die wir angefasst haben. Das hat gehalten — die Umbenennung
|
||||
`RoomListItemAccessibilityWrapper` → `RoomListItemWrapper` kam als Konflikt.
|
||||
|
||||
Was ein Drei-Wege-Merge **nicht** meldet, ist der umgekehrte Fall: Beide Seiten
|
||||
überleben die Auflösung, und nur eine ergibt noch Sinn. Die stille Klasse verschwindet
|
||||
also nicht, sie dreht sich um — aus „unsere Zeile ist weg" wird „ihre Zeile ist noch
|
||||
da". Für künftige Merges heißt das: nach der Konfliktauflösung auf **überlebende**
|
||||
Reste prüfen, nicht nur auf verlorene. Der billigste Hebel ist die Typprüfung, sie fand
|
||||
beide sofort. Wo Zeichenketten statt Typen im Spiel sind — Einstellungsschlüssel,
|
||||
Feature-Namen, Übersetzungs-IDs — reicht sie nicht und es braucht einen Abgleich gegen
|
||||
die jeweilige Registry.
|
||||
|
||||
(Kein Nachtrag in ADR-0022 selbst: Eine angenommene ADR wird nicht editiert.)
|
||||
|
||||
### Die Abnahme, wie dieses Issue sie verlangt
|
||||
|
||||
Gefordert war „verschlüsselte Datei senden, abgelehnte empfangen" — geprüft am
|
||||
|
||||
Reference in New Issue
Block a user