198 lines
9.5 KiB
JSON
198 lines
9.5 KiB
JSON
|
|
{
|
||
|
|
"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."
|
||
|
|
}
|
||
|
|
]
|
||
|
|
}
|