ADR-0023: fremde Historie erklaert von der Git-Hygiene ausnehmen

Der Upstream-Merge holte 70.265 fremde Commits nach ThreadNet-Web; 39 davon
faerbten die Gruppenpruefung als Echtzeit-Stempel rot. Sie verletzen die
Konvention wirklich, konnten ihr aber nie folgen und werden sich nie aendern -
also ein Dauerrot, und ein Dauerrot meldet nichts mehr (#0104).

Neues Feld fremdhistorie in docs/components/*.md. Wo gesetzt, prueft die
Hygiene nur Commits, die von eigenen Identitaeten COMMITTET wurden. Der
Trennschnitt ist gemessen, nicht geraten: 18 eigene Commits, alle von uns
committet; 39 fremde von GitHub/RiotRobot; keine Ueberschneidung. Der Autor
taugt nicht - eigene Commits koennen fremde Autoren tragen (Cherry-Picks).

Der Feldwert ist die Begruendung, kein Schalter - Muster der Quittungen aus
ADR-0020. Die Ausnahme gilt nur, wo sie deklariert ist, nicht global; der Preis
(ein Commit unter voellig unbekannter Identitaet faellt dort durchs Raster)
steht in den Konsequenzen.

Belegt: nach dem Fix 0 offene Befunde bei 20 Quittungen, und in ThreadNet-Web
werden weiterhin 18 Commits geprueft, alle auf 12:00:00.

Ausserdem zurueckgenommen: mein Nachtrag an ADR-0022. Eine angenommene ADR wird
nicht editiert (Regel in der Vorlage) - die Erkenntnis steht jetzt in #0099.
This commit is contained in:
Thore Cimbal
2026-08-19 12:00:00 +00:00
parent 6652125ed3
commit 6731d2a70f
7 changed files with 131 additions and 29 deletions
+24
View File
@@ -21,6 +21,11 @@ zu überspringen, und jede Prüfung bildet einen real passierten Fall ab
5. Git-Hygiene seit 2026-08-07 — Autor- und Committer-Zeit 12:00:00
UTC, kanonische Identität; ausgenommen sind maschinelle Absender
(MASCHINEN, per Adresse — ADR-0009). (F-002/F-003)
Komponenten mit dem Feld `fremdhistorie` prüfen nur Commits, die
von eigenen Identitäten COMMITTET wurden: Seit dem Upstream-Merge
(ADR-0022) trägt ThreadNet-Web 70.265 fremde Commits, die unserer
Konvention nie folgen konnten. Die Ausnahme ist erklärungspflichtig
und gilt nur dort, wo sie deklariert ist — nicht global.
Demo-Modus für den Altbestand (Muster-B-Nachweis, Feldtest F-002):
--hygiene-lokal <klonverzeichnis> [--seit JJJJ-MM-TT]
@@ -244,11 +249,30 @@ def main() -> int:
for slug, meta in sorted(erklaert.items()):
if meta.get("phase") == "external":
continue
# Repos mit erklärter Fremdhistorie (Feld `fremdhistorie`) tragen Commits,
# die nie unserer Konvention folgen konnten, weil sie nicht bei uns
# entstanden sind. Sie zu bemängeln hiesse, einen Alarm dauerhaft rot zu
# faerben, an dem niemand etwas aendern kann - und ein Dauerrot ist kein
# Alarm mehr (#0104). Der Trennschnitt ist der COMMITTER, nicht der Autor:
# gemessen an ThreadNet-Web nach dem Upstream-Merge trennt er exakt (18
# eigene Commits committet von uns, 39 fremde von GitHub/RiotRobot, keine
# Ueberschneidung). Der Autor taugt nicht dafuer - unsere eigenen Commits
# koennen fremde Autoren tragen (Cherry-Picks), und fremde Commits tragen
# Autoren, die wie Menschen aussehen.
#
# ⚠️ Preis: In diesen Repos faellt ein Commit durchs Raster, den jemand von
# uns unter einer voellig unbekannten Identitaet erzeugt - der Fall, den die
# Identitaetspruefung sonst faengt. Deshalb gilt die Ausnahme NUR fuer
# Komponenten, die sie ausdruecklich erklaeren, und nicht global.
nur_eigene_committer = bool(meta.get("fremdhistorie"))
pfad = urllib.parse.quote(f"{GRUPPE}/{slug}", safe="")
for c in api(f"projects/{pfad}/repository/commits"
f"?since={GRENZE}T00:00:00Z&all=true", token):
if (c.get("author_email") or "").lower() in MASCHINEN:
continue
if (nur_eigene_committer
and (c.get("committer_email") or "").lower() not in EIGENE_MAILS):
continue
wer = f"{c.get('author_name')} <{c.get('author_email')}>"
if not zeit_ok(c["authored_date"]) or not zeit_ok(c["committed_date"]):
befunde.append(f"{slug} {c['short_id']}: Echtzeit-Stempel "