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