de7fdb7377
Gemessene Ursache des Wackeltests aus CI-Lauf 395, und es ist ein Produktfehler, kein Testfehler. Ein MutationObserver ueber jeden DOM-Commit beim Oeffnen protokollierte: COMMIT dialog=true img=ja box=AUS <- falsch, aber festgeschrieben COMMIT dialog=true img=ja box=AN Der erste Zustand entstand bei JEDEM Oeffnen, nicht nur unter Last, und hielt ohne act() zwei volle Makrotask-Runden - der Browser hat in dieser Zeit mindestens zwei Gelegenheiten, ihn zu zeichnen. Ein Nutzer sieht also sein Vorschaubild kurz mit ausgeschaltetem Haekchen. Der Test fiel nur dann durch, wenn er zufaellig den ersten statt den zweiten Commit sah; die Last im vollen Lauf war der Ausloeser, nicht die Ursache. Zwei Bedingungen mussten zusammentreffen. Erstens war der Dialog dauerhaft eingehaengt und gab bei geschlossenem Zustand nur null zurueck - useState(screenshot !== null) lief damit ein einziges Mal, beim allerersten Mount des Knopfs, als noch gar kein Bild da war. Das Haekchen startete also immer aus. Zweitens zog ein useEffect den Zustand nach, und passive Effekte laufen erst NACH dem Commit. Beides ist jetzt weg. Der Dialog wird nur noch eingehaengt, solange er offen ist, also ist jedes Oeffnen ein frischer Mount mit frischem Zustand. Und das Haekchen wird beim Rendern aus screenshot abgeleitet statt per Effekt nachgezogen; attachChoice haelt allein die bewusste Abwahl des Nutzers. Der Effekt, der Status, Text und Haekchen beim Oeffnen zuruecksetzte, entfaellt ersatzlos. Damit verschwindet dieselbe Klasse an einer zweiten Stelle: beim erneuten Oeffnen nach einem Versand stand bisher zwei Runden lang der alte Danke-Bildschirm im DOM, bevor das frische Formular erschien. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TPPB4ApQxzSU1rwV2Ffj9J