# Qualitätsbericht – erster ausführbarer Prototyp ## Ergänzung: Kopf, Fuß und verknüpfte Sektionen, 12.09.2026 - **165 PHP-Tests / 660 Assertions** unter PHP 8.2.12 und PHP 8.4.22, **15 JavaScript-Modelltests**, der vollständige Playwright-Editortest mit axe (null Verstöße) und die öffentliche Browserprüfung. - Bereiche geprüft: Kopf- und Fußbereich erscheinen als gewöhnliche Blöcke, der Navigationsblock zeigt das Menü, eine Änderung am Kopfbereich erreicht beide geprüften Seiten gleichzeitig, und ein geleerter Bereich rendert nichts statt einer kaputten Hülle. - Verknüpfte Sektion geprüft: auf zwei Seiten sichtbar, die Seitendokumente enthalten **nur die Adresse**, eine Änderung wirkt an beiden Stellen, `usedBy` nennt beide Seiten, und nach dem Entfernen bleiben beide Seiten mit HTTP 200 heil, mit erhaltenem Verweis. - Abgewiesen werden: eine Hauptüberschrift in einem geteilten Bereich, eine Sektion mit Selbstbezug (ohne zu schreiben), ein zweiter Kopfbereich und das Löschen von Kopf- oder Fußbereich. - **Ein echter Fehler, den der axe-Lauf gefunden hat, und zwar nicht nur im eingesetzten Fußbereich:** die Token-CSS war für die flache Struktur Sektion → Text geschrieben. `.block-column>.block-text:first-child` setzt eine Farbe für helle Hintergründe und gewinnt auf Spezifität gegen `.tone-ink .block-text`; Text in einer Spalte auf dunklem Grund war damit unlesbar, gemessen **1,87:1**. Das betraf jede dunkle Sektion mit Spalten, nicht nur die neuen Bereiche. Zwei gezielte Selektoren gleicher Spezifität stellen es richtig, helle Farbwelten bleiben unberührt. ## Ergänzung: Startseite, erreichbare Standarddateien, getrennte Befunde, 12.09.2026 - **162 PHP-Tests / 636 Assertions** unter PHP 8.2.12 und PHP 8.4.22, **15 JavaScript-Modelltests**, der vollständige Playwright-Editortest und die **wieder grüne öffentliche Browserprüfung**. - **Lighthouse 13.4.1: je drei Läufe mobil und Desktop, alle fünf Kategorien 100.** - Startseite geprüft: eine andere veröffentlichte Seite wird zur Wurzel und antwortet unter `/`, ihre eigene Adresse leitet mit 301 dorthin, die bisherige Wurzel wird eine gewöhnliche Seite und ist wieder verschiebbar. Sitemap, strukturierte Daten und Menüauflösung folgen. Umbenennen und Papierkorb sind für die Wurzel gesperrt. Drei ungültige Angaben ändern nichts. - **Ein weiterer echter Fehler, den nur ein HTTP-Aufruf zeigt:** `/sitemap.xml`, `/robots.txt`, `/llms.txt` und `/feed.xml` waren lokal **nie erreichbar**. Der eingebaute PHP-Server antwortet für fehlende Pfade mit Dateiendung selbst mit 404, ohne den Frontcontroller zu fragen – alle Kernel-Tests bestanden trotzdem, weil sie die Anwendung direkt aufrufen. `bin/dev-router.php` bildet die Rewrite-Regel nach, Start- und CI-Befehl nutzen es, und die Browserprüfung ruft die vier Adressen jetzt über HTTP auf und prüft den Inhaltstyp. Der Grund, warum es so lange unbemerkt blieb, war genau diese fehlende Prüfung. - **Barrierefreiheitsbefunde werden nach Ursache getrennt.** Ein Kontrastfehler aus Theme oder Stylesheet bleibt ein Defekt und bricht den Lauf ab – so wurde die Linkfarbe gefunden, die jeden dunklen Abschnitt überschrieb. Ein Kontrastfehler an einem Element, das eine eigene Regel im erzeugten Seiten-Stylesheet hat, ist eine redaktionelle Feststellung: sie wird bei **jedem** Lauf mit Seite, Farbe und Verhältnis ausgegeben und in `reports/browser.json` geschrieben, macht aber einen Codewechsel nicht rot. Stillschweigend durchgelassen wird nichts. - Aktuell offen und bei jedem Lauf gemeldet: `/grundlagen`, Textblock `#d08080` auf hellem Grund, 2,75:1 statt 4,5:1. Nicht verändert, weil es eine Nutzerentscheidung ist. ## Ergänzung: Seiten verwalten, 12.09.2026 - **160 PHP-Tests / 622 Assertions** unter PHP 8.2.12 und PHP 8.4.22, **15 JavaScript-Modelltests** und der vollständige Playwright-Editortest mit axe (null Verstöße). - Verschieben geprüft: eine Seite mit Kind und Enkel wird umbenannt, alle drei Adressen ändern sich, jede neue antwortet mit 200, jede alte mit 301 auf genau ihr neues Ziel, und Slug sowie Elternbeziehung der Nachkommen bleiben unverändert. - Vier abgewiesene Verschiebungen bewegen nichts und erzeugen keine Weiterleitung: unter die eigene Unterseite, in sich selbst, auf eine vergebene Adresse und mit einem unbrauchbaren Slug. Die Startseite wird ebenfalls abgewiesen. - Papierkorb geprüft: der Teilbaum geht mit, die Seiten antworten öffentlich mit 404 und verschwinden aus Navigation, Sitemap, Beitragsarchiv, Feed und Editorliste. Ein Kind lässt sich nicht vor seinem Elternteil wiederherstellen, und das Wiederherstellen einer Seite holt keine andere zurück. - Fassungen geprüft: Reihenfolge neueste zuerst, Wiederherstellen erzeugt eine zusätzliche Fassung statt zu überschreiben, eine Fassung einer anderen Seite wird abgewiesen. - Zeitplan geprüft: ein künftiger Zeitpunkt veröffentlicht nichts, ein vergangener genau einmal, danach ist der Zeitpunkt verbraucht, ein ungültiges Format wird abgewiesen, und eine Seite im Papierkorb wird nie durch den Zeitplan veröffentlicht. - **Ein echter Fehler kam dabei heraus:** die Reihenfolge des Fassungsverlaufs war nicht eindeutig. `created_at` hat Sekundengenauigkeit, mehrere Speichervorgänge fallen in dieselbe Sekunde, und die Liste richtete sich dann nach der zufälligen Revisions-ID – „vorherige Fassung wiederherstellen“ hätte die falsche treffen können. Jede Fassung trägt jetzt einen je Seite streng aufsteigenden Zähler; die Migration füllt ihn aus den vorhandenen Zeitstempeln und wurde vorher gegen eine Kopie der Datenbank geprüft. - Migration `20260912000900` erst gegen eine Kopie ausgeführt und der Backfill kontrolliert (drei Fassungen von `/grundlagen` erhielten seq 1 bis 3 in der richtigen Reihenfolge), danach nach Backup angewendet. `cms:publish-due` ausgeführt. ## Ergänzung: Browsertests wiederhergestellt, 12.09.2026 - **155 PHP-Tests / 579 Assertions** unter PHP 8.2.12 und PHP 8.4.22, **15 JavaScript-Modelltests** und erstmals seit dem Editorumbau wieder der **vollständige Playwright-Editortest**. - Der Editortest war durch den Umbau kaputt: er steuerte die abgeschafften Auswahllisten. Er wurde auf die freien Bedienelemente umgeschrieben und prüft jetzt Einheitenfelder, Vererbung über drei Geräte, einzelnes Zurücksetzen, Palettenfarbe, Abstand je Seite, die Hover-Regel, freie Rasterspalten und die Bewegungseffekte. - **axe-core: null Verstöße** auf Login, Seitenliste, Editor in Desktop- und Mobilbreite, Medienauswahl und der bearbeiteten veröffentlichten Seite. - **Lighthouse 13.4.1: je drei Läufe mobil und Desktop auf der Startseite, alle fünf Kategorien 100** – mit Theme-System, gehashtem Stylesheet und den neuen Blöcken. **Drei echte Fehler, die nur der Browserlauf gezeigt hat:** 1. **Die frei gestalteten Werte wirkten in der Editorvorschau überhaupt nicht.** Ein `srcdoc`-Iframe erbt die Richtlinie des einbettenden Dokuments; die Verwaltung verbietet Inline-Styles, also wurde das erzeugte `