{ "task_id": "AUTH-LOGIN-ACCESSIBILITY-001", "summary": "Pruefe und verbessere den gesamten Auth-Login-Bereich auf offensichtliche Accessibility- und HTML-Grundlagenfehler (Semantik, Labels, Fehlermeldungen, Keyboard-Bedienbarkeit) und sichere die Verbesserungen ueber automatisierte Contract-Checks und verpflichtende Quality Gates ab.", "assumptions": [ "Scope umfasst den gesamten Auth-Login-Flow (Login, Register, Passwort-Reset, Verify-Views) inklusive login-spezifischem Layout/CSS.", "Backend-Authentifizierungslogik und Sicherheitsentscheidungen bleiben unveraendert; Fokus liegt auf HTML/A11y-Basics und deren Tests.", "Bei neu eingefuehrten oder angepassten UI-Texten werden i18n-Keys in de+en im selben Merge gepflegt." ], "scope": { "in": [ "pages/auth/login().php", "pages/auth/login(login).phtml", "pages/auth/register(login).phtml", "pages/auth/forgot(login).phtml", "pages/auth/reset(login).phtml", "pages/auth/verify(login).phtml", "pages/auth/verify-email(login).phtml", "templates/login.phtml", "web/css/pages/app-login.css", "tests/Architecture (neuer Auth-Login-A11y-Contract-Test)" ], "out": [ "Aenderungen an Auth-Businesslogik in lib/Service/Auth", "SSO/OIDC-Flow-Implementierungslogik ausserhalb von Markup-Zugaenglichkeit", "Redesign ausserhalb notwendiger Accessibility/HTML-Korrekturen", "Nicht-Auth-Bereiche in pages/admin und sonstigen Modulen" ] }, "guardrails": { "required_guard_ids": [ "GR-UI-009", "GR-UI-013", "GR-UI-014", "GR-UI-010", "GR-UI-015", "GR-CORE-005", "GR-SEC-001", "GR-TEST-002" ], "required_quality_gate_ids": [ "QG-001", "QG-002", "QG-003", "QG-005", "QG-006" ] }, "success_criteria": [ { "id": "SC-001", "criterion": "Alle im Scope liegenden Auth-Login-Views sind gegen eine feste HTML/A11y-Baseline geprueft (Form-Semantik, Labels, role/ARIA, Fokus, Keyboard) und die identifizierten offensichtlichen Verstosse sind behoben." }, { "id": "SC-002", "criterion": "Interaktive Elemente im Auth-Login-Flow nutzen semantisch korrekte HTML-Elemente (keine Link-als-Button-Fehlverwendung) und bleiben vollstaendig per Tastatur bedienbar." }, { "id": "SC-003", "criterion": "Fehlermeldungen und Hilfetexte in den Login-relevanten Formularen sind fuer Screenreader verstaendlich angebunden (z. B. role/aria-live/aria-describedby) und mit sichtbaren Labels konsistent." }, { "id": "SC-004", "criterion": "Die benoetigten UI-Zustaende loading, empty, error und success sind fuer den Auth-Login-Flow explizit spezifiziert und im betroffenen UI-Verhalten nachvollziehbar umgesetzt." }, { "id": "SC-005", "criterion": "Ein neuer Architektur-/Contract-Test deckt die vereinbarten offensichtlichen Login-HTML-A11y-Regeln ab und schlaegt bei Regressionen reproduzierbar fehl." }, { "id": "SC-006", "criterion": "Alle geforderten Quality Gates (QG-001, QG-002, QG-003, QG-005, QG-006) sind mit nachvollziehbarer Evidenz erfolgreich abgeschlossen." } ], "implementation_steps": [ { "id": "S1", "title": "A11y-Baseline und Findings-Matrix fuer Auth-Login erstellen", "description": "Fuehre einen strukturierten Review aller Scope-Templates durch und erfasse pro View konkrete HTML/A11y-Befunde (Element-Semantik, Label-Zuordnung, Error-Ausgabe, Tastaturpfad, problematische role/ARIA-Nutzung) als umsetzbare Checkliste.", "guard_refs": [ "GR-UI-009", "GR-UI-013" ] }, { "id": "S2", "title": "Semantische HTML-Korrekturen in Auth-Views umsetzen", "description": "Korrigiere offensichtliche Markup-Probleme in den Auth-Views: semantisch passende Controls statt role-Hacks, valide Formularstruktur mit eindeutigen Labels/IDs, und Entfernung von a11y-kritischen Inline-Mustern zugunsten sauberer Struktur.", "guard_refs": [ "GR-UI-013", "GR-UI-009", "GR-UI-010" ] }, { "id": "S3", "title": "Form-Feedback und Zustandskommunikation barrierefrei machen", "description": "Standardisiere Error-/Status-Ausgaben fuer Screenreader und Keyboard-Nutzer (z. B. role=alert oder aria-live, konsistente describedby-Verknuepfungen, klare Fokusfuehrung nach Fehlern) fuer Login-, Register-, Verify- und Reset-Formulare.", "guard_refs": [ "GR-UI-009", "GR-UI-013", "GR-UI-014" ] }, { "id": "S4", "title": "Tenant-Auswahl und alternative Login-Methoden absichern", "description": "Pruefe und verbessere die Tenant-Auswahl sowie lokale/Microsoft-Login-Optionen hinsichtlich Radiogroup-Semantik, Tastaturbedienung, Fokus-Feedback und verstaendlicher textueller Bezeichnung auch bei rein visuellen Darstellungen.", "guard_refs": [ "GR-UI-009", "GR-UI-013", "GR-CORE-005" ] }, { "id": "S5", "title": "Automatischen Auth-Login-A11y-Contract-Test einfuehren", "description": "Erstelle in tests/Architecture einen fokussierten Contract-Test fuer offensichtliche Login-HTML-A11y-Regeln (u. a. keine role=button-Links im Scope, erwartete Error-Live-Regionen, grundlegende Formular-Semantik), damit Regressionen im CI-Lauf sichtbar werden.", "guard_refs": [ "GR-UI-009", "GR-UI-013", "GR-TEST-002" ] }, { "id": "S6", "title": "i18n und Sicherheitsinvarianten nachziehen", "description": "Stelle sicher, dass alle neu eingefuehrten sichtbaren Texte ueber t() laufen, neue Keys in de/en vorhanden sind und bestehende Login-Sicherheitsinvarianten (insbesondere CSRF-Schutz auf POST-Flows) unberuehrt bleiben.", "guard_refs": [ "GR-UI-010", "GR-UI-015", "GR-SEC-001" ] }, { "id": "S7", "title": "Quality Gates und manuelle Accessibility-Smokes durchfuehren", "description": "Fuehre QG-001, QG-002, QG-003, QG-005 und QG-006 aus; dokumentiere Testevidenz inkl. Keyboard-Only-Smoke fuer alle Auth-Login-Stages und bestaetige, dass keine A11y-Regression in den geaenderten Views verbleibt.", "guard_refs": [ "GR-UI-009", "GR-UI-013" ] } ], "tests": [ "Neuer Architekturtest: tests/Architecture/AuthLoginAccessibilityContractTest.php (Scope-basierte HTML/A11y-Basics-Regeln)", "Bestehende Architekturtests inkl. tests/Architecture/CoreStarterkitContractTest.php", "QG-001: docker compose exec php vendor/bin/phpunit", "QG-002: docker compose exec php vendor/bin/phpstan analyse -c phpstan.neon --no-progress", "QG-003: docker compose exec php vendor/bin/phpunit tests/Architecture/CoreStarterkitContractTest.php", "QG-005: manueller Browser-Smoke (Tab-Reihenfolge, Enter/Space-Aktivierung, Fokus-Sichtbarkeit, Fehleransage auf Auth-Login-Views)", "QG-006: docker compose exec php composer cs:check" ], "acceptance_checks": [ "SC-001: Pro Scope-Datei liegt ein abgearbeiteter A11y-Check vor und alle als offensichtlich eingestuften HTML/A11y-Verstoesse sind entfernt.", "SC-002: Im Scope existiert kein verbleibendes role=\"button\" auf Links fuer button-aehnliche Interaktionen; Keyboard-Navigation durchgaengig pruefbar.", "SC-003: Error-Ausgaben in Auth-Formularen sind als Live-Region/Alert nutzbar und relevante Inputs sind ueber Label/DescribedBy eindeutig verknuepft.", "SC-004: Loading-, Empty-, Error- und Success-Zustaende sind fuer den Auth-Login-Flow dokumentiert und im Verhalten/Markup nachvollziehbar abgebildet.", "SC-005: Der neue AuthLoginAccessibilityContractTest ist implementiert, laeuft gruen und faellt bei gezielter Regelverletzung reproduzierbar aus.", "SC-006: QG-001, QG-002, QG-003, QG-005 und QG-006 sind mit PASS und kurzer Evidenz dokumentiert." ], "ux_notes": { "affected_patterns": [ "Auth login layout in templates/login.phtml", "Auth form cards in pages/auth/*(login).phtml", "Tenant selection pattern (login-tenant-choice-grid)", "Notice/error pattern (notice[data-variant])", "Password hint pattern (data-password-hints)" ], "ui_states_required": [ "loading", "empty", "error", "success" ], "a11y_touchpoints": [ "Email-, Password-, Code- und Name-Inputs in Auth-Formularen", "Tenant-Radioauswahlkarten inklusive Fokuszustand", "Remember-me Checkbox", "Continue/Login/Register/Verify/Reset/Back Buttons", "Microsoft Sign-in Call-to-Action als semantischer Link-Button", "Fehler- und Hinweisboxen als Screenreader-relevante Live-Regionen" ] }, "risks": [ { "risk": "Markup-Korrekturen im Auth-Bereich koennen unbeabsichtigt Flow- oder Styling-Regressions verursachen.", "mitigation": "Aenderungen auf semantische Minimaldeltas begrenzen, pro Stage Keyboard-Smoke durchfuehren und alle geforderten Quality Gates inkl. Full PHPUnit laufen lassen." }, { "risk": "Zu strenge oder unpraezise Contract-Test-Regeln koennen false positives erzeugen und CI instabil machen.", "mitigation": "Regeln eng auf offensichtliche, objektiv pruefbare Basics begrenzen und Testmeldungen mit klaren Dateihinweisen formulieren." }, { "risk": "Neue Hilfs- oder Status-Texte ohne vollstaendige i18n-Pflege fuehren zu inkonsistenter UI.", "mitigation": "Jede neue t()-Key-Einfuehrung parallel in default_de.json und default_en.json pruefen und im Review explizit abhaken." } ] }