Repository navigation
Review-Befunde: Warten, Zielbestimmung, Schutz, Export-DPI - #65
Merged
Merged
Conversation
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
force-pushed
the
feature/review-befunde-warten-und-ziele
branch
from
September 25, 2026 15:33
b498fab to
f16d3b2
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
insideMarginprü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, weilleftnegativ war, nicht weil die Breite geprüft wurde.place(),resize()undrotate()nahmen keinen Index, obwohlllms.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 alseditable: false— nurremove()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 diellms.txtbehauptete das Gegenteil.Eine Regel, die der erste Testfehlschlag zutage förderte
Erst
resize()undrotate(), dannplace(). 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 derllms.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()überspringtvalidateDownload()(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