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