Files
breadcrumb-the-shire/agent-system/runs/AUTH-LOGIN-ACCESSIBILITY-001/plan.json
2026-03-06 20:46:22 +01:00

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."
}
]
}