feat: Usability-Test — Gliederung, Verständlichkeit, Datei-Upload (v2.35.8) - #98
Conversation
…v2.35.7) Tab-Zuschnitt nach inhaltlicher Zusammengehörigkeit: - Schlagworte stehen jetzt in Tab 1 bei Thema, CESSDA-Klassifikation und Engagementfeld. Alle vier beschreiben, worum es geht; bei Sprache und Datumsangaben waren sie fehl am Platz. Sie bleiben oberhalb der aufklappbaren Untergruppe sichtbar — an ihnen hängen 30 MQA-Punkte. - Die Erstveröffentlichung ist nach Tab 4 zur Aktualisierungsfrequenz gewandert; beide beschreiben die Aktualität des Datensatzes. - Tab 2 heißt "Sprache & Übersetzungen" und trägt sämtliche Übersetzungs-Repeater, die vorher auf zwei Tabs verteilt waren. Zugriffsrechte mit "Öffentlich" vorbelegt — sichtbar im Formular und änderbar. Bewusst kein Automatismus aus dem Beitragsstatus: Metadaten sollen nicht im Hintergrund entstehen. HVD-Felder nennen ihre Geltung. High-Value-Datensätze sind eine Rechtskategorie der EU-Durchführungsverordnung 2023/138 für öffentliche Stellen; Beschriftung und Hilfetext sagen das jetzt, damit Vereine und Verbände sie überspringen können. Für Kommunen unverändert nutzbar. CESSDA-Eingabefeld war viel zu schmal und schnitt seinen Platzhalter ab. Das Widget steht als Geschwister neben dem ausgeblendeten .cf-field, also außerhalb des Carbon-Fields-Kontexts — dessen Breitenregeln griffen nicht und der Browser fiel auf size=20 zurück (~250 px). Mitgezogen: Feld-Katalog (Tab-Zuordnung, Reihenfolge, korrigierte Engagementfeld-Frage), Validierungs-Tabname, Einstiegsseite, E2E-Spec, README, CLAUDE.md, docs/FELD-REFERENZ.md neu generiert. i18n: 11 geänderte Zeichenketten, .mo neu kompiliert (628 Einträge). Neu bin/check-i18n.py — vergleicht alle übersetzbaren Zeichenketten des Quellcodes gegen den Katalog und meldet Lücken mit Exit-Code 1. Verifiziert ohne lokalen Composer-Toolchain (Proxy blockt weiterhin api.github.com): php -l über alle geänderten Dateien, node --check, Katalog-Abdeckungslogik nachgestellt (beide Richtungen leer), Feld-Referenz deckungsgleich mit dem Generator, check-i18n.py bei 0. https://claude.ai/code/session_01JB1xUQM892bVZ4Yv3MZjvq
Der Upload stand als eigene Meta-Box in der Seitenleiste, während die Zugriffs-URL in Tab 3 lag — zwei Orte für denselben Sachverhalt, die zu widersprüchlichen Angaben einluden, ohne dass die Oberfläche den Zusammenhang zeigte. Das Widget steht jetzt unmittelbar unter der Zugriffs-URL, die Hilfetexte beider Felder verweisen aufeinander. Umsetzung: - render_file_meta_box() wird zu file_upload_html() und liefert Markup als String statt es auszugeben. - Eingehängt als Carbon-Fields-html-Feld mit Callback. Html_Field::to_json() ruft den Callback erst beim Rendern auf, dort steht der Beitragskontext zur Verfügung — der Dateizustand kommt also weiterhin vom Server und hängt nicht daran, dass JavaScript ihn nachträgt. - odw-file-upload.js nutzt delegierte Handler an document. Carbon Fields hängt Felder erst nach DOMContentLoaded ein und kann sie neu rendern; direkt gebundene Handler hätten ins Leere gegriffen. - save_file_attachment() unverändert; bricht weiterhin ohne Nonce ab, eine bestehende Verknüpfung geht also auch dann nicht verloren, wenn das Widget einmal nicht rendert. Verifiziert: php -l, node --check, Katalog-Abdeckung, check-i18n.py bei 0, Feld-Referenz unverändert. Die Interaktion mit wp.media lässt sich nur in einer laufenden Instanz prüfen — Auswahl, Speichern und Entfernen bitte einmal manuell testen. https://claude.ai/code/session_01JB1xUQM892bVZ4Yv3MZjvq
Nachtrag: Datei-Upload ins Formular geholt (v2.35.8)Der Upload-Umzug ist als eigener Commit ( Was sich ändertDer Upload stand als eigene Meta-Box in der Seitenleiste, die Zugriffs-URL in Tab 3 — zwei Orte für denselben Sachverhalt, ohne dass die Oberfläche den Zusammenhang zeigte. Das Widget steht jetzt unmittelbar unter der Zugriffs-URL, die Hilfetexte verweisen aufeinander. Wie
Was ich nicht prüfen konnteDie Interaktion mit Ein Restrisiko bleibt benennbar: Sollte Carbon Fields das Generated by Claude Code |
Setzt die vier Punkte um, die aus dem Usability-Test noch offen waren.
Tab-Zuschnitt nach inhaltlicher Zusammengehörigkeit
Schlagworte stehen jetzt in Tab 1 bei Thema, CESSDA-Klassifikation und Engagementfeld — alle vier beschreiben, worum es geht. Bei Sprache und Datumsangaben waren sie fehl am Platz. Sie bleiben oberhalb der aufklappbaren Untergruppe sichtbar; an ihnen hängen 30 MQA-Punkte, sie gehören nicht ins Optionale.
Die Erstveröffentlichung ist nach Tab 4 zur Aktualisierungsfrequenz gewandert — beide beschreiben die Aktualität des Datensatzes.
Tab 2 heißt „Sprache & Übersetzungen" und trägt jetzt sämtliche Übersetzungs-Repeater. Titel- und Beschreibungsübersetzungen standen vorher in Tab 1, die Schlagwortübersetzungen in Tab 2 — getrennt von ihresgleichen.
Zugriffsrechte vorbelegt
Neue Datensätze starten mit „Öffentlich" — sichtbar im Formular, jederzeit änderbar. Für ein Open-Data-Plugin ist das der Normalfall.
Bewusst kein Automatismus aus dem Beitragsstatus, obwohl der Tester das vorschlug: Das würde Metadaten im Hintergrund schreiben und nebenbei 20 MQA-Punkte vergeben — dasselbe Muster, das in v2.35.5 als Ursache des unerklärlichen Startwerts von 2 % behoben wurde.
HVD-Felder nennen ihre Geltung
High-Value-Datensätze sind eine Rechtskategorie der EU-Durchführungsverordnung 2023/138 und richten sich an öffentliche Stellen. Beschriftung und Hilfetext sagen das jetzt ausdrücklich, damit Vereine und Verbände die Felder überspringen können, ohne zu rätseln. Für Kommunen — ebenfalls Zielgruppe und öffentliche Stellen — bleiben sie unverändert nutzbar.
CESSDA-Feld war zu schmal
Das Eingabefeld war rund ein Fünftel so breit wie alle anderen und schnitt seinen Platzhalter ab. Ursache: Das Widget wird als Geschwister neben das ausgeblendete Carbon-Fields-Feld gesetzt und steht damit außerhalb von
.cf-field. Dessen Breitenregeln greifen dort nicht, und der Browser fiel auf die Standardbreite eines Textfelds zurück (size=20, ~250 px). Die neue Selektorkette setzt die Breite unabhängig davon.Mitgezogen
Feld-Katalog (Tab-Zuordnung, Reihenfolge, sowie die Engagementfeld-Frage, die noch die in v2.35.5 korrigierte alte Formulierung trug), Validierungs-Tabname, Einstiegsseite, E2E-Spec, README, CLAUDE.md,
docs/FELD-REFERENZ.mdneu generiert.Neu:
bin/check-i18n.py— vergleicht alle übersetzbaren Zeichenketten des Quellcodes gegen den Katalog und meldet Lücken mit Exit-Code 1. Bei elf umformulierten Zeichenketten in einem Durchgang ist Nachhalten von Hand unzuverlässig; das Skript hat prompt zwei Stellen gefunden, die ich übersehen hatte.Zur Prüfung
Der lokale Composer-Toolchain ist weiterhin nicht herstellbar (der Proxy blockt
api.github.comundcodeload.github.com, dort holt Composer jede Dist-Datei). Lokal verifiziert wurden:php -lüber alle geänderten PHP-Dateien,node --checkfür JStest_catalog_covers_all_form_fieldsnachgestellt — beide Richtungen leerdocs/FELD-REFERENZ.mddeckungsgleich mit dem Generator (erneuter Lauf erzeugt keine Änderung)bin/check-i18n.pymeldet 0 fehlende Übersetzungen;.moper gettext geprüftPHPUnit, PHPCS und PHPStan laufen in der CI. Bei Rot bessere ich anhand des Logs nach.
Nicht in diesem PR
Der Umzug des Upload-Buttons aus der Seitenleiste ins Formular folgt separat. Er berührt
wp.media, Nonce und Speicherpfad einer Kernfunktion, und ob die Skript-Bindung ein React-gerendertes Feld übersteht, lässt sich nur in einer laufenden Instanz feststellen — als eigener PR ist ein Fehler dort isoliert und leicht rückgängig zu machen.🤖 Generated with Claude Code
https://claude.ai/code/session_01JB1xUQM892bVZ4Yv3MZjvq
Generated by Claude Code