Skip to content

Restliche Review-Befunde und die fehlenden Gestaltungsmuster - #67

Merged
flomotlik merged 1 commit into
mainfrom
feature/restliche-review-befunde-und-bildmuster
Sep 25, 2026
Merged

flomotlik merged 1 commit into
mainfrom
feature/restliche-review-befunde-und-bildmuster

Conversation

@flomotlik

Copy link
Copy Markdown
Contributor

Die restlichen Korrektheitsbefunde aus dem externen Review, plus die Gestaltungsmuster, die alle drei Reviewer als fehlend nannten.

Korrektheit

export() prüft jetzt wie der Downloadknopf. Ohne gewählte Organisation ging ein Bild mit leerem weißen Logobalken raus — die App zeichnet den Balken unbedingt, nur der Ortsname fehlt. Es sieht nichts kaputt aus, bis es jemand veröffentlicht.

Das hat vier bestehende Tests umgeworfen und dabei gezeigt, dass render({ template, text }) sonst unbenutzbar geworden wäre. Der Logo-Zustand wird deshalb aus dem Spec abgeleitet: Wer keins nennt, will keins. Wer logoEnabled: true setzt und keins wählt, bekommt zu Recht den Fehler.

setBackground() wartet auf ein anderes Bild. contentImage ist ein Einwegriegel — replaceCanvas() und resetWizard() verwerfen das Canvas, setzen ihn aber nie zurück. Nach einem Vorlagenwechsel war er noch wahr, ein Austausch kehrte also sofort zurück, bevor das neue Foto geladen war.

addText() setzt alle Bedienelemente, nicht nur die genannten. Der Handler liest alle; ein weggelassenes Feld erbte den vorigen Aufruf. Ein gelber rechtsbündiger Text färbte jeden folgenden mit ein. Ein Test rendert zweimal dasselbe Spec und vergleicht.

Gestaltungsmuster

sendBackwards() / sendToBack() — Fabric bringt beides mit, die App verdrahtet keines, die Oberfläche hat nur einen Nach-vorne-Knopf. Ohne das lässt sich eine Überlappung nie wieder auflösen. Beide halten Grundfläche und Hintergrundfoto ganz hinten.

addCredit() für Bildnachweis und KI-Kennzeichnung. Beides steht als Pflicht in der llms.txt, musste aber als gewöhnlicher Text nachgebaut werden — und der wird auf 80 % der Bildbreite skaliert. Ein Nachweis in Schlagzeilengröße ist kein Nachweis. Jetzt feste kleine Größe relativ zur kurzen Kante, innerhalb der Schutzzone.

duplicate() für wiederholte Motive — der Radbörse-Fall. Klont das Fabric-Objekt statt das Bild erneut zu laden. Der Test zählt die fetch-Aufrufe mit und belegt: vier Icons, ein Ladevorgang.

Dazu die Emoji-Einordnung aus dem Review: Emoji kommen durch, aber aus der Systemschrift statt der Hausschrift, und zusammengesetzte zerfallen in ihre Bestandteile (Flaggen, Familien, Hauttöne). Ein Symbol als PNG oder SVG ist verlässlich, ein Emoji nicht.

Ein Test mit falscher Annahme

Mein Stapelreihenfolge-Test ging davon aus, dass der Störer über dem Text liegt. Tatsächlich holt der Störer-Handler alle Textobjekte selbst nach vorne — der Kreis lag schon hinten, sendBackwards() konnte nichts bewirken. Der Test prüft jetzt zwei gleichrangige Elemente.

132 Jest grün, 137 e2e grün. VERSION auf 13.

https://claude.ai/code/session_01Qtib9MPRZATQU3j9w7ymDk

KORREKTHEIT

export() wendet jetzt ValidationUtils.validateDownload() an, dieselbe
Pruefung wie der Downloadknopf. Ohne sie ging ein Bild mit leerem weissen
Logobalken raus: Die App zeichnet den Balken unbedingt, nur der Ortsname
fehlt — es sieht nichts kaputt aus, bis es jemand veroeffentlicht.

Das hat vier bestehende Tests umgeworfen, die ohne Logo exportierten, und
dabei gezeigt, dass render({template, text}) sonst unbenutzbar geworden
waere. Der Logo-Zustand wird deshalb aus dem Spec abgeleitet: Wer keins
nennt, will keins.

setBackground() wartet auf ein ANDERES Bild statt darauf, dass ueberhaupt
eines existiert. contentImage ist ein Einwegriegel — replaceCanvas() und
resetWizard() verwerfen das Canvas, setzen ihn aber nie zurueck. Nach
einem Vorlagenwechsel war er noch wahr, ein Austausch kehrte also sofort
zurueck, bevor das neue Foto geladen war.

addText() setzt jetzt ALLE Bedienelemente, nicht nur die genannten. Der
Handler liest alle; ein weggelassenes Feld erbte damit den vorigen
Aufruf. Ein gelber rechtsbuendiger Text faerbte jeden folgenden mit ein.

GESTALTUNGSMUSTER

sendBackwards() und sendToBack(). Fabric bringt beides mit, die App
verdrahtet keines, die Oberflaeche hat nur einen Nach-vorne-Knopf. Ohne
das laesst sich eine Ueberlappung nie wieder aufloesen. Beide halten
Grundflaeche und Hintergrundfoto ganz hinten.

addCredit() fuer Bildnachweis und KI-Kennzeichnung. Beides steht als
Pflicht in der llms.txt, musste aber als gewoehnlicher Text nachgebaut
werden — und der wird auf 80 % der Bildbreite skaliert. Ein Nachweis in
Schlagzeilengroesse ist kein Nachweis. Feste kleine Groesse relativ zur
kurzen Kante, innerhalb der Schutzzone.

duplicate() fuer wiederholte Motive, etwa Raeder fuer eine Radboerse.
Klont das Fabric-Objekt statt das Bild erneut zu laden; der Test zaehlt
die fetch-Aufrufe mit und belegt: vier Icons, ein Ladevorgang.

Dazu die Emoji-Einordnung aus dem Review in der llms.txt: Emoji kommen
durch, aber aus der Systemschrift statt der Hausschrift, und
zusammengesetzte zerfallen in ihre Bestandteile. Ein Symbol als PNG oder
SVG ist verlaesslich, ein Emoji nicht.

VERSION auf 13. 132 Jest, 137 e2e gruen.

Claude-Session: https://claude.ai/code/session_01Qtib9MPRZATQU3j9w7ymDk
@flomotlik
flomotlik merged commit d9fd253 into main Sep 25, 2026
7 checks passed
@flomotlik
flomotlik deleted the feature/restliche-review-befunde-und-bildmuster branch September 25, 2026 18:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant