Die zeichengleiche Inline-Kopie (FAKE_REACT und Plug-in) ist entfernt; der Baustein ist jetzt die einzige Fassung für workersPultUi.test.mjs und botleadList.test.mjs.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Jede Aktion sperrt die Knöpfe der Zeile; Chromium nimmt einem gesperrten Knopf den Fokus und gibt ihn nicht
zurück, Tastatur- und Screenreader-Nutzer standen danach am Seitenanfang. begin() merkt sich das fokussierte
Bedienelement und das offene Feld; ist die Anfrage vorbei, geht der Fokus zurück an den Knopf, sonst ans
Textfeld, an den Knopf, der das Feld öffnete, sonst an die Zeile (tabIndex -1). Verlässt die Zeile die
Liste, nimmt die Meldung oben (tabIndex -1) den Fokus, auch bei gleichem Text zweimal nacheinander. Es wird
nur eingegriffen, wenn der Fokus wirklich verloren ging und vor der Aktion ein Bedienelement ihn hatte
(Safari fokussiert Knöpfe nicht). Neues Modul workersFocus.js (rein, document wird übergeben).
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
„Als Mensch antworten“ und „Antwort des Kunden einfügen“ ließen sich nur durch erneuten Klick auf den
Auslöser schließen. Esc (aus dem ganzen Feld, mit preventDefault für die Handy-Leiste) und der neue Knopf
„Abbrechen“ schließen das Feld, der Text bleibt in der Liste erhalten, der Fokus geht an den Auslöser
zurück (data-opens am Knopf, gesucht in der Aktionsgruppe: Button reicht kein ref durch). Während einer
Anfrage sind beide gesperrt. Neue Gruppe .wk-pult-panel-btns, auf dem Handy mit dem Hauptknopf oben.
Test-Läufer: ref-Objekte an Tags und eine document-Attrappe für den Fokus.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Bei einer http- oder fremden Adresse zeigte die Zeile „Keine gültige Vorschau-Adresse hinterlegt.“ statt
des Links, ließ aber das Freigeben zu: der Mensch gab eine Vorschau frei, die er nicht ansehen kann. Der
Knopf ist jetzt gesperrt (auch approve() prüft previewHref), der Hinweis nennt Grund und Ausweg („Entwurf
prüfen oder verwerfen“), Verwerfen bleibt frei. Das Zeilenmodell (canApprovePreview) bleibt unverändert.
Das Sperren schließt fail-closed: weichen baseUrl des Dienstes und PREVIEW_HOST in WOMS einmal ab, ist
Freigeben gesperrt, bis WOMS angepasst ist. Prüfstand prüft den gesperrten Knopf.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Der Knopf startete einen Opus-Lauf mit einem einzigen Klick (Handy: voll breit zwischen anderen Knöpfen),
ohne dass sich der Bau in der Oberfläche zurücknehmen lässt. Wie Freigeben und Verwerfen fragt er jetzt
zuerst nach („Wirklich bauen?“, 4 s) und zeigt dabei, dass ein Opus-Lauf startet und die Vorschau gebaut
wird, als hätte der Interessent Ja gesagt (ohne „nur wenn Ja“: der Knopf gilt gerade für unklare Antworten).
rowModel blendet den Knopf bei gesperrtem, verlorenem oder abgeschlossenem Interessenten (gesperrt,
verloren, deal) aus; ohne Kurzfassung entscheidet weiter der Dienst. Prüfstand: die Fehler- und Fokus-Läufe
klicken zweimal, Szenario bauen prüft Frage, Hinweis und Verfall. Doppeltipp-Schutz und Dienst-Härtung
(bauLauf nur nach Ja) bleiben offen, siehe final-fix-report-woms.md.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
FAKE_REACT (usePultFeed) und FAKE_UI (PultList) waren dieselben Hooks
doppelt, STUBS und UI_STUBS dieselben Attrappen doppelt. Jetzt gibt es
einen Läufer (FAKE_REACT, mehrere Bauteile mit Zustand, Effekten und
Abbau) und eine Tabelle (STUBS); usePultFeed läuft in einem Bauteil
(mountHook), die gerenderten und die bedienten PultList-Tests teilen
sich die Attrappen über globalThis.__pultFeedFor. Nur Test-Code, das
Verhalten der Tests bleibt gleich (24 Tests grün).
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
"Details", "Anzeige öffnen", das Entwurfsfeld und die Aktionsgruppe tragen den Titel der Zeile im
zugänglichen Namen ("Details zu <Titel>"), das sichtbare Wort steht vorn (WCAG 2.5.3); ohne
Titel gilt der schlichte Name. Der Prüfstand sucht die Knöpfe unter den neuen Namen und prüft
zusätzlich die Eindeutigkeit der Namen (W8) und die Abschlusszeile im Reiter Erledigt (W5).
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Abgeschlossene Zeilen tragen jetzt ein Badge (Gesendet grün, Verworfen/Erledigt neutral) und die
Zeile "Gesendet von Anna · vor 2 Std." aus doneBy/doneAt statt des Alters ab Anlage. Menschen
(mensch:<id>) werden über die Mitarbeiterliste aufgelöst, ein Worker wie max über das
Rollen-Register als "Max (automatisch)" und nie als "Kollege". Offene Zeilen bleiben unverändert.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
copyTextChecked erfüllt nur, wenn der Text wirklich in der Zwischenablage liegt (Clipboard-API,
sonst Notweg mit document.execCommand, dessen Rückgabewert jetzt geprüft wird; das Textfeld wird
immer entfernt). copyText bleibt für die Kundenansicht die verschluckende Hülle. Das Pult nimmt
die strenge Fassung, sodass die Zeile statt "Kopiert und geöffnet." den Hinweis zum Kopieren
von Hand zeigt. Die Reihenfolge Kopieren vor Öffnen bleibt (Nutzer-Geste).
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>