Files
management/docs/adr/0009-commit-konventionen-und-historien-anonymisierung.md
T
Thore CimbalandClaude Fable 5 70e81e2ff1 feat: slice 2 - all eleven decisions ported to docs/adr
Gate 4, slice 2: decisions/0001-0011 moved via git mv with schema
frontmatter prepended (status and date taken from each body's own
Status line - 0007 stays proposed, its decision is open in #20; bodies
unchanged except relative links gaining one directory level). The old
scheme's README and template retire - their rules already live in
AGENTS.md section 6 and the neckbeard ADR template. Every reference to
decisions/ across the tree retargeted (root files, not-yet-moved
verfahren/hosts/shared files, design doc and session ADR frontmatter).

Verified: validate 0 errors (11 ported + 2 session ADRs + duplicate-id
guard), gen_status --check current with all 13 ADRs listed, drift
check 0 findings, negative test shows a cloned id 0012 firing the
duplicate check.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 12:00:00 +00:00

4.8 KiB

type, id, status, date, supersedes, superseded_by, related
type id status date supersedes superseded_by related
adr 0009 accepted 2026-08-07 null null

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.