# RUNDE MERGE-2 -- die geprüfte Reihenfolge und ihre Begründung

Integrationszweig `mergeline2`, Worktree `/root/mgline2`, abgezweigt von
`main` = 018982a. 26 Zweige, 211 eindeutige Commits.

## Was die Vorprüfung ergeben hat (git merge-tree, merge-base, Blob-Vergleich)

| Zweig | Commits | Merge-Basen | Dateien | Konfliktdateien | davon PNG |
|---|--:|--:|--:|--:|--:|
| kvmfix | 1 | 1 | 1 | 0 | 0 |
| rename-etc | 1 | 1 | 14 | 11 | 8 |
| k-merge2 | 1 | 1 | 10 | 9 | 0 |
| ahci | 7 | 1 | 9 | 2 | 0 |
| poll | 7 | 1 | 14 | 0 | 0 |
| handle | 3 | 1 | 11 | 0 | 0 |
| multiuser | 12 | 1 | 24 | 1 | 0 |
| init | 19 | 1 | 15 | 1 | 0 |
| fsrobust | 8 | 1 | 18 | 3 | 0 |
| serverbuild | 10 | 1 | 40 | 16 | 13 |
| update | 7 | 1 | 20 | 2 | 0 |
| inventory | 3 | 1 | 221 | 26 | 0 |
| sshd | 16 | **2** | 67 | 1 | 0 |
| usbimg | 6 | **2** | 46 | 1 | 0 |
| umlaut2 | 11 | **3** | 132 | 12 | 11 |
| softui | 17 | **2** | 93 | 11 | 11 |
| themestore | 6 | **3** | 134 | 11 | 11 |
| customres | 15 | 1 | 15 | 1 | 0 |
| supersearch | 12 | **3** | 115 | 11 | 11 |
| snip | 6 | **2** | 108 | 12 | 11 |
| a11y | 5 | 1 | 32 | 2 | 0 |
| viewer | 15 | 1 | 49 | 12 | 8 |
| demux | 11 | 1 | 29 | 2 | 0 |
| media1 | 10 | 1 | 19 | 3 | 0 |
| feedback | 8 | **2** | 65 | 1 | 0 |
| certus | 19 | **2** | 134 | 12 | 11 |

Brennpunkte: `kernel/kstate.fi` (21 Zweige), `kernel/kmain.fi` (22),
`test.sh` (22), `kernel/sys.fi` (19), `kernel/wm.fi` + `kernel/user/wlib.fi` (je 8).

## Vier Befunde, die die vorgeschlagene Reihenfolge ändern

1. **`softui` enthält `themestore` vollständig** (`git merge-base --is-ancestor`
   ist wahr). Der Vorschlag nannte softui vor themestore. Umgedreht:
   **themestore vor softui**, sonst wäre themestore hinterher ein leerer Merge
   und seine eigenen Konflikte wären in softui versteckt statt einzeln gelöst.

2. **`certus` enthält `poll` vollständig.** poll steht ohnehin früh — damit ist
   der certus-Merge am Ende um diesen Anteil leichter.

3. **`inventory` ist kein Kernzweig, sondern eine SPDX-/Lizenz-Kehrarbeit.**
   214 seiner 221 Dateien ändern ≤ 3 Zeilen (eine `SPDX-License-Identifier`-Zeile
   an den Kopf). `main` trägt bereits 363 Dateien mit SPDX, `inventory` nur 201 —
   der Zweig ist ÄLTER als die Umbenennungsrunde und führt noch die deutschen
   Dateinamen (`suchen.fi`, `bauen.sh`, `hole-firnc.sh`). Früh gemergt kollidiert
   er mit jedem Folgezweig in **Zeile 1** jeder Datei. Darum: **ganz ans Ende**,
   danach die Kopfzeilen über den fertigen Dateibestand nachziehen.

4. **`serverbuild` ist ein Umbau, kein Anbau**: er zieht 2600 Zeilen Oberfläche
   aus `kmain.fi` nach `kgui.fi` und die vier GUI-Aufrufbereiche aus `sys.fi`
   nach `sysgui.fi`. Genau diese zwei Dateien fassen 22 bzw. 19 der 26 Zweige an.
   Er wird deshalb **an den Anfang der Kerngruppe** gezogen, nicht ans Ende:
   sobald er drin ist, prüft jeder folgende Merge automatisch BEIDE Bauarten
   (GUI und `--gui off`) — das ist die geforderte Regression (b), und sie zwingt
   jede spätere Oberflächenänderung sofort in die richtige Datei, statt am
   Schluss einen einzigen, unüberprüfbaren Großumzug zu verlangen.

## Die festgelegte Reihenfolge

**A — klein und infrastrukturell (Zustand stabilisieren)**
1. `kvmfix` — 1 Commit, 1 Datei, 0 Konflikte
2. `rename-etc` — benennt die vier deutschen /etc-Pfade englisch; muss vor
   allen Zweigen stehen, die /etc-Pfade schreiben
3. `k-merge2` — fs/kmain/kstate/sched/sys, reine Kernarbeit
4. `ahci` — Plattentreiber
5. `poll` — 0 Konflikte, Voraussetzung für sshd
6. `handle` — 0 Konflikte, Handle-Schicht (vor multiuser/fsrobust, die dieselbe
   VFS-Gegend anfassen)

**B — Kern**
7. `serverbuild` (vorgezogen, siehe Befund 4)
8. `multiuser` (nach handle: gemeinsame VFS-Gegend)
9. `init`
10. `fsrobust` (nach multiuser: Rechte vor Robustheit)
11. `update`

**C — Netz/Dienste**
12. `sshd` (poll liegt in A)
13. `usbimg`

**D — Oberfläche/Text**
14. `umlaut2` — der Textdurchgang zuerst; sein Umlauttest bewacht danach jeden
    folgenden Oberflächenzweig
15. `themestore` (vor softui, Befund 1)
16. `softui`
17. `customres`
18. `supersearch`
19. `snip`
20. `a11y` (nach softui: beide fassen wm.fi/wlib.fi an, a11y ist die kleinere
    und feinere Änderung und wird zuletzt eingepasst)

**E — groß und breit**
21. `viewer`
22. `demux`
23. `media1` (vor certus, siehe MEDIA1-Befund)
24. `feedback`
25. `certus`
26. `async` — NACHTRAG vom 30.08.2026 (4 Commits, Spitze e057901, Worktree
    /root/osum-async, zweigt von `handle` ab). Steht hier und nicht früher:
    `poll` ist in `async` bereits hineingemerged, und `poll` liegt bei uns in
    Gruppe A — der Zweig muss also gegen einen Stand gemergt werden, in dem
    poll längst drin ist. Vor `inventory`, damit die SPDX-Kehrarbeit die neuen
    Dateien (kernel/async.fi, kernel/user/aiot.fi, tools/async/run.sh) noch
    mitnehmen kann.
27. `inventory` (Befund 3)

---

## Stand 30.08.2026, 07:40 (Integrationszweig `mergeline2`, HEAD dc8ba8f)

**Drin (16 von 27):** kvmfix, rename-etc, k-merge2, ahci, poll, handle,
serverbuild, multiuser, init, fsrobust, update, sshd, usbimg, umlaut2,
themestore, softui.

**Offen (11):** customres, supersearch, snip, a11y, viewer, demux, media1,
feedback, certus, **async** (Nachtrag), inventory.

### Was beim naechsten Schritt (`customres`) zu tun ist

Der Merge wurde ANGEFANGEN und wieder abgebrochen (`git merge --abort`),
weil er drei Portierungen braucht und keine davon halb gemacht werden
sollte. Die Konflikte sind bekannt:

1. `kernel/kmain.fi` -- customres haengt seine Zeilen in `vmode_stage`
   und `display_hold`; beide stehen seit `serverbuild` in
   `kernel/kgui.fi`. Dazu die neue Funktion `disp_eigen`.
2. `kernel/kmain.fi` importiert auf dem Zweig `dispsave`, und
   `dispsave.anwenden(state)` steht in `kernel_main`. `dispsave` haengt
   an `vmode`, und `vmode` ist eine der elf Grafikdateien, die
   `--gui off` LOESCHT -- der Aufruf muss also durch die Naht
   (`gfx.fi`/`gfx-aus.fi`), so wie es bei `hwdiag` in MERGE-2 13
   gemacht wurde. Sonst laesst sich der Serverkern nicht mehr bauen.
   Der Aufruf selbst steht neben `ab.ab_boot(state)` -- BEIDE behalten.
3. `kernel/sys.fi` -- die `DG_*`-Konstanten und `do_dispget` stehen bei
   uns schon (die Konstanten in sys.fi, die Funktion in sysgui.fi).
   Zu portieren sind nur customres' NEUE Felder und Zweige.
4. `kernel/user/settings.fi` -- DAS IST DIE ARBEIT. customres ist von
   einem Stand VOR der Katalogumstellung abgezweigt und bringt rund
   fuenfundzwanzig fest eingebaute deutsche Zeichenketten mit
   (`l_eig1`, `b_eig`, `b_pruef`, und die dreizehn Saetze in
   `grund_lesen`). Bei uns gilt seit `umlaut2`: `tools/i18n/scan.py`
   muss 0 melden und `tools/i18n/quellen.py` 0 SICHTBARE Umschriften.
   Jede dieser Zeichenketten braucht also einen Schluessel in
   `locale/de/messages` UND `locale/en/messages` und echte Umlaute
   ("Aufloesung" -> "Auflösung", "Hoehe" -> "Höhe", "geprueft" ->
   "geprüft"). Erst danach ist der Zweig gruen zu bekommen.

### Fuer MERGE-3, NICHT ANFASSEN

Zwischen 05:28 und 07:31 am 30.08.2026 sind im Repo elf Zweige entstanden,
die es bei Rundenbeginn noch nicht gab. Der Eigentuemer hat am 30.08.2026
entschieden: **sie gehoeren NICHT in MERGE-2.** Die zugehoerigen Runden
laufen zum Teil noch; ein Merge jetzt wuerde ihnen den Boden wegziehen.
Sie werden als eigener Auftrag MERGE-3 behandelt. Bis dahin bleiben sie
unangetastet -- nicht mergen, nicht rebasen, nicht loeschen.

| Zweig | Commits offen gegen mergeline2 |
|---|--:|
| `ring` | 7 |
| `nvmeq` | 8 |
| `netprofil` | 1 |
| `wlan` | 3 |
| `aml` | 1 |
| `haertung` | 2 |
| `bridge` | 5 |
| `rtl` | 2 |
| `ota` | 1 |
| `hid` | 4 |
| `hda` | 7 |

(Stand 30.08.2026 07:50, gemessen mit `git rev-list --count mergeline2..<zweig>`.)
