From 6632ad5a8084c4419374e46d50684bc4973f5191 Mon Sep 17 00:00:00 2001 From: Thore Cimbal Date: Thu, 20 Aug 2026 12:00:00 +0000 Subject: [PATCH] docs(fork): der Anschluss ist vollzogen - Abschnitt 4 war der Zustand davor Abschnitt 4 beschreibt das Repo ohne gemeinsamen Vorfahren. Seit dem Merge am 2026-08-19 (88c4e15) stimmt das nicht mehr. Er bleibt stehen, weil er die Messungen enthaelt, auf denen ADR-0022 beruht - jetzt aber als historisch markiert und mit Verweis nach unten. Neuer Abschnitt: wie ein Upstream-Update heute laeuft (gewoehnlicher Merge), was beim Aufloesen zu pruefen ist, das Typpruefungs-Tor in der CI, und die drei Fallstricke, die beim ersten Mal Zeit gekostet haben - shallow-Grenze, .npmrc im Docker-Kontext, Erstschub auf den Gitea-Spiegel. Der wichtigste Satz darin ist der ueber den umgekehrten Fall: Der Merge meldet, wenn Upstream unsere Zeilen wegschiebt, aber nicht, wenn beide Seiten die Aufloesung ueberleben und nur eine noch Sinn ergibt. Daran starb v0.6.0-rc.2. --- docs/axion1337-fork.md | 67 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/docs/axion1337-fork.md b/docs/axion1337-fork.md index 19b279cc6b..d240749d25 100644 --- a/docs/axion1337-fork.md +++ b/docs/axion1337-fork.md @@ -55,6 +55,11 @@ Beide behoben. ## 4. Merge-Reibung: was ein Upstream-Update wirklich kostet +> ⚠️ **Historisch seit 2026-08-19.** Dieser Abschnitt beschreibt den Zustand *ohne* +> gemeinsamen Vorfahren. Der ist behoben — siehe „Upstream-Update seit dem Anschluss" +> weiter unten. Der Abschnitt bleibt stehen, weil er die Messungen enthält, auf denen +> die Entscheidung beruht (management ADR-0022). + *Arbeitspaket 3 aus ThreadNet-Web#7. Gemessen am 2026-08-06, nicht geschätzt.* ### Die unangenehme Grundlage zuerst @@ -214,3 +219,65 @@ git diff v1.12.17 v1.12.26 -- # was Upstream seither geaendert ha ⚠️ Ein flacher Fetch liefert **keine Historie**: `git merge-base`, `git log` über Upstream und ein Graft-Versuch brauchen `git fetch upstream` ohne `--depth`. + +## Upstream-Update seit dem Anschluss (seit 2026-08-19) + +**Der Fork hängt wieder an der Upstream-Historie.** Am 2026-08-19 wurde `v1.12.26` mit +einem echten Merge-Commit hereingeholt (`88c4e15`, beide Eltern: unser bisheriger +`main` `fa5dcc5` und `c43ef70b` = `v1.12.26`). Entscheidung und Messungen stehen in +management ADR-0022 und #0099. + +Ein Update ist damit ein **gewöhnlicher Merge** — kein Auftragen von Patches mehr: + +```sh +git fetch upstream # ohne --depth, sonst fehlt die Historie +git merge v1.12.27 # oder der gewuenschte Tag +``` + +### Worauf beim Auflösen zu achten ist + +Der Merge meldet jetzt, wenn Upstream eine Datei verschiebt, die wir angefasst haben — +das war der Zweck der Übung, und es hat beim ersten Mal funktioniert (die Umbenennung +`RoomListItemAccessibilityWrapper` → `RoomListItemWrapper` kam als Konflikt). + +⚠️ **Was er NICHT meldet, ist der umgekehrte Fall:** Beide Seiten überleben die +Auflösung, und nur eine ergibt noch Sinn. Genau das brach `v0.6.0-rc.2` in Produktion — +in `RoomListItemViewModel.ts` blieb eine `getValue`-Zeile auf den von Upstream +entfernten Labs-Schalter `feature_room_list_sections` stehen, direkt über der neuen +Zeile mit `RoomList.showSections`. Niemand las sie, sie warf trotzdem — bei jedem +Raumlisteneintrag. + +Nach dem Auflösen deshalb auf **überlebende** Reste prüfen, nicht nur auf verlorene +Zeilen. Der billigste Hebel ist `pnpm -r lint:types`; er fand beide Reste sofort. Wo +Zeichenketten statt Typen im Spiel sind — Einstellungsschlüssel, Feature-Namen, +Übersetzungs-IDs — reicht das nicht, dort braucht es einen Abgleich gegen die +jeweilige Registry. + +### Das Tor in der CI + +`typecheck` in `.gitlab-ci.yml` prüft `pnpm -r lint:types` über den ganzen Baum; +`docker_web`, `desktop_linux` und `desktop_windows` führen ihn als `needs`. **Kein +Artefakt entsteht ohne bestandene Typprüfung.** + +Maßstab ist „kein Fehler außerhalb von `node_modules`", nicht „`tsc` sauber": Upstream +v1.12.26 ist selbst nicht typrein — `matrix-js-sdk@42.2.0` wirft drei Fehler in der +eigenen Quelle (`skipLibCheck` deckt nur `.d.ts` ab), nachgeprüft in einem sauberen +v1.12.26-Checkout. Fällt das bei einem Upstream-Wechsel weg, verschärft sich der Job +von allein. + +Der Job existiert, weil `web` **nur baut**: webpack entfernt Typen, ohne sie zu prüfen, +und ein unbekannter Einstellungsschlüssel ist zur Bauzeit bloß ein String. `tsc` meldete +den rc.2-Fehler die ganze Zeit — gefragt hatte ihn niemand. + +### Fallstricke, die beim ersten Mal Zeit gekostet haben + +- **`--depth=1` geholte Tags** tragen eine `.git/shallow`-Grenze. Jeder Merge-Versuch + scheitert dann mit „refusing to merge unrelated histories", was wie ein + Grundproblem aussieht und keines ist. `git fetch --unshallow upstream` löst es. +- **`.npmrc` muss im Docker-Build-Kontext liegen**, sonst löst pnpm `@sorb/*` gegen + npmjs auf. Unter pnpm 10 fiel das nicht auf, weil `--frozen-lockfile` die gepinnte + Tarball-URL nahm; pnpm 11 prüft mit `minimumReleaseAgeStrict` jeden Eintrag und löst + wieder auf (management #0055). +- **Der Gitea-Spiegel** trägt nach dem Merge 70.000 fremde Commits. Der Erstschub + scheitert, wenn das Ziel-Repo nicht sauber gepackt ist — erst dessen Zustand messen + (`count-objects -vH`, freier Platz), dann übertragen (#0099).