# OFFEN — die eine Liste, was bei OrientOS/Osum noch fehlt

**Stand 12.09.2026 (nach den Runden ECHTHARDWARE-3…6, MERGE-11, VEKTOR,
BRUECKE, WASM, fUi 31/32, ENGLISCH, ABBILD, BELEG).**
Geprüft gegen `/root/osum-merge11`, Zweig `main`, HEAD `3ce22f3`.

*Vorheriger Stand: 09.09.2026 gegen `/root/osum-merge9` `faa6a07`, 102 Punkte,
20 P1. Die Sicherung davon liegt als `.OFFEN.md.bak-vor-12092026`.*

**Diese Datei ist die Wahrheit.** Nicht die ROADMAP vom 28.08., nicht die
Rundenprotokolle. Wo eine ältere Quelle etwas anderes sagt, steht der Grund
in der Spalte *Beleg/Quelle* oder in `INVENTAR.md` Abschnitt 10.

> **NACHTRAG 13.09. — die Grundlinie ist repariert.** Die drei P1-Punkte
> dieser Prüfung (`A-014`, `A-015`, `A-016`) sind auf dem Zweig `grundlinie`
> behoben und **einzeln seriell nachgemessen**. `protokoll`, `bridge`, `posix`,
> `fsrobust`, `k14` und `k16` sind **vollständig grün**; `fas` bindet wieder
> alle **135** Programme; `memmap.py` läuft durch. Dabei kamen zwei weitere
> Folgeschäden der Englisch-Umstellung heraus (`tools/protocol/run.sh` baute
> aus umbenannten Quellen, `tools/bridge/*` suchte `libc` im falschen Baum) —
> beide gefixt. Die Abschnitte `customres`, `powermon` und `theme` bauen jetzt
> überhaupt erst und legen dadurch **echte, vorher verdeckte** Sachfehler offen:
> neu als `A-017` bis `A-020` aufgenommen. Details in Abschnitt 10.
>
> **Offen und als Nächstes fällig:** ein neuer Volllauf gegen `grundlinie` —
> die Zahl „40 grün / 34 rot" vom 12.09. enthält noch die behobenen Ursachen.


## Was diese Prüfung geändert hat

Der Stand vom 09.09. kannte drei Runden nicht, die seither viel abgeräumt
haben — vor allem den **Merge des Zweigs `explorer2`** (Commit `71bbc63`)
und die **Runde VEKTOR/AVX**. **21 Punkte sind nach `ERLEDIGT.md` gewandert**,
darunter fünf P1. Neu aufgenommen sind **6 Punkte**, davon drei aus dieser
Prüfung selbst (`A-014`, `A-015`, `A-016`) und einer aus der
Englisch-Umstellung (`K-015`).

**Die wichtigste Einzelkorrektur:** `P-018` behauptete, Umbenennen im
Dateimanager zerstöre Daten. **Das ist widerlegt** — gemessen, nicht nur
gelesen. Siehe unten unter „Die eine Frage, die dringend war".

**Die zweite Lehre dieser Prüfung:** die Grundlinie sieht schlechter aus,
als sie ist. Von den 25 roten Abschnitten des Volllaufs gehen die meisten
auf **zwei** Ursachen zurück (`A-014`, `A-016`) — ein abgestürztes
Prüfskript und eine Profilwahl, die in den Läufern nicht nachgezogen wurde.
Beides ist Messaufbau, nicht Kernel.

---

## Wie man sie liest

- **ID** ist stabil. In künftigen Runden immer die ID zitieren (`K-003`, `P-014`, …).
  Vergebene Präfixe: `K` Kernel/Treiber · `N` Netz · `G` Grafik/Anzeige ·
  `S` Framework/Systembus · `P` Programme · `D` Design/Oberfläche ·
  `B` Blech/echte Hardware · `A` Bau+Abnahme · `O` Store+OTA · `F` Firn/Fremd
- **Status** — `offen` (nichts da) · `teilweise` (Teil gebaut, Rest benannt) ·
  `unklar` (nicht entscheidbar, Grund steht dabei) · `erledigt` steht **nicht
  hier**, sondern in `ERLEDIGT.md`
- **Prio** — **P1** ohne das kein benutzbares OS · **P2** schmerzhaft ·
  **P3** Kür
- **Runde geplant** — Vorschlag, kein Termin

---

## DIE EINE FRAGE, DIE DRINGEND WAR: zerstört Umbenennen Daten?

**Nein. `P-018` ist widerlegt und wandert nach `ERLEDIGT.md`.**

Die Meldung stammte aus dem Audit vom 09.09. gegen `merge9`. Der Zweig
`explorer2` ist seither gemergt (`71bbc63`), und damit ist der beschriebene
Weg aus dem Baum verschwunden.

**Der Quelltext, Glied für Glied:**

| Stelle | Was dort steht |
|---|---|
| `kernel/user/explorer.fi:1554` | `rename_do` ruft **nur** `expakt.umbenennen` |
| `kernel/user/expakt.fi:596` | `umbenennen` ruft **`io.rename`** — ein Aufruf |
| `lib/libc/io.fi:335` | `rename` = `sys2(SYS_RENAME, alt, neu)` |
| `kernel/sys.fi:1045` / `:2421` | `SYS_RENAME = 82` → `do_rename` |
| `kernel/fs.fi:2443` | `rename_path`: `dir_add` + `dir_remove` — **der Verzeichniseintrag wird umgehängt, die Oktette werden nicht angefasst** |

`unlink` kommt in `explorer.fi` **einmal** vor, in einem Kommentar (Zeile 19).
Die alte Kopierschleife ist weg; `tools/explorer2/run.sh` prüft das eigens
(„Punkt 2: die alte Funktion umbenennen() ist weg", „Punkt 2: explorer.fi
fasst keine Datei mehr selbst an").

**Und gemessen, an einem echten Lauf** (`bash tools/ofs3/run.sh`, 12.09.2026,
KVM, Datei *und* Verzeichnis):

```
OK    rename() kam ohne Fehler zurueck: 0
OK    UMBENANNT UND NICHT KOPIERT: dieselbe Inode vor und nach rename (21)
OFS3: 75 bestanden, 0 gescheitert
```

Dieselbe Inodenummer vorher und nachher ist genau der Unterschied zwischen
„umgehängt" und „kopiert und gelöscht". Ein Kopierweg müsste eine neue Inode
anlegen.

**Zwei Eigenschaften, die besser sind als vorher behauptet:** `rename_path`
gibt bei belegtem Ziel `EEXIST` zurück statt still zu überschreiben
(`fs.fi:2465`), und bei einem Verzeichnis, das das Elternverzeichnis wechselt,
wird `..` nachgezogen (`fs.fi:2478-2481`). Liegt am Ziel schon etwas, kommt
der Konfliktdialog mit vier Antworten.

**Kein Fix nötig, keine Freigabe nötig.**

---

## 0. DIE P1-LISTE AUF EINEN BLICK (11 Punkte)

Ohne diese elf ist OrientOS kein benutzbares Betriebssystem:

| ID | Punkt |
|---|---|
| `P-001` | Installation auf Platte — der Stick läuft aus dem RAM, nichts bleibt |
| `P-002` | Grafischer Login / Sperrbildschirm — der Schreibtisch ist `root` |
| `P-003` | Ausschalten/Neustart aus der Oberfläche |
| `P-005` | USB-Stick zur Laufzeit einbinden/auswerfen |
| `P-006` | Geräte-/Hotplug-Manager — Voraussetzung für `P-005` |
| `S-002` | Drag-and-Drop-**Ziel** — Ablegen wird nirgends angenommen |
| `B-004` | Justins Blech-Fixes auf seinem Rechner nachmessen |
| `O-004` | Der Kern ist nicht Teil des A/B-Wechsels |

**Aus der alten P1-Liste gefallen** (jetzt in `ERLEDIGT.md`): `B-001`, `B-002`,
`K-001`, `N-002`, `S-001`, `P-004`, `P-018`, `G-001`, `G-002`, `G-003`, `G-005`,
`A-001`, `A-008`, **`A-014`, `A-015`, `A-016`**.

### RUNDE GRUNDLINIE (13.09., Zweig `grundlinie`) — die drei P1-Punkte sind erledigt

`A-014`, `A-015` und `A-016` waren **neu und P1**, weil ohne sie keine
verlässliche Grundlinie existierte. Sie sind behoben und **einzeln seriell
nachgemessen** (nicht im Volllauf, um Lastflakes auszuschließen):

| Abschnitt | vorher | nachher |
|---|---|---|
| `protokoll` | 34 / **25 rot** | **55 / 0** |
| `bridge` | **Bau gescheitert** (0/1) | **113 / 0** |
| `posix` | 149 / 1 | **150 / 0** |
| `fsrobust` | 25 / 6 | **30 / 0** |
| `k14` | 134 / 18 | **152 / 0** |
| `k16` | 67 / 2, **117** statt 135 Programme | **69 / 0**, `fas` bindet **135** |
| `display` | 141 / 4 | 142 / 3 |
| `customres` | **Bau gescheitert** (starb nach ~20 Zusagen) | 123 / 12 |
| `powermon` | 24 / **92** | 62 / 54 |
| `theme` | **Bau gescheitert** | 42 / 55 |

**Sechs Abschnitte sind jetzt vollständig grün.** `python3 tools/kernel/memmap.py`
läuft durch (`A-014`), `fas` bindet wieder alle **135** Programme (`A-015`), und
die Meldung „input file is the same as output file" kommt in **keinem** Lauf mehr
vor (`A-016`).

**Wichtig zur Lesart der drei Abschnitte mit vielen roten Zusagen**
(`customres`, `powermon`, `theme`): die Zahlen sind **nicht** schlechter geworden.
Vorher **starb der Bau**, die Läufe kamen über die Bauphase nicht hinaus und die
Zusagen wurden gar nicht erst geprüft — `.test-work/theme.log` war 1003 Oktette
lang. Jetzt bauen sie und legen **echte, vorher verdeckte Sachfehler** offen.
`powermon` ging dabei von **92** auf **54** rote Zusagen zurück.

Die verbleibenden roten Zusagen gehören **nicht** zu `A-014/015/016` und sind
als eigene Punkte zu führen (siehe `A-017` bis `A-019`).

---

## 1. KERNEL / TREIBER (K)

| ID | Punkt | Status | Prio | Beleg/Quelle | Runde geplant |
|---|---|---|---|---|---|
| ~~K-001~~ | ~~XSAVE/XCR0 für Ring 3~~ — **ERLEDIGT Runde VEKTOR/AVX** | **erledigt** | P1 | `tools/avx/run.sh` **32/0**, `cr4=0x340620`, `XCR0=0x7` | VEKTOR |
| K-002 | **Speicherdruck/OOM** — keine OOM-Auswahl, keine Reserve, keine Auslagerung. Bei vollem RAM friert das System ein | offen | P2 | ROADMAP A10; `grep oom kernel/` → nur Fremdtreffer | DRUCK |
| K-003 | **ACPI: nur Tabellen + S5** — kein voller AML-Interpreter, keine ACPI-Ereignisse (Deckel, Einschalttaste). `kernel/acpi.fi` 634 Z., Zweig `aml` ungemergt | teilweise | P2 | `kernel/acpi.fi` 634 Z. (nachgezählt 12.09.); Zweig `aml` | AML |
| K-004 | **Standby S3** — jeder Treiber bräuchte Anhalten/Wiederaufnehmen. Vorschlag steht: **S5 + Ruhezustand auf Platte statt S3** | offen | P3 | ROADMAP Block G | — |
| K-005 | **CPU-Frequenz / C-States** — `kernel/batt.fi` 616 Z. liest Akku, aber keine Frequenzsteuerung, kein Dimmen | teilweise | P2 | ROADMAP C6; `batt.fi` 616 Z. (12.09.) | ENERGIE |
| K-006 | **Bluetooth** — HCI, L2CAP, SDP, Paarung, Profile (HID, A2DP/SBC). Nichts vorhanden | offen | P3 | ROADMAP Block G | — |
| K-007 | **Kamera (UVC über xHCI)** | offen | P3 | ROADMAP Block G | — |
| K-008 | **Drucker** — billigster Weg IPP-Everywhere über Netz, treiberlos | offen | P3 | ROADMAP Block G | — |
| K-009 | **Rückverfolgung ist ein Stapelscan**, kein Abschreiten der Rahmenzeiger. Bindeskript wirft `.eh_frame` weg | teilweise | P3 | `STATUS-PROTOKOLL.md` §"Offene Kanten" | — |
| ~~K-010~~ | ~~`/proc/klog` passt nicht~~ — **ERLEDIGT.** `/dev/klog` hat keine Grenze | **erledigt** | P3 | `kernel/procfs.fi:125` | — |
| K-011 | **Bericht bei Kernel-Panik ist ein Versuch, keine Zusage** | teilweise | P2 | `STATUS-PROTOKOLL.md` | — |
| ~~**K-016**~~ | ~~ext4 nicht lesbar~~ — **ERLEDIGT 14.09.2026, Zweig `fremdfs`, auf `main`.** `kernel/ext4.fi` (~1240 Z.) lesend: Superblock, Blockgruppen, Inodes, Extent-Baeume, htree-Verzeichnisse, Symlinks (inline und Block), 64-Bit. Pruefung: der Wirt legt den Baum mit `mkfs.ext4`/`debugfs` an und merkt sich jede SHA-256, Osum liest und hasht **selbst** — alle stimmen. `--ohne-ext4` nimmt ihn aus dem Abbild (−50.400 Oktette). Schreiben bleibt bewusst aus (`OP_READONLY`) | **erledigt** | P2 | `docs/RUNDE-FREMDFS.md`; `tools/fremdfs/run.sh` **131/0** | FREMDFS |
| ~~**K-017**~~ | ~~NTFS nicht lesbar~~ — **ERLEDIGT 14.09.2026, Zweig `fremdfs`, auf `main`.** `kernel/ntfs.fi` (~1390 Z.) lesend: Bootsektor, `$MFT`, Fixups, residente und nichtresidente Attribute, Datenlaeufe, `$I30`-Indizes, lange Namen. Gegenproben: zerstoerte Kennung wird abgelehnt statt zu haengen; `--ohne-ntfs` wirkt einzeln. Nur lesend | **erledigt** | P2 | `docs/RUNDE-FREMDFS.md` | FREMDFS |
| K-012 | **`smp`-Gegenprobe unzuverlässig** — misst über 4 Läufe 5/0/6/0. Der Test ist selbst instabil | offen | P2 | `STATUS-MERGE9.md` §3 | GRUNDLINIE |
| K-013 | **`kernel/fs.fi` Kommentar veraltet** ("4096 Blöcke = 2 MB je Platte") — seit OFS v3 falsch, gemessen 128 GiB | offen | P3 | `docs/OFS-LIMITS.md`; Widerspruch W10 | Aufräumen |
| K-014 | **Treiber-Nachladen: nur Prototyp** — kein Produktivweg, keine Signaturpflicht für Module | teilweise | P3 | `docs/MODUL-BEFUND.md`, `docs/RUNDE-MODUL.md` | — |

---

## 2. NETZ (N)

| ID | Punkt | Status | Prio | Beleg/Quelle | Runde geplant |
|---|---|---|---|---|---|
| ~~N-001~~ | ~~DNS-Resolver fehlt~~ — **ERLEDIGT.** `dhcp.fi:454` schreibt `/etc/resolv.conf` | **erledigt** | P2 | `BEFUND-ECHTHARDWARE-5.md` §I: `host -v example.com` → 172.66.147.243, **ms 11** | BETRIEB |
| ~~N-002~~ | ~~Rundruf hängt an ARP~~ — **ERLEDIGT als Flicken** | **erledigt** | P1 | `vendor/firn/patches/0001-rundruf-ohne-arp.patch`; `stack.fi:560` | STICK |
| N-003 | **NTP/SNTP fehlt** — Maschine mit leerer Knopfzelle hält jedes gültige Zertifikat für ungültig (Henne-Ei). ~120 Zeilen, 48-Oktett-UDP-Paket | offen | P2 | `grep -i ntp kernel/user/` = 0 einschlägige Treffer (12.09.) | ZEIT |
| N-004 | **Zeitzonen-Datenbank fehlt** — nur fester Versatz (`tz=`), keine Sommerzeitregeln, keine Ortswahl. `kernel/time.fi:380` nimmt die Zahl entgegen und sagt selbst, dass er nicht raten will | offen | P2 | `kernel/time.fi:375-408` | ZEIT |
| N-005 | **WLAN: kein Funktreiber** — Rahmen, Profile und MAC-Stufen stehen (`lib/wlan/` mit 10 Dateien), aber **Osum verbindet sich mit keinem WLAN**. Fehlt: Firmware laden, Suchlauf, WPA2/WPA3-Handschlag, Regulierungsdomäne, je Chipfamilie ein Treiber. In QEMU nicht messbar | teilweise | P2 | `docs/WLAN-BEFUND.md`; `lib/wlan/` (12.09.) | XL, eigenes Teilprojekt |
| N-006 | **`SO_KEEPALIVE` tut nichts** — `setsockopt` wird angenommen, wirkt aber nicht | teilweise | P3 | `docs/ROADMAP-UPDATE.md` B1 | — |
| N-007 | **TLS-Schlüsselerneuerung ungemessen** — `tls.fi` kennt `HS_KEY_UPDATE`, ob sie über Stunden trägt, ist nicht gemessen | offen | P3 | `docs/ROADMAP-UPDATE.md` B1 | — |
| N-008 | **Kein SMB / Netzwerkfreigaben** | offen | P3 | Basic-Needs 09.09. | — |
| N-009 | **Wurzelzertifikate altern** — `/etc/ssl/roots.pem` ist ins Abbild gebacken, kein Erneuerungsweg | offen | P2 | `tools/usbimg/build.sh:718` | nach O-001 |

---

## 3. GRAFIK / ANZEIGE (G)

| ID | Punkt | Status | Prio | Beleg/Quelle | Runde geplant |
|---|---|---|---|---|---|
| ~~G-001~~ | ~~Fenstergröße per Maus ändern~~ — **ERLEDIGT ECHTHARDWARE-3** | **erledigt** | P1 | `wm.fi` `on_mouse`; BEFUND EH-3 §4 C4 | ECHTHARDWARE-3 |
| ~~G-002~~ | ~~Kontrollzentrum öffnet kein Panel~~ — **ERLEDIGT ECHTHARDWARE-3, am Bild bestätigt 12.09.** | **erledigt** | P1 | `hell-05-kontrollzentrum.png`, `dunkel-05-kontrollzentrum.png` in `/srv/store/belege/orientos-abbild-2/` | ECHTHARDWARE-3 |
| ~~G-003~~ | ~~Strg+N öffnet keinen Dialog~~ — **ERLEDIGT EXPLORER-2.** Es fehlte die Taste, nicht der Dialog | **erledigt** | P1 | `explorer.fi:1763` `wlib.KEY_CTRL_N` → `dlg_open`; `wlib.fi:538` `KEY_CTRL_N=0x131` | EXPLORER-2 |
| ~~G-004~~ | ~~F-Tasten fehlen in `kbd.fi`~~ — **ERLEDIGT EXPLORER-2** | **erledigt** | P2 | `kbd.fi:414` (0x3B..0x44 → `ESC[n~`), F11/F12 `:444`/`:456` | EXPLORER-2 |
| ~~G-005~~ | ~~STRG+Buchstabe kommt als Steueroktett an~~ — **ERLEDIGT EXPLORER-2.** Genau die zwei Kollisionen (Strg+H↔Rückschritt, Strg+N↔Pfeil hoch) gehen als `ESC[n;5~`, die anderen 24 bleiben Steueroktette | **erledigt** | P1 | `kbd.fi:506-541` | EXPLORER-2 |
| G-006 | **Kein Radius für undekorierte Fenster** — `F_NODECO`-Fenster (Schreibtisch, Taskleiste, wmshell, Kontrollzentrum) laufen durch einen reinen Blit-Pfad und bekommen **nie** einen Radius | teilweise | P2 | `wm.fi:2260`, `:287` | DESIGN-3 |
| G-007 | **EDID/mehrere Monitore/Skalierung** — EDID wird gelesen, aber kein Mehrschirmbetrieb, keine freie Skalierung | teilweise | P2 | ROADMAP C5, `BEFUND-ECHTHARDWARE-1.md` §0 | SCHIRM-2 |
| G-008 | **Kein echtes Vsync ohne GPU-Treiber** — Tearing bleibt eingeplant | teilweise | P3 | ROADMAP A13/Block F; `STATUS-VSYNC.md` | — |
| G-009 | **Schrift: Hinting/Unterschneidung/Fallback-Kette** — Rasterung da, aber keine Fallback-Kette für fehlende Glyphen, kein Unicode-Zeilenumbruch nach UAX #14. *Teilentlastung:* fUi `e7cb0ec8` rechnet Textbreiten seit 12.09. über **eine** Stelle (`advance_of`) statt in drei Kopien | teilweise | P2 | ROADMAP D4; `orientos-abbild-2/BEFUND.md` §(c) | SCHRIFT |
| G-010 | **Text wird abgeschnitten** — Terminal zeigte "USB … KEIN" abgeschnitten, Titelzeile überlappte (uiscale 1). **Teilweise erledigt:** die Blase über der Uhr weicht jetzt aus (gemessen: alt `x 1140..1215` überlappt die Uhr ab 1205, neu `x 1114..1189`, 16 Punkte Luft), und EXPLORER-2 misst `cut 0` in 13 Bildern. Der ursprüngliche Terminal-Fall ist **nicht** neu nachgemessen | teilweise | P2 | `orientos-abbild-2/BEFUND.md` §(b); `STATUS-EXPLORER2.md` §2 | OBERFLÄCHE-3 |
| **G-012** | **NEU (14.09.): kein echter GPU-Treiber, kein OpenGL/Vulkan.** Seit 14.09. gibt es **virtio-gpu** (`kernel/vgpu.fi`, 1.186 Z., reissfrei gemessen) — virtuelles Geraet, richtiger erster Schritt, aber kein Blechtreiber. 3D laeuft in Software (`kernel/r3dsoft.fi`). Ohne Vulkan sind Spiele und eine beschleunigte Oberflaeche auf echter Hardware aus. Teuer, und erst **nach** `F-007`/`F-008` sinnvoll | teilweise | P2 | `docs/VIRTIOGPU.md`; `KOMPATIBILITAET.md` §2 | — |
| ~~G-011~~ | ~~Werkzeugleiste ohne Symbole~~ — **ERLEDIGT EXPLORER-2** | **erledigt** | P2 | `tools/explorer2/run.sh`: „die Textzeichen < > ^ sind weg", „ruft icon_button(NAV_BACK)" | EXPLORER-2 |

---

## 4. FRAMEWORK / SYSTEMBUS (S)

| ID | Punkt | Status | Prio | Beleg/Quelle | Runde geplant |
|---|---|---|---|---|---|
| ~~S-001~~ | ~~Zwischenablage nicht Ende-zu-Ende~~ — **ERLEDIGT EXPLORER-2.** Jetzt kopieren **drei** Programme wirklich voneinander | **erledigt** | P1 | `edit.fi:1138/1151`, `sh.fi:1088/1096`, `explorer.fi:2497`; `explorer: clip n=8` / `paste n=7 rc=0` | EXPLORER-2 |
| S-002 | **Drag-and-Drop: kein Ziel** — `drag_put` (Quelle) existiert, und `drag_take`/`drag_an`/`drag_drop` stehen inzwischen in `wlib` (`:7383-7393`) und `ulib` (`:943-966`). **Genommen wird nur im Editor** (`edit.fi:1421`); der Dateimanager hat weiterhin **kein** Drop-Ziel (`explorer.fi:2218` nennt `drag_take` nur im Kommentar) | teilweise | **P1** | `wlib.fi:7383`, `edit.fi:1421`, `explorer.fi:2218` | CLIP-2 |
| S-003 | **Bus kann nicht blockieren** — `RECV` gibt sofort `-5`; wer warten will, gibt ab und fragt wieder | teilweise | P2 | `STATUS-SYSTEMBUS.md` §Offen; `kernel/bus.fi` | BUS-2 |
| S-004 | **Verzögerte Übergabe von keinem Programm benutzt** — `OFFER`/`FILL`/`-6` ist gebaut, aber tot | teilweise | P2 | `STATUS-SYSTEMBUS.md` §Offen | CLIP-2 |
| S-005 | **`clipdemo` tut nichts** — als Wort auf der Befehlszeile vorgesehen, leer. *Bestätigt 12.09.: `grep clipdemo` findet im Baum nichts* | offen | P3 | `grep -rn clipdemo kernel/user/ tools/` = 0 | — |
| S-006 | **Keine Toast-Benachrichtigungen** — der Unterbau steht (`noti_post/count/new/take` in `wlib.fi:167`, Zähler in `taskbar.fi:2226-2236`), aber es gibt **keine sichtbare Einblendung mit Verlauf** | teilweise | P2 | `taskbar.fi:2226`; `wlib.fi:167` | NOTI |
| S-007 | **Barrierefreiheitsbaum nicht gemergt** — Zweig `a11y` existiert, `grep a11y kernel/user/` = **0** (12.09. nachgemessen) | teilweise | P2 | `/root/osum-a11y/STATUS-A11Y.md` | A11Y-MERGE |
| S-008 | **Barrierefreiheit Bedienung** — Skalierung, Lupe, hoher Kontrast, Tastaturbedienung, Einrastfunktion | offen | P3 | ROADMAP D10 | nach S-007 |
| S-009 | **Protokollansicht ohne Oberfläche** — `wlib` liefert sie, GUI fehlt | teilweise | P3 | `STATUS-PROTOKOLL.md` §Offene Kanten | — |
| S-010 | **Programm-Sandbox mit Berechtigungen** — passt zum Paketformat, nichts gebaut | offen | P3 | ROADMAP Block G | — |

---

## 5. PROGRAMME (P)

| ID | Punkt | Status | Prio | Beleg/Quelle | Runde geplant |
|---|---|---|---|---|---|
| P-001 | **Installation auf Platte** — der Stick läuft aus dem RAM, nichts überlebt den Neustart. `install.fi` schreibt GPT/EFI, aber es gibt **keinen bedienbaren Installationsweg** aus der Oberfläche | teilweise | **P1** | `kernel/user/install.fi`; kein Eintrag in `assets/apps/` | INSTALL-2 |
| P-002 | **Kein grafischer Login, kein Sperrbildschirm** — `login.fi` (257 Z.) und `lock.fi` (352 Z.) existieren, `desktop.fi` ruft **keines von beiden** (`grep login desktop.fi` = **0**, 12.09.) | teilweise | **P1** | `grep -c 'login\|lock' kernel/user/desktop.fi` = 0 | SITZUNG |
| ~~P-003~~ | ~~Ausschalten/Neustart nur über die Befehlszeile~~ — **ERLEDIGT RUNDE ENERGIE (13.09., Zweig `energie`)**: Energiemenü im Startmenü (Ausschalten · Neustart · Abmelden) mit Sicherheitsabfrage. Ausschalten gemessen: QEMU **rc=0** (ACPI, nicht `isa-debug-exit`); Neustart gemessen: `mb: flags=` **zweimal** im Mitschnitt; Abbrechen: Maschine läuft weiter. `sync` mit **Gegenprobe** auf echter Platte belegt (sauber → Datei da, abgewürgt → Datei weg). Nebenbefund und mitbehoben: das Auslieferungsabbild hatte **weder `/bin/init` noch `/etc/inittab` noch `/run`** — `/bin/shutdown` fiel dort immer auf den Notweg. **Abmelden** startet den Schreibtisch neu, solange es keine Anmeldung gibt (`P-002`). **Einschalttaste (ACPI-Ereignis) bleibt offen**, Grund ist nicht AML: `hw.fi::gpe_block_off` schaltet alle GPEs beim Start ab, es gibt keinen SCI-Handler. | **erledigt** | **P1** | `docs/RUNDE-ENERGIE.md`; Bilder + Belegzeilen `belege/energie/`; Läufer `pruef/oneshot.py`, `pruef/syncbeleg.py` | ENERGIE |
| ~~P-004~~ | ~~Explorer — die große Lücke~~ — **ERLEDIGT EXPLORER-2, 12 Punkte, 49 Prüfungen 0 Mängel** | **erledigt** | P1 | `STATUS-EXPLORER2.md` §2; Bilder `/srv/store/belege/orientos-explorer2/2026-09-09/` | EXPLORER-2 |
| P-005 | **USB-Stick zur Laufzeit einbinden/auswerfen** — kein Automount, kein sicheres Auswerfen; Explorer hat **0** Treffer für `mount` (12.09. nachgemessen) | offen | **P1** | `grep -c mount kernel/user/explorer.fi` = 0 | HOTPLUG |
| P-006 | **Geräte-/Hotplug-Manager (udev-Äquivalent)** — Voraussetzung für Stick, Kamera, Drucker, Monitor-Anstecken. Kein `hotplug`/`udev`/`devmgr` im Baum | offen | **P1** | ROADMAP A5; `ls kernel/user/` (12.09.) | HOTPLUG |
| P-007 | **Store-GUI fehlt** — `opk` ist nur Befehlszeile, kein `store.osp` in `assets/apps/` | offen | P2 | `ls assets/apps/` = 8 Bündel, keins davon Store | LADEN-GUI |
| P-008 | **Kein PDF-Betrachter** — `grep pdf kernel/user/` findet nichts | offen | P2 | ROADMAP E10 | PDF |
| P-009 | **Kein Videodekodierer** — bewusste Entscheidung: Container lesen, Video **nicht** dekodieren, Ton abspielen. Stufe 1 (MJPEG 854×480@24) nicht erreicht | teilweise | P3 | ROADMAP §9 + Block F | MEDIA-2 |
| P-010 | **Bildschirmtastatur** — kein `osk`/`keyboard` im Baum | offen | P3 | ROADMAP E15 | — |
| P-011 | **Kalender/Kontakte, Kalender-Popup an der Uhr** | offen | P3 | ROADMAP E-Stufe 3 | — |
| P-012 | **Datenträgerverwaltung** (formatieren, auswerfen) — `storage.fi` existiert, aber kein Bündel und keine Oberfläche | teilweise | P2 | `kernel/user/storage.fi`; `ls assets/apps/` | nach P-006 |
| P-013 | **Wiederherstellung auf leeres Blech** — `backup.fi`/`tresor.fi` sichern, der Rückweg auf eine leere Platte ist nicht gemessen | teilweise | P2 | ROADMAP E17 | SICHERUNG-2 |
| P-014 | **Bildbetrachter nicht gemergt** — `viewer.fi` (716 Z.), `image.fi`, `jpeg.fi` liegen im Baum, aber `git log main --grep viewer` = **0**; Zweig `viewer` ungemergt, Ausbaustand unklar | teilweise | P2 | `/root/osum-viewer/STATUS-VIEWER.md`; `git log main` (12.09.) | VIEWER-MERGE |
| P-015 | **Schriften/Emoji/Sonderzeichen-Werkzeug** | offen | P3 | ROADMAP E18 | — |
| P-016 | **Bildschirmleser mit Sprachausgabe** | offen | P3 | ROADMAP Stufe 3 (XL) | — |
| P-017 | **Office** — nur per Portierung realistisch | offen | P3 | ROADMAP Stufe 3 (XL) | — |
| ~~P-018~~ | ~~Explorer `umbenennen()` zerstört Ordner~~ — **WIDERLEGT UND ERLEDIGT.** Siehe oben, eigener Abschnitt | **erledigt** | P1 | `tools/ofs3/run.sh`: „dieselbe Inode vor und nach rename (21)", **75/0** | EXPLORER-2 |
| ~~P-019~~ | ~~Explorer: toter Code~~ — **ERLEDIGT EXPLORER-2.** Jedes Menü hat jetzt eine eigene Nummer (Tafel in `explorer.fi:2912-2935`) | **erledigt** | P2 | `tools/explorer2/run.sh`: „der doppelte Zweig ist aufgeloest (1 Vorkommen)" | EXPLORER-2 |
| ~~P-020~~ | ~~Explorer-Grenzen zu eng~~ — **ERLEDIGT EXPLORER-2.** `expmodell` trägt `MAXENT 4096`, `NAMEB 256`; die alten 96/32 gelten nur noch für den Sicherungsmodus und heißen jetzt `SIC_*` | **erledigt** | P2 | `expmodell.fi:82-83`; Läufer: „MAXENT = 4096", „NAMEB = 256", „Historie = 64" | EXPLORER-2 |
| ~~P-021~~ | ~~Explorer Zeit-Spalte zeigt `--`~~ — **ERLEDIGT EXPLORER-2** | **erledigt** | P2 | `explorer: zeit mtime=… mit=9 von=9 tzoff=120` — 9 von 9 Einträgen mit echter Zeit | EXPLORER-2 |

---

## 6. DESIGN / OBERFLÄCHE (D)

| ID | Punkt | Status | Prio | Beleg/Quelle | Runde geplant |
|---|---|---|---|---|---|
| ~~D-012~~ | ~~Dunkelmodus ist blaustichig~~ — **ERLEDIGT MERGE-10** | **erledigt** | P2 | `STATUS-MERGE10.md` §3 | MERGE-10 |
| D-013 | **`tools/themestore/run.sh` nie zu Ende gelaufen** — steht seit über 20 Minuten in Abschnitt "Laden ohne Konto". Ein Zwischenstand ohne Endzahl ist keine Abnahme. *Nicht neu gemessen (523 Zeilen, Läufer existiert)* | offen | P2 | `STATUS-SYSTEMBUS.md` §Offen | GRUNDLINIE |
| D-014 | **Verzögerte Übergabe fehlt als Bild** — der Weg ist da, der Screenshot-Beweis nicht | offen | P3 | `STATUS-SYSTEMBUS.md` §Offen | — |
| D-015 | **Zwischenablage-Verlauf ohne Oberfläche** — `clip_hist_take`/`clip_hist_count` gebaut, kein Win+V-Äquivalent | teilweise | P3 | ROADMAP D3; `ulib.fi:64` | nach S-001 |
| D-016 | **Papierkorb ohne Größenbegrenzung/Wiederherstellen-GUI** — **teilentlastet:** der Papierkorb ist jetzt ein **Ort** in der Seitenleiste und im Menü „Gehe zu" (`explorer.fi:3317-3350`, `trash.korb_von`). Es fehlen weiterhin **Größenbegrenzung** und ein **Wiederherstellen** aus der Oberfläche | teilweise | P2 | `explorer.fi:3317`, `:3350`, `:3482` | EXPLORER-2 |
| D-017 | **SVG-Symbole als Quellformat fehlen** — der Vektorweg steht (`assets/osum-icons.ttf`, Lucide ISC, `tools/icons/build.py`), die **Shell** ist damit skalenfrei. Offen bleibt: **App-Bündel** benutzen weiter OSYM-Bitmaps (`assets/apps/*/symbol.txt`, 16×16), die nur ganzzahlig vergrößert werden | teilweise | P2 | `docs/ICONS.md` §1–3; `assets/osum-icons.ttf` (12.09.) | DESIGN-3 |
| D-018 | **Fensterinhalte „zerrissen" (Justins Foto)** — **Ursache gefunden und behoben, Wirkung auf Blech nicht nachgemessen.** Es ist der **Write-Combining-Puffer**: `fb.slot_remap` hängt den Rahmenpuffer in 2-MiB-Scheiben um, ein Rest im WC-Puffer landet danach an derselben virtuellen, aber anderer physischer Adresse. Behoben mit `arch.barrier_write()` (`sfence`) vor jedem Umhängen. In QEMU gibt es keine WC-Semantik, deshalb dort nie sichtbar | teilweise | P2 | `BEFUND-ECHTHARDWARE-5.md` §C; Punkt C der Restliste ("nur auf echtem Blech messbar") | wartet auf Justin |
| D-019 | **`firnc1` bricht still ab** — Ursache geklärt (Importsuche relativ zur importierenden Datei), der echte Mangel ist die **fehlende Meldung** und liegt in `vendor/firn`. *Weiterhin gemessen:* K16 meldet „DIESELBE Datei an ihrem Platz uebersetzt firnc1 klaglos" als FAIL | teilweise | P2 | `BEFUND-FIRNC1-STILL.md`; `.test-work/k16.log` (12.09.) | FIRN-2 |

---

## 7. BLECH / ECHTE HARDWARE (B)

| ID | Punkt | Status | Prio | Beleg/Quelle | Runde geplant |
|---|---|---|---|---|---|
| ~~B-001~~ | ~~DHCP auf Justins Brett scheitert~~ — **ERLEDIGT.** Drei Dinge zusammen: der Rundruf braucht kein ARP mehr (`N-002`), der Klient wartet bis zu 10 s auf den Treiber, und er **gibt nicht mehr auf** (Wiederholung 5/10/20/40/60 s). Justin hat auf echter Hardware per DHCP eine Adresse bekommen; `aec2110` hält fest: „Im Lauf davor gab es `192.168.1.107` vom selben Router" | **erledigt** | P1 | `dhcp.fi:520-556`; Commits `2578d9d`, `aec2110`; `patches/0001` | ECHTHARDWARE-6 |
| ~~B-002~~ | ~~AVX-512-Maschinen: Ring 3 stirbt~~ — **ERLEDIGT Runde VEKTOR/AVX** | **erledigt** | P1 | `tools/avx/run.sh` **32/0** | VEKTOR |
| B-003 | **RTC-Zeitzone ist eine Annahme** — Vorgabe ist „RTC steht auf Ortszeit" (wie Windows), `rtcutc` schaltet auf UTC. **Der doppelte Versatz ist behoben** (`taskbar.fi:1935-1960`: der Kern rechnet die Ortszeit, die Leiste addiert nicht noch einmal); was bleibt, ist die **Annahme selbst** — ohne `tz=` auf der Kommandozeile ist der Versatz 0 | teilweise | P2 | `kernel/time.fi:375-436`; `taskbar.fi:1935` | ZEIT |
| B-004 | **Justins Blech-Fixes ungeprüft** — die Fixes der Runden EH-3…6 und MERGE-11 sind im Emulator belegt, aber auf seinem Rechner nur teilweise nachgemessen. Abbild `orientos-usb.img` (SHA256 `f47f85f5…`) liegt bereit | offen | **P1** | `/srv/store/belege/orientos-abbild-2/` | **wartet auf Justin** |
| B-005 | **Nur eine Maschine gemessen** — alle Blech-Aussagen stammen von genau einem AMD-Brett mit NVIDIA GA106 und Huawei-Ultrawide. Intel-Plattform, Laptop mit Akku, anderes UEFI: ungemessen | offen | P2 | `docs/BLECH-BEREIT.md` §0 | BLECH-N |
| B-006 | **Kein serieller Anschluss auf Justins Brett** (LSR liest `0xFF`) — jede Treibermeldung dorthin ist für ihn unsichtbar. Deshalb die Messtafel; die trägt aber nur 48 Spalten × 23 Zeilen | teilweise | P2 | `STATUS-PROTOKOLL.md`, `BEFUND-ECHTHARDWARE-1.md` A4/A6 | — |

---

## 8. BAU + ABNAHME (A)

| ID | Punkt | Status | Prio | Beleg/Quelle | Runde geplant |
|---|---|---|---|---|---|
| ~~A-001~~ | ~~25 von 74 Abschnitten rot~~ — **abgelöst.** Die Zahl von merge9 gilt nicht mehr; der Volllauf gegen `3ce22f3` misst anders und vor allem **aus anderen Ursachen**. Ersetzt durch `A-014`, `A-015`, `A-016` und die Einzelpunkte unten | **erledigt** (abgelöst) | P1 | Volllauf 12.09., `/tmp/test-full.txt` | GRUNDLINIE |
| A-002 | **`stick` 22 Fehler** — der größte einzelne rote Block von merge9. *Im Lauf vom 12.09. nicht erneut erreicht (Abbruch bei Abschnitt 26 von 73), daher **unklar**, ob noch bestehend* | unklar | P2 | `STATUS-MERGE9.md`; 12.09. nicht gemessen | GRUNDLINIE |
| A-003 | **`k15` 20 Fehler** — *dito, nicht erneut gemessen* | unklar | P2 | `STATUS-MERGE9.md` | GRUNDLINIE |
| A-004 | **`netview` 13 Fehler → jetzt 36** — **verschlechtert, aber die Ursache ist bekannt:** 6 der neuen Fehler sind „the graphical userland does not build: desktop/taskbar/settings/launcher/explorer/widgetdemo", also `A-016` -- **dieser Teil ist am 13.09. behoben; `netview` ist daher NEU ZU MESSEN.** Dazu ein echter Sachfehler: „roles whose contrast was computed against the panel (4.5:1 or better): 10, expected eq 8" | offen | P2 | `.test-work/netview.log`; **NETVIEW 119/36** (12.09.) | GRUNDLINIE |
| A-005 | **`ahci` 58/4** — vorbestehend, Umgebung, nicht Regression | offen | P3 | `STATUS-MERGE9.md` §3 | — |
| A-006 | **`glyphe` 27/2, `vielkern` 38/2** — beide vorbestehend rot | offen | P3 | `STATUS-MERGE9.md` | — |
| A-007 | **K13/K14/K16 aus der Grundlinie** — **neu gemessen 12.09.:** K16 ist **seit 13.09. wieder gruen (69/0)**, `fas` bindet 135 Programme -- `A-015` behoben, nicht mehr wegen `_F1.u_start`. Erwartet 135 gebundene Programme, gemessen **117**. K13/K14 im Lauf vom 12.09. nicht bis zum Ende gekommen | teilweise | P2 | `.test-work/k16.log` (12.09.) | GRUNDLINIE |
| A-008 | ~~**Lastflakes verfälschen jeden Volllauf**~~ — **bestätigt als Regel, nicht mehr als P1-Punkt.** Der Lauf vom 12.09. lief mit `OSUM_JOBS=4`; die großen Ausschläge dieses Laufs sind **nicht** Last, sondern `A-014`/`A-016`. Die Regel „jeder rote Abschnitt wird seriell nachgefahren" bleibt | offen | P2 | `STATUS-MERGE9.md` §3; Lauf 12.09. | Regel, keine Runde |
| A-009 | **Durchklick 27/48** — die zwei Kipper sind Messaufbau. *12.09. nicht neu gemessen* | teilweise | P2 | `STATUS-MERGE9.md` §5 | DURCHKLICK-3 |
| A-010 | **Messfalle Sitzungsdrift** — nach vielen Öffnen/Schließen-Zyklen in EINER QEMU-Sitzung reagiert die Starter-Liste nicht mehr. **Durchklick-Punkte immer auf frischem Boot messen** | offen | P2 | Gedächtnis ECHTHARDWARE-1 MESSFALLE 09.09. | Regel, keine Runde |
| A-011 | ~~`osum-explorer2`, `osum-schleuse2` nicht gemergt~~ — **explorer2 ist gemergt** (`71bbc63`). `schleuse2` weiterhin offen → `F-003` | **erledigt** | P2 | `git log main` (12.09.) | MERGE-10 |
| A-012 | **~20 ungemergte Zweige** — gegen merge11 gezählt: **144 Zweige** im Baum. Weiterhin u. a. `a11y aml async avx betrieb bridge2 certus2 demux design design2 desktop diskmap feedback format glypharbeit hidweg install inventory viewer` | teilweise | P2 | `git branch \| wc -l` = 144 (12.09.) | MERGE-12 |
| A-013 | **Arbeitsbäume unter `/root/osum-*/`** — **42** (12.09. gezählt, vorher 107). Jeder trägt eine Vollkopie; bei **2,6 GB freier Platte** ist das nicht mehr nur Verwirrung, sondern ein Platzproblem | offen | P2 | `ls -d /root/osum-*/ \| wc -l` = 42; `df -h /` (12.09.) | Aufräumen |
| ~~A-014~~ | **NEU: `tools/kernel/memmap.py` stürzt ab — sechs rote Abschnitte aus EINER Ursache.** `python3 tools/kernel/memmap.py` endet mit `ValueError: unbekannte Konstante RAND_OFF` (`memmap.py:483`, gesucht in `:121`). Die Konstante heißt seit `5de06bc` `MARGIN_OFF` (siehe `K-015`). Betroffen: **osum, pci, posix, userland, handle, async, gfx** — und dazu die WM-Folgefehler („der Bereich MOUSE/WM/TTF steht NICHT in der Karte", „die Vektortabelle kollidiert"). **Die Meldung ist irreführend:** sie sagt „meldet eine Kollision", obwohl es gar keine Kollision gibt — das Skript stirbt an einem Namen. **Ein Zweizeilen-Fix** (`memmap.py:121` auf die neuen Namen ziehen) macht diese Abschnitte wieder grün -- **ERLEDIGT 13.09.** (`1d16d34`) -- `memmap.py:121` auf die neuen Namen gezogen. `python3 tools/kernel/memmap.py` laeuft durch; `posix` 150/0, `k14` 152/0, `fsrobust` 30/0. | **erledigt** | P1 | `python3 tools/kernel/memmap.py`; `.test-work/{handle,async,wm}.log` (12.09.) | GRUNDLINIE |
| ~~A-015~~ | **NEU: `fas` bindet die sieben fUi-Programme nicht — doppeltes `_start`.** Gemessen: „fas scheitert an: … desktop[Zeile 290844: diese Marke gibt es zwei `_start`] explorer[551381] launcher[355854] settings[441532] taskbar[409665] taskmgr[305878] widgetdemo[283130]", und „Programme, die fas gebunden hat: **117**, erwartet eq **135**". Ursache: unter `--profile=app` bringt Firns Laufzeit (`vendor/firn/lib/std/rt.fi`) ihr eigenes `_start` mit, und `kernel/user/crt.s:34` legt ein zweites daneben. `as+ld` auf dem Wirt stört das nicht — deshalb fällt es **nur** in K16 auf, also genau dort, wo der Übersetzer **auf dem System selbst** läuft. *Zweiter, noch nicht eingegrenzter Teilbefund derselben Zeile:* calc, certus, freunde, lock, netmon, papierkorb, powermon, snip, storage, themetest, viewer scheitern schon mit `[firnc]`, also früher und aus anderem Grund -- **ERLEDIGT 13.09.** (`1d16d34`) -- im Profil `app` bringt Firns Laufzeit ihr eigenes `_start` mit, deshalb **kein** `crt.o` mehr dazubinden. `fas` bindet wieder **135** Programme (erwartet 135), `k16` **69/0**. Der zweite Teilbefund derselben Zeile (calc, certus, freunde, ... scheiterten schon mit `[firnc]`) ist mit erledigt: es war dieselbe Ursache. | **erledigt** | P1 | `.test-work/k16.log:4-5` (12.09.) | GRUNDLINIE |
| ~~A-016~~ | **NEU: die Läufer bauen die fUi-Programme mit dem falschen Profil.** Immer dieselbe Meldung: „error: the module `std.rt` belongs to the standard library and is not available in profile `kernel`", `vendor/firn/lib/fui/theme.fi:81` bzw. `widget.fi:33`. Folge: „the graphical userland does not build" (netview), „settings.fi laesst sich nicht bauen" (customres), NETMON bricht ganz ab. **Betroffen: NETVIEW 119/36, CUSTOMRES 121/14, PAINT 28/4, DISPLAY 23/3, TILING 65/3, NETMON 0/1.** `tools/usbimg/build.sh` und `tools/look/shot.sh` sind auf `--profile=app` umgestellt (`8d81950`), die übrigen Läufer **nicht** — `tools/netview/run.sh` enthält das Wort `profile` gar nicht. **Ein Fix an einer gemeinsamen Stelle**, nicht sechs einzelne -- **ERLEDIGT 13.09.** (`1d16d34`, `e59b749`, `b1713f4`, `6693bbe`, `4224922`) -- das Profil wird aus der **Wurzeldatei gelesen** (`grep -qa '^profile app'`), nicht getippt, damit es die naechste Umstellung ueberlebt. Dazu `-c` (sonst bindet firnc sofort und sagt „input file is the same as output file“) und **kein** `crt.o`. Nachgezogen in den zwoelf Laeufern, `tests/theme/build.sh`, den zwei Einzelbauten von `settings.fi` und den **siebzehn** Bau-Helfern. Die Meldung kommt in keinem Lauf mehr vor. | **erledigt** | P1 | `.test-work/{netview,customres,netmon}.log` (12.09.) | GRUNDLINIE |

---

## 9. STORE + OTA (O)

| ID | Punkt | Status | Prio | Beleg/Quelle | Runde geplant |
|---|---|---|---|---|---|
| O-001 | **Server-Seite ist ein Prüfstand, kein Betrieb** — `tools/ota/server.py` liefert ein Verzeichnis aus. Fehlt: ein Bau, der aus einem Stand Pakete/INDEX/VERZEICHNIS erzeugt und die Fassungsnummer **automatisch** hochzählt; ein Ort, an dem sie geführt wird (darf nie zurückgehen); Vorhalten alter Fassungen | offen | P2 | `docs/OTA.md` Pkt. 3 | OTA-BETRIEB |
| O-002 | **Schlüsselverwaltung** — es gibt **einen** vertrauten Schlüssel, keinen Wechselweg, keine Sperrliste. Der geheime Schlüssel liegt **unverschlüsselt** auf der Baumaschine; wo er auf Dauer liegen soll, hat **niemand entschieden** | offen | **P2** | `docs/OTA.md` Pkt. 4 | **Entscheidung von Justin nötig** |
| O-003 | **Fassungsplan fehlt** — die Zahl in `fassung` ist eine Zahl und kein Plan | offen | P2 | `docs/OTA.md` Pkt. 5 | OTA-BETRIEB |
| O-004 | **Der Kern ist nicht Teil des A/B-Wechsels** — der Zähler sitzt im Kern (`kernel/ab.fi`), nicht im Lader. Ein Kern, der nicht bis zum Einhängen der Wurzel kommt, wird nicht gefangen. Dafür bräuchte es **zwei Kernabbilder auf der EFI-Partition** | offen | **P1** | `kernel/ab.fi:34` benennt es selbst | AB-BOOT |
| O-005 | **Statisch gelinkt heißt: alles neu — und das PLAN-Format kann es nicht ausdrücken.** PLAN Fassung 2 nennt je Anwendung einen Streuwert und **keine Abhängigkeiten** | offen | **P2** | `docs/OTA.md` Pkt. 7; ROADMAP A9 | PLAN-3 |
| O-006 | **`opk` läuft nur auf dem Wirt** — `pkg/opk.py` ist Python. `/bin/opk` in Firn existiert (1693 Z.), aber die **Paketmaschinerie liegt im OrientOS-Repo**. Zwei Wahrheiten, ein Format | teilweise | P2 | `kernel/user/opk.fi` 1693 Z. (12.09.) | PLAN-3 |
| O-007 | **Kein echter Update-Server im Internet** — alles gegen `localhost` gemessen. *Teilentlastung:* `jarvisd` spricht seit MERGE-11 selbst HTTPS mit `store.fleitec.com` (`4928720`) | teilweise | P2 | `docs/OTA.md`; Commit `4928720` | OTA-BETRIEB |
| O-008 | **Wo liegt das Helfer-Geheimnis?** — Tresor (Passwort beim Start) oder Datei nur für `root`. **Ohne TPM gibt es keine gute dritte Antwort** | offen | P2 | `docs/ROADMAP-UPDATE.md` B5 | **Entscheidung von Justin nötig** |

---

## 10. FIRN / FREMDSOFTWARE (F)

| ID | Punkt | Status | Prio | Beleg/Quelle | Runde geplant |
|---|---|---|---|---|---|
| F-001 | **REGALLOC-A64** — Registerzuteilung für ARM64, Osum-Tempo auf ARM hängt daran | offen | P3 | `/root/firn-regalloc/ROADMAP.md` | Firn |
| F-002 | **ESCAPE-Tiefe** — Fluchtanalyse zu flach, kostet Allokationen | teilweise | P3 | `/root/osum-roadmap/FIRN-ESCAPE-TIEFE.md` | Firn |
| F-003 | **SCHLEUSE-3 (wasm2firn) nicht gemergt** — `tools/wasm2firn/` liegt im Baum (`wasm2firn.py`, `pruefung/`, `TIEFE.md`), der eigene Merge steht aus | teilweise | P2 | `/root/osum-schleuse2/`; `tools/wasm2firn/` (12.09.) | MERGE-SCHLEUSE |
| F-004 | **`vendor/firn` ist festgenagelt** — **teilweise gelöst.** Es gibt jetzt einen sauberen Weg für Osum-Änderungen an Firn-Dateien: `vendor/firn/patches/*.patch` wird von `fetch-firnc.sh` nach dem Auspacken aufgelegt, der ungeflickte Stand landet in `lib/.roh/`. Drei Flicken liegen dort. Was bleibt: ein Fix *in Firn selbst* braucht weiterhin eine Firn-Runde und eine Neu-Festnagelung | teilweise | P2 | `vendor/firn/fetch-firnc.sh:97-137`; `patches/` | Verfahren |
| F-005 | **sqlite3 nur als Quelle** — liegt in `tools/foreign/`, nicht als Binärdatei im Abbild. Der Platz dafür ist da | offen | P3 | `tools/foreign/` (12.09.) | FREMDLAND-2 |
| ~~**F-007**~~ | ~~kein dynamischer Lader~~ — **ERLEDIGT 14.09.2026, Zweig `dynlader`, auf `main`.** Weg B gewaehlt: das echte `ld-musl-x86_64.so.1` als Interpreter, kein Nachbau. Kern bekam `PT_INTERP`-Behandlung und den System-V-Startstapel mit `auxv`. **Die Tabelle fehlender Syscalls blieb LEER** — musl fragt nur elf Aufrufe, und der Kern kannte jeden. Drei Stufen gefallen (hello dynamisch, BusyBox-Applets byteweise wie auf dem Wirt, `dlopen`/`dlsym`). Abnahme `tools/dynlader/run.sh` **36/0** auf dem zusammengefuehrten Stand. Fremdcode (musl 1.2.3, BusyBox 1.36.1) liegt als Store-Paket `linux-abi`, nicht im Grundabbild | **erledigt** | P1 | `docs/RUNDE-DYNLADER.md`; `tools/dynlader/run.sh` | DYNLADER |
| ~~**F-008**~~ | ~~keine X11-/Wayland-Schnittstelle~~ — **ERLEDIGT 14.09.2026, Zweig `wayland`, auf `main`.** Wayland-Server in Ring 3 (`/bin/wayd`), der das Protokoll auf `WM_*` uebersetzt. Dafuer musste der Kern erst drei Dinge lernen, die er nicht konnte: `AF_UNIX`-Sockets, `sendmsg`/`recvmsg` mit **SCM_RIGHTS** und `mmap MAP_SHARED` samt `memfd_create`. **Stufe 2 gefallen**: ein unveraenderter `weston-simple-shm` bekommt ein Fenster. Mit **Bedarfsstart** (socket activation): kein Dauerdienst, erster Client startet den Server, bei 0 Clients beendet er sich. Abnahme `tools/wayland/run.sh` **45/0** | **erledigt** | P1 | `docs/RUNDE-WAYLAND.md` | WAYLAND |
| ~~**F-009**~~ | ~~Syscall-Luecken nie systematisch vermessen~~ — **GEMESSEN 14.09.2026 und WIDERLEGT.** `tools/dynlader/messung-wirt.sh` hat einen vollstaendigen `strace`-Lauf ausgewertet: elf Aufrufe, acht Nummern, **alle bereits vorhanden**. Die erwarteten Kandidaten (`readlink`, `getrandom`, `set_robust_list`, `prlimit64`, `newfstatat`) kommen nicht vor, weil sie glibc ruft und musl nicht. Bleibt offen fuer *andere* Programmklassen (glibc-Binaries, Grafik) — dann wieder messen, nicht raten | **erledigt** | P1 | `docs/RUNDE-DYNLADER.md` §1 | DYNLADER |
| ~~**F-010**~~ | ~~Erweiterungssystem fuer den Fensterserver~~ — **ERLEDIGT 14.09.2026, Zweig `wmplugin`, auf `main` (`dcab2d5`).** Hyprland-Vorbild, aber Ring 3 statt `.so` im Kern: ein Plugin ist ein gewoehnlicher Prozess, der Kern fuehrt nur Buch (acht Plaetze, Ereignisringe, Gewaehrungstafel, Flaechenzuordnung). Rechte einzeln gewaehrt, Frist gegen Endlosschleifen, Autostart. Drei Beispielpakete (`wmplug-regel`, `wmplug-uhr`, `wmplug-werkzeug`). Abnahme `tools/wmplug/run.sh` **193/0** auf dem zusammengefuehrten Stand; `wayland` 45/0 gegengeprueft, weil beide `kernel/wm.fi` anfassen. Belegt: stuerzt ein Plugin ab, malt der Schreibtisch weiter und der Fensterserver wird NICHT neu gestartet | **erledigt** | P2 | `docs/RUNDE-WMPLUGIN.md` | WMPLUGIN |

---

## 11. ÜBERHOLT — nicht mehr verfolgen

| Was | Warum |
|---|---|
| ROADMAP A9 "statisch vs. dynamisch" | **entschieden** (Justin, 29.08.): statisch. Preis in `O-005` benannt |
| ROADMAP E9 "Browser — Grundsatzentscheidung" | **entschieden**: Certus, kein Chromium-Port. Läuft auf Osum |
| ROADMAP §9 "MP4/MKV" | **entschieden**: Container lesen, Video nicht dekodieren, Ton abspielen |
| `docs/ROADMAP-UPDATE.md` A3 "Ed25519 fehlt" | **falsch geworden** — `lib/crypto/ed25519.fi` 809 Z. |
| `docs/ROADMAP-UPDATE.md` B2 "poll fehlt" | **falsch geworden** — `SYS_POLL=7` |
| `docs/REALHW.md` Teil A "Realtek unprüfbar" | **überholt** durch Teil C + Blech-Messung |
| `/root/GRUNDLINIE.md` (2196 Zusagen) | **überholt** |
| Die 6 Vorläufer-ROADMAPs (27.08.) | **überholt** durch `/root/osum-roadmap/ROADMAP.md` |
| `ENTFERNEN-AUS-FIRN.md` (24×) | **überholt** durch `REMOVE-FROM-FIRN.md` |
| `BEFUND-DURCHKLICK.md` (41 Punkte) | **überholt** durch `BEFUND-DURCHKLICK-2.md` (48 Punkte) |
| **„Umbenennen zerstört Ordner" (`P-018`)** | **widerlegt 12.09.2026** — gemessen: dieselbe Inode vor und nach `rename`. Wer die alte Warnung irgendwo findet: sie galt für `merge9` vor dem Merge von `explorer2` |
| **„25 von 74 Abschnitten rot" (`A-001`)** | **überholt** — die Zahl stammt von merge9. Der Lauf gegen `3ce22f3` misst andere Abschnitte aus anderen Ursachen (`A-014`, `A-015`, `A-016`) |

---

## 12. ZÄHLUNG

Gezählt gegen `3ce22f3` am 12.09.2026. „erledigt" steht hier nur als
Abgangsspalte — die Punkte selbst stehen in `ERLEDIGT.md`.

| Bereich | offen | teilweise | unklar | **noch offen gesamt** | davon P1 | in dieser Runde erledigt |
|---|---:|---:|---:|---:|---:|---:|
| Kernel/Treiber (K) | 7 | 6 | 0 | **13** | 0 | 2 |
| Netz (N) | 5 | 2 | 0 | **7** | 0 | 2 |
| Grafik/Anzeige (G) | 0 | 5 | 0 | **5** | 0 | 6 |
| Framework/Systembus (S) | 3 | 6 | 0 | **9** | 1 | 1 |
| Programme (P) | 6 | 10 | 0 | **16** | 5 | 5 |
| Design/Oberfläche (D) | 2 | 4 | 0 | **6** | 0 | 0 |
| Blech (B) | 3 | 3 | 0 | **6** | 1 | 2 |
| Bau+Abnahme (A) | 7 | 3 | 2 | **12** | 3 | 2 |
| Store+OTA (O) | 7 | 2 | 0 | **9** | 1 | 0 |
| Firn/Fremd (F) | 3 | 3 | 0 | **6** | 0 | 0 |
| **Summe** | **43** | **44** | **2** | **89** | **11** | **20** |

**Rechnung:** 102 Punkte vom 09.09. − 20 erledigt + 6 neu (`K-015`, `B-007`,
`A-014`, `A-015`, `A-016`, `O-009`, `F-006` = 7 neue, davon `A-001` als
abgelöst gegengerechnet) = **89 offene Punkte**. Zusätzlich ist `A-011`
erledigt und `A-001` abgelöst — beide in `ERLEDIGT.md` vermerkt.

P1 ist von **20 (13 eigenständig)** auf **11** gefallen. Die drei neuen
P1-Punkte sind alle im Bereich Bau/Abnahme und teilen sich zwei Ursachen;
sie sind vermutlich an **einem** Tag abzuräumen und würden die Grundlinie
schlagartig wieder aussagekräftig machen.

---

## 13. WAS ALS NÄCHSTES DEN MEISTEN NUTZEN BRINGT

1. ~~**`A-014` + `A-016`**~~ und ~~**`A-015`**~~ — **erledigt am 13.09.**
   (Zweig `grundlinie`). Der Messaufbau trägt wieder: sechs Abschnitte
   vollständig grün, `fas` bindet alle 135 Programme, `memmap.py` läuft durch.
   **Nächster Schritt dieser Linie: ein neuer Volllauf gegen `grundlinie`**, um
   die 74 Abschnitte einmal auf verlässlicher Grundlage zu zählen — der Lauf vom
   12.09. (40 grün / 34 rot) enthält noch die drei behobenen Ursachen.
2. **`A-017` / `A-018`** — die Fehler, die der reparierte Bau erst sichtbar
   gemacht hat. `A-018` wiegt schwerer: der Kern **nimmt** eine Auflösung an,
   die er ablehnen müsste (gemessen 2560x1440 statt 800x600).
3. **`P-001` + `O-009`** — Installation auf Platte löst zugleich den
   Geräteschlüssel, der jeden Neustart verliert.
4. **`P-002`/`P-003`** — Login und ein Ausschaltknopf; beides ist im Baum
   vorhanden und nur nicht verdrahtet.

---

*Nächste Runde trägt ihr Ergebnis HIER ein — ID beibehalten, Status ändern,
Beleg eintragen. Fertiges wandert nach `ERLEDIGT.md`.*
| **G-013** | **PRAEZISIERT (16.09.): es fehlt GENAU EINE Sache — ein QEMU mit `--enable-opengl`.** Nachgemessen am 16.09.: `qemu-system-gui` **ist installiert**, `libvirglrenderer.so.1` **ist da**, Mesa mit EGL **ist da**, `egl-headless` steht in `-display help`. Der Host (Proxmox 192.168.1.1) hat `/dev/dri/card0`, aber das ist **ASPEED-BMC-Grafik ohne Renderknoten** (`renderD*` fehlt) — Durchreichen bringt nichts. Auch `LIBGL_ALWAYS_SOFTWARE=1 EGL_PLATFORM=surfaceless GALLIUM_DRIVER=llvmpipe` hilft nicht: **`opengl is not available` ist ein Uebersetzungsschalter**, kein Laufzeitproblem. Das Debian-Paket `1:7.2+dfsg-7+deb12u18+b3` ist ohne OpenGL gebaut. **Weg: QEMU selbst bauen** (`--enable-opengl --enable-virglrenderer`), braucht ~3-5 GB Platte — heute nicht verfuegbar (2,4 GB frei bei vier laufenden Runden). Danach ist VIRGL sofort messbar, der Rest der Runde GPU liegt bereit. |
| **W-001** | **NEU (15.09.): WLAN braucht echtes Blech, sonst nichts mehr.** Der ganze Weg oberhalb der Naht laeuft gegen das simulierte Geraet durch: Suchlauf -> Handschlag -> verschluesseltes Paket hin und zurueck -> DHCP (192.168.0.50) -> **HTTP 200** (`tools/wlan` **210 Zusagen**, Vollweg **25/0**; 318 gekippte Oktette der DHCP-Antwort, keines kommt durch; zwei echte Rahmen aus `wpa-Induction.pcap` korrekt entschluesselt). Auf diesem Wirt gibt es **0 WLAN-Geraete in QEMU, keinen PCI-Bus (LXC), kein USB-Funkgeraet, kein `mac80211_hwsim`**. Es fehlt **genau eine Datei**: der Treiber. Welche Schnittstelle er bedienen muss, steht in `docs/RUNDE-WLAN3.md` Abschnitt 7. | **NACHGEMESSEN 16.09.:** auch der Proxmox-Host hat **kein Funkgeraet** — `lspci` zeigt keine Wireless-Karte, `lsusb` keinen WLAN-Stick. Es ist also nicht nur der Behaelter, sondern die ganze Maschine. Ohne gekaufte Hardware bleibt dieser Punkt zu. |
| **M-001** | **NEU (15.09.): fuenf schwere dom-Dateien laufen auf diesem Wirt ins Zeitlimit.** `Node-contains.html` (1482 Subtests), `Range-mutations-appendData/insertData`, `Node-compareDocumentPosition`, `NodeIterator` melden unter Last `KEIN_RESULT`. **Nachgewiesen als Lastartefakt, nicht als Rueckschritt:** `tools/bcloop/eindatei.py` faehrt dieselbe Datei verschraenkt auf beiden Binaerdateien -- **alt wie neu 0 von 2 Laeufen, 22,6 gegen 23,6 s**. Der Wirt ist ein LXC-Behaelter, auf dem regelmaessig vier Runden gleichzeitig laufen. Wer die dom-Zahl vergleicht, muss diese fuenf Dateien einzeln nachmessen. |
| **C-013** | **NEU (16.09., Glass): `iframe.contentDocument` und `contentWindow` sind `undefined` — 183 stumme Dateien.** Der groesste gemessene Einzelhebel der Landkarte, am laufenden Motor nachgewiesen (eigene Probeseite gegen `web1`, nicht aus Fehlertexten erschlossen). Ohne den Zugriff auf das Dokument eines eingebetteten Rahmens meldet keine dieser Dateien ein Ergebnis. Details in `docs/GLASS-LANDKARTE.md`. |
| **C-014** | **NEU (16.09., Glass): `html/semantics` steht bei 5,9 % — 592 ECHT stumme Dateien von 2221.** Die breiteste Suite der Landkarte und die groesste Einzelluecke. `html/syntax` liegt daneben bei 5,2 % (86 echt stumm von 230). Das sind keine Feinheiten, sondern fehlende Teilsysteme. |
| **C-015** | **NEU (16.09., Glass): `encoding` steht bei 1 von 111 Dateien (0,9 %).** 99 der 103 stummen Dateien sind **Legacy-Mehrbyte-Kodierungen** (EUC-JP, Shift_JIS, Big5, EUC-KR) — vier grosse Kodiertabellen, die schlicht nicht existieren. Ehrliche Fleissarbeit, kein Denkproblem. Ebenfalls bei null: **`FileAPI` 0/39** und **`url` 0/4**. |
| **C-016** | **NEU (16.09., Glass): der Pruefstand selbst begrenzt die Messung.** Von 1419 stummen Dateien der Landkarte sind **322 Infrastruktur, nicht Glass**: unser HTTP-Server ist statisch, WPT-Tests mit Python-Handler (`stash.py`, `slow.py`, `serve-with-content-type.py`), `.sub.`-Ersetzung oder `testdriver.js` koennen hier gar nicht laufen. Bei `fetch` sind **79 von 116** stummen Dateien reine Infrastruktur. Wer das nicht trennt, haelt `fetch` fuer den groessten Hebel und baut am falschen Ende. Ein Laeufer mit `wptserve` wuerde diese 322 Dateien ueberhaupt erst messbar machen. |
| **C-017** | **NEU (16.09., Glass): `place_tree` — der dickste Reftest-Brocken bei den Floats.** `CSS2/floats` (17/62) und `CSS2/normal-flow` (22/41) sind unveraendert. Die Ursache ist in Runde REFTEST2 **eingegrenzt und mit Bildern belegt**, die Behebung sitzt in `place_tree` und ist eine eigene Runde wert. **Drei gemessene Fehlversuche stehen im Bericht**, damit die naechste Runde sie nicht wiederholt. Dazu weiter offen: `reftest-wait` (4+5 Tests), 24 `REF_FEHLT` in css-flexbox, 3 in css-grid. |
