--- type: adr id: "0009" status: accepted date: 2026-08-07 supersedes: null superseded_by: null related: [] --- # 0009 — Commit-Konventionen und rückwirkende Anonymisierung der Historie **Status:** akzeptiert · **Datum:** 2026-08-07 (Regel) / 2026-08-09 (Durchführung) · **Entscheider:** sorb > Nachgetragen am 2026-08-09 in der [Retro](../../verfahren/retro/2026-08-09.md). Die > Entscheidung war getroffen und ausgeführt, bevor sie als ADR vorlag — das ist > genau der Fehler, den die ADR-Pflicht verhindern soll, und wird hier benannt > statt geglättet. ## Kontext Commit-Zeitstempel geben Arbeitszeiten preis. Bei einem Ein-Personen-Projekt mit öffentlichem Gitea-Spiegel heißt das: Jeder, der die Repos liest, kann ablesen, an welchen Abenden und bis wann gearbeitet wurde. Vor der Umstellung standen die Commits eines Tages typischerweise zwischen 17:00 und 23:00 — ein Muster, das nichts mit der Software zu tun hat. Dazu kam eine uneinheitliche Sprache in den Commit-Nachrichten (Deutsch und Englisch gemischt) und drei Autoren-Identitäten für dieselbe Person. ## Entscheidung **Regel ab 2026-08-07**, gültig für alle Repos der Gruppe `axion1337.chat` und die ThreadNet-Dienste: - Nachrichten auf **Englisch**, Conventional-Commit-Stil - Autor- **und** Committer-Datum auf **12:00:00 UTC des laufenden Tages** **Rückwirkend angewandt am 2026-08-09** auf **251 Commits** — alles aus dieser Zusammenarbeit, nicht die davor liegende Historie: | Repo | umgeschrieben | Grenze | |---|---|---| | gitops | 117 von 264 | ab 2026-07-27 | | management | 78 von 78 | vollständig | | ThreadNet-Web | 47 von 50 | ab 2026-07-28 | | threadnet-call | 9 von 9 | vollständig | Dabei wurden 17 Tags mit umgezogen und die Autoren-Identitäten vereinheitlicht — **mit Ausnahme des `turn-secret-rotation`-Bots**, dessen Commits maschinell entstehen und deren Zuschreibung an einen Menschen falsch wäre. Zeitstempel wurden auf **12:00 UTC des jeweils eigenen Tages** gesetzt, nicht auf ein einheitliches Datum: Der Tag bleibt damit als Information erhalten, die Uhrzeit verschwindet. ## Konsequenzen - **Der Inhalt ist unverändert.** Alle Trees sind bitgleich, Nachrichten und Merge-Struktur erhalten — geprüft über alle 251 Paare. - **Alle SHAs im Bereich sind neu.** Verweise in Issues, Doku und Commit-Texten zeigen ins Leere. Die Doku wurde nachgezogen (12 Stellen); für alles andere gibt es die dauerhafte Zuordnungstabelle [`shared/commit-zuordnung-2026-08-07.md`](../../shared/commit-zuordnung-2026-08-07.md). - **Issue-Kommentare wurden bewusst NICHT umgeschrieben.** Eine Tabelle nachzuschlagen ist zumutbar; nachträglich zu ändern, was jemand geschrieben hat, beschädigt dieselbe Nachvollziehbarkeit ein zweites Mal. - **Container-Images verweisen auf Commits, die es nicht mehr gibt.** Sie laufen unverändert; ihre Herkunft ist nur über die Tabelle auflösbar. - **Branch- und Tag-Schutz mussten vorübergehend gelockert werden.** Beide sind wieder aktiv. ⚠️ **Der Nutzen ist begrenzt, und das gehört zur Entscheidung.** Geschützt ist allein die Git-Historie. Push-Zeiten, Issue- und Kommentar-Zeitstempel, Pipeline-Läufe und Paket-Veröffentlichungen tragen weiterhin die echte Uhrzeit, liegen im selben GitLab und teilweise auf dem öffentlichen Spiegel — und sind **feiner** als Commit-Zeiten, weil es mehr davon gibt. Wer wirklich kein Muster ableitbar haben will, muss dort ansetzen. Diese ADR löst das nicht. ## Was dabei fast schiefging Das Force-Push der umgezogenen Tags hat in ThreadNet-Web **drei Release-Pipelines neu gestartet**. Ohne Sperre hätte `docker_web` das veröffentlichte Image `v0.4.0` aus altem Quellcode gegen heutige Basis-Images neu gebaut und überschrieben. Verhindert hat es allein, dass die geschützten Registry-Variablen in diesem Fenster nicht verfügbar waren — **Zufall, nicht Planung**. Behoben in ThreadNet-Web#14; die Sperre ist seit `3cb43f5` scharf. ## Verworfene Alternativen - **Nur vorwärts, Historie unangetastet.** War die Empfehlung: kein Risiko, keine toten Verweise, und der Nutzen des Rewrites ist durch die Plattform-Zeitstempel ohnehin begrenzt. sorb hat sich bewusst dagegen entschieden — die Git-Historie ist der Teil, der geklont und weitergegeben wird. - **Alles umschreiben, auch die Vor-Historie.** Hätte fremde Autorenschaft angefasst (`Scrublord@Mac.Bad`, 135 Commits aus der Zeit vor dieser Zusammenarbeit) und den Nutzen nicht erhöht. - **Ein einheitliches Datum für alle Commits.** Hätte die zeitliche Reihenfolge unlesbar gemacht, ohne mehr zu schützen als der Tagesstempel. - **Auch die Commit-Nachrichten rückwirkend übersetzen.** 251 Nachrichten neu zu formulieren hieße, die darin festgehaltenen Begründungen umzuschreiben — Inhaltsverlust für einen Stilgewinn, den nur die Vergangenheit hätte.