Skip to content

Review-Befunde: Warten, Zielbestimmung, Schutz, Export-DPI - #65

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

flomotlik merged 1 commit into
mainfrom
feature/review-befunde-warten-und-ziele

Conversation

@flomotlik

Copy link
Copy Markdown
Contributor

Abarbeitung der Befunde aus dem externen Review (Claude Opus 5, GPT-5.6, Antigravity — zwei Verdikte fail). Jeder Punkt wurde vor der Korrektur im Code nachgeprüft, keiner ungeprüft übernommen.

Die Wartelogik — von allen drei unabhängig gefunden, zwei als kritisch

_waitUntilQuiet() zählte nur Objekte auf dem Canvas. Ein spät eintreffendes Bild kann ein Objekt aber ersetzen, ohne die Anzahl zu ändern — addLogo() entfernt das alte Logo und fügt das geflachte hinzu. Die Wartefunktion sah dann Stillstand, wo gerade gearbeitet wurde.

Die Fassade bildet jetzt eine Signatur aus Typ, Position, Größe, Winkel und Textinhalt aller Objekte und wartet auf deren Stabilität.

Weitere behobene Befunde

insideMargin prüfte nur den Ursprung. Ein dreifach zu breites Element saß links auf der Schutzzone und wurde als „drin" gemeldet. Jetzt alle vier Kanten.

Das ist besonders unangenehm, weil ich diesen Wert heute als Beleg benutzt habe: Beim überbreiten Text meldete er korrekt false — aber nur, weil left negativ war, nicht weil die Breite geprüft wurde.

place(), resize() und rotate() nahmen keinen Index, obwohl llms.txt { target: index } dokumentiert. Die Zahl wurde als Objekt verwendet, der Aufruf verpuffte.

Geschützte Objekte waren nicht geschützt. objects() meldet Logo, Hintergrund und Grundfläche als editable: false — nur remove() hielt sich daran. bringToFront(0) hätte die grüne Grundfläche über das ganze Bild gelegt. Jetzt prüft jede ändernde Methode, mit Fehlermeldungen, die sagen was stattdessen zu tun ist.

export() hatte 200 DPI fest verdrahtet. Der Downloadknopf liest die DPI aus der Vorlage; die Fassade lieferte für dieselbe Vorlage eine andere Auflösung als für einen Menschen.

bringLogoToFront() fehlte bei Text, Störer und Wahlkreuz. Nachgezählt: drei Aufrufe im Code, jetzt sechs. Eine Schlagzeile am unteren Rand lag über dem Organisationslogo — und die llms.txt behauptete das Gegenteil.

Eine Regel, die der erste Testfehlschlag zutage förderte

Erst resize() und rotate(), dann place(). Fabric dreht per Vorgabe um den Mittelpunkt (centeredRotation), wer vorher positioniert findet das Element hinterher woanders. render() hält die Reihenfolge von selbst ein; für Einzelaufrufe steht es jetzt in der llms.txt.

Tests

e2e/review-findings.spec.js — ein Test pro Befund, damit keiner still zurückkommt. Inklusive eines Tests, der belegt, dass die Signatur eine Verschiebung bemerkt, die der Objektzähler nicht sehen kann.

132 Jest grün, 113 e2e grün. VERSION auf 10.

Noch offen aus dem Review

export() überspringt validateDownload() (leerer Logobalken ohne Logoauswahl), setBackground() erkennt keinen Austausch, render() ist zwischen Aufrufen zustandsbehaftet. Dazu der ganze Block Bilder und Hintergrundbilder — kommt als eigener PR.

https://claude.ai/code/session_01Qtib9MPRZATQU3j9w7ymDk

Abarbeitung der Befunde aus dem externen Review (Claude Opus 5, GPT-5.6,
Antigravity). Jeder Punkt ist vorher im Code nachgeprueft worden.

Warten (alle drei Reviewer unabhaengig, zwei als kritisch):
_waitUntilQuiet() zaehlte nur Objekte. Ein spaet eintreffendes Bild kann
ein Objekt ERSETZEN, ohne die Anzahl zu aendern — addLogo() entfernt das
alte Logo und fuegt das geflachte hinzu. Die Fassade bildet jetzt eine
Signatur aus Typ, Position, Groesse, Winkel und Textinhalt aller Objekte
und wartet auf deren Stabilitaet.

insideMargin prueft jetzt alle vier Kanten statt nur den Ursprung. Ein
dreifach zu breites Element sass am linken Rand auf der Schutzzone und
wurde als "drin" gemeldet.

place(), resize() und rotate() nehmen jetzt einen Index. Die llms.txt
dokumentiert { target: index } laengst; vorher wurde die Zahl als Objekt
verwendet und der Aufruf verpuffte.

Logo, Hintergrundbild und Grundflaeche sind jetzt in JEDER aendernden
Methode geschuetzt, nicht nur in remove(). objects() meldete sie als
editable: false, und alles andere fasste sie trotzdem an —
bringToFront(0) haette die gruene Grundflaeche ueber das ganze Bild
gelegt. Die Fehlermeldungen sagen, was stattdessen zu tun ist.

export() nimmt die DPI der aktuellen Vorlage statt fest 200. Der
Downloadknopf tut das laengst; die Fassade lieferte fuer dieselbe Vorlage
eine andere Aufloesung als fuer einen Menschen.

bringLogoToFront() fehlte bei add-text, add-pink-circle und add-cross.
Nachgezaehlt: drei Aufrufe im Code, jetzt sechs. Eine Schlagzeile am
unteren Rand lag ueber dem Organisationslogo — und die llms.txt
behauptete das Gegenteil.

Dazu eine Regel, die der erste Testfehlschlag zutage gefoerdert hat und
die jetzt dokumentiert ist: erst resize() und rotate(), dann place().
Fabric dreht per Vorgabe um den Mittelpunkt, wer vorher positioniert
findet das Element hinterher woanders.

VERSION auf 10. 132 Jest, 113 e2e gruen.

Claude-Session: https://claude.ai/code/session_01Qtib9MPRZATQU3j9w7ymDk
@flomotlik
flomotlik force-pushed the feature/review-befunde-warten-und-ziele branch from b498fab to f16d3b2 Compare September 25, 2026 15:33
@flomotlik
flomotlik merged commit e7c1709 into main Sep 25, 2026
7 checks passed
@flomotlik
flomotlik deleted the feature/review-befunde-warten-und-ziele branch September 25, 2026 15:47
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