Files
management/docs/adr/0009-commit-konventionen-und-historien-anonymisierung.md
Thore CimbalandClaude Fable 5 92b448fe30 feat: slice 3 - wiki, sources and AARs in their neckbeard homes
Gate 4, slice 3: verfahren/, hosts/, vision/ and shared/ moved via git
mv - six AARs to docs/aar/ (four harvested by the 2026-08-09 retro,
two open), procedures and host knowledge to docs/wiki/ (admin,
deployment, architecture, new area vision), the retro protocol and the
commit mapping table to docs/sources/ (protokolle/, migration/). New:
the wiki index linking every page, and the mirror-topology page
carrying the why-two-places reasoning verbatim from the old CLAUDE.md
(F-013 preserved). All moved-path references retargeted; the link
checker drove the sweep to zero.

pruefe_prosa.py added (pattern C+D): SHA citations resolve via repo,
mapping table, optional component clones or a curated exemption list
(documented dead Gitea-force-push commits, a vendor-repo tag, an
Authentik uid that is hex but no git SHA, the external neckbeard
reference); wiki task prose without an issue reference errors, with a
visible pragma for deliberate checklists; the dead-tracker denylist
now covers every mirrored repo's retired Gitea tracker (F-005) - two
links re-verified against live GitLab titles and retargeted, five
defused into honest historical citations.

Verified: validate 0/0, gen_status --check current, drift 0. Demo on
the pre-migration state fires 6 findings (3 orphaned SHAs, 3 task
blocks); on the current tree exactly the 3 F-004 task blocks remain -
they turn green in slice 4 when the issues exist, which is why
pruefe_prosa joins CI only then.

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.