Files
management/decisions/0009-commit-konventionen-und-historien-anonymisierung.md
T
Thore Cimbal 0fde69a6f2 docs: first retro, and the ADR the history rewrite should have had
Retro 2026-08-09, the first one under the framework. Main finding: six silent failures in nine days - a green pipeline that uploaded nothing, a broken npm package, a blueprint rejected on every run, a working copy tracking the forbidden remote, empty pipelines going red for nothing, and a release build that nearly overwrote a published image. None was found by monitoring; four surfaced by accident while looking for something else.

ADR-0009 documents the commit conventions and the retroactive anonymisation of 251 commits. It is filed after the fact, which is exactly the mistake the ADR duty exists to prevent - stated in the ADR rather than smoothed over.

Also recorded: assigning status:next and reassigning milestones are forbidden to a session acting alone; both happened here in the refinement with sorb, so the rule stands unweakened.
2026-08-09 12:00:00 +00:00

4.6 KiB

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. 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.
  • 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.