{ "task_id": "AUTH-LOGIN-A11Y-REGRESSION-001", "summary": "Isolierter Fix fuer den QG-001 Blocker im Auth-Login-Flow: fehlender Tenant-Label-Marker login-tenant-select-label in der choose_tenant-Stage wiederherstellen, Accessibility-Semantik intakt halten und Full PHPUnit wieder gruen bekommen.", "assumptions": [ "Der Fehler ist eine Regression im Markup von pages/auth/login(login).phtml und nicht in Service- oder Auth-Logik.", "Der bestehende Contract-Test AuthLoginAccessibilityContractTest bleibt bestehen und wird nicht abgeschwaecht.", "Es sind keine DB- oder Backend-Flow-Aenderungen erforderlich." ], "scope": { "in": [ "Tenant-Auswahl-Markup in pages/auth/login(login).phtml (choose_tenant stage)", "Bei Bedarf minimale, additive CSS-Korrektur in web/css/pages/app-login.css fuer legend/label Darstellung", "Verifikation ueber bestehenden Architecture-Contract-Test und Full PHPUnit" ], "out": [ "Theme-Flow oder Tenant-Switch Logik ausserhalb Auth-Login", "Aenderungen an Auth-Service-Businesslogik in lib/Service/Auth", "Neues UI-Redesign oder Umbau des gesamten Auth-Login-Bereichs" ] }, "guardrails": { "required_guard_ids": [ "GR-UI-009", "GR-UI-013", "GR-UI-010", "GR-TEST-001" ], "required_quality_gate_ids": [ "QG-001", "QG-002", "QG-003", "QG-006" ] }, "success_criteria": [ { "id": "SC-001", "criterion": "Die choose_tenant-Stage enthaelt wieder eine klare textuelle Gruppenbezeichnung mit dem Marker login-tenant-select-label im Fieldset-Kontext." }, { "id": "SC-002", "criterion": "AuthLoginAccessibilityContractTest ist gruen ohne Abschwaechung der Assertions." }, { "id": "SC-003", "criterion": "QG-001 (Full PHPUnit) laeuft wieder erfolgreich ohne diesen Fail." }, { "id": "SC-004", "criterion": "Keine Regression bei PHPStan/CoreStarterkitContract/CS-Check." } ], "implementation_steps": [ { "id": "S1", "title": "Regression reproduzieren und Ursache fixieren", "description": "Aktuellen Failure in AuthLoginAccessibilityContractTest bestaetigen und die fehlende Marker-Stelle im choose_tenant Fieldset lokalisieren.", "guard_refs": [ "GR-TEST-001", "GR-UI-009" ] }, { "id": "S2", "title": "Tenant-Label semantisch wiederherstellen", "description": "In pages/auth/login(login).phtml innerhalb von fieldset.login-tenant-fieldset eine textuelle Gruppenbezeichnung mit Klasse login-tenant-select-label einfuegen (bevorzugt als legend), i18n-konform mit t().", "guard_refs": [ "GR-UI-013", "GR-UI-010" ] }, { "id": "S3", "title": "Darstellung stabilisieren", "description": "Nur falls notwendig minimale additive CSS-Anpassung fuer legend/label vornehmen, ohne bestehende Tastatur- oder Screenreader-Semantik zu verschlechtern.", "guard_refs": [ "GR-UI-009", "GR-UI-013" ] }, { "id": "S4", "title": "Gates ausfuehren und evidenzbasiert abschliessen", "description": "QG-001, QG-002, QG-003 und QG-006 ausfuehren und in execution-report dokumentieren.", "guard_refs": [ "GR-TEST-001", "GR-UI-009" ] } ], "tests": [ "docker compose exec php vendor/bin/phpunit tests/Architecture/AuthLoginAccessibilityContractTest.php --no-progress", "docker compose exec php vendor/bin/phpunit", "docker compose exec php vendor/bin/phpstan analyse -c phpstan.neon --no-progress", "docker compose exec php vendor/bin/phpunit tests/Architecture/CoreStarterkitContractTest.php", "docker compose exec php composer cs:check" ], "acceptance_checks": [ "SC-001: login-tenant-select-label ist in pages/auth/login(login).phtml im choose_tenant-Fieldset vorhanden und textuell befuellt.", "SC-002: AuthLoginAccessibilityContractTest meldet PASS.", "SC-003: Full PHPUnit (QG-001) meldet PASS ohne den bisherigen Tenant-Label-Fehler.", "SC-004: QG-002, QG-003 und QG-006 melden PASS." ], "ux_notes": { "affected_patterns": [ "Auth tenant selection fieldset in login choose_tenant stage" ], "ui_states_required": [ "error", "success" ], "a11y_touchpoints": [ "Fieldset/legend semantics for tenant radio group", "Text label visibility for tenant selection group", "Keyboard-operable radio selection unchanged" ] }, "risks": [ { "risk": "Visuelle Nebenwirkung durch legend-Einfuehrung im bestehenden Login-Layout.", "mitigation": "Nur minimale additive CSS-Anpassung, keine strukturellen Layout-Umbauten." }, { "risk": "Scheinbarer Fix durch Test-Anpassung statt Markup-Korrektur.", "mitigation": "Contract-Test nicht abschwaechen; Marker semantisch im Template wiederherstellen." } ] }