# Qualitätsbericht – erster ausführbarer Prototyp
## Ergänzung: eigenes CSS und eigenes Skript, 12.09.2026
- **201 PHP-Tests / 716 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.
- **Zehn abgewiesene CSS-Eingaben** erreichen kein Dokument, darunter die Ausbruchsversuche: `color:red} body{display:none`, ein fremder Selektor `body { … }`, `@import`, `@media`, `url(javascript:alert(1))`, `url(//fremd.example/x.png)`, ein Backslash-Escape und `expression()`.
- Fünf erlaubte CSS-Formen werden korrekt auf das Element bezogen, einschließlich `& > p` und `& .block-text`.
- **Zwei echte Löcher kamen dabei heraus.** `& .block-text` wurde zu `#id.block-text`, weil das führende Leerzeichen wegtrimmt wurde – aus dem Nachfahren wurde derselbe Knoten, die Regel traf das falsche Element. Und `url(//fremd.example/x.png)` kam durch, weil jede Adresse mit `/` erlaubt war: eine protokollrelative Adresse hätte über das Schema der Seite von Dritten geladen. Beides behoben, beides durch einen Test abgedeckt.
- Skriptauslieferung geprüft: eigenes Skript erscheint **nie** im HTML, sondern nur unter `/assets/seite/{id}.js` mit `text/javascript`, in einer eigenen Closure mit gesuchtem `element`. Die Seite mit Skript sendet `script-src 'self'`, eine Seite ohne behält `script-src 'none'` und liefert für ihre Adresse 404. **Ein Skript aus einem gespeicherten, aber unveröffentlichten Entwurf wird nicht ausgeliefert.**
- Rollenprüfung geprüft: der Vergleich mit dem gespeicherten Stand weist Ändern, Entfernen und Hinzufügen eines Skripts ab und lässt ein unverändertes Skript durch – ein Editor kann eine Seite mit Skript also weiter bearbeiten, ohne das Skript anfassen zu können.
- **Nicht geprüft:** der Reiter „Erweitert“ ist nicht von Hand bedient und nicht mit einem Screenreader getestet. Ob ein eingesetztes Skript im Browser tatsächlich läuft, ist ebenfalls nicht ausgeführt worden – geprüft ist, dass die Datei mit dem erwarteten Inhalt ausgeliefert wird und dass die Richtlinie sie zulässt.
## Ergänzung: formatierter Text, 12.09.2026
- **182 PHP-Tests / 685 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.
- **Dreizehn Fälle durch den Filter**, davon acht Angriffe: `Text danach` behält nur den Text, ein `onclick`-Attribut verschwindet, `class` und `style` verschwinden mitsamt dem Element (der Text bleibt), ein `javascript:`-Link wird zu Text, ein `
` verschwindet vollständig, ein `