[Mineur] Accessibilité : contrôles sans nom accessible et focus non piégé dans les modales #162

Closed
opened 2026-10-28 10:32:33 +00:00 by asventi · 0 comments
Owner

Gravité : Mineur
Rapports QA d'origine : SECURITY_UX-20, SECURITY_UX-23

Détails des rapports

[SECURITY_UX-20] Accessibilité : contrôles sans nom accessible — Gravité : Mineur
  • Où : /admin/roles : 224 <input type=checkbox> (matrice des permissions) sans <label>/aria-label ; /calendar : 2 boutons icône sans nom (probablement mois précédent/suivant) ; /knowledge : 1 bouton icône sans nom ; champs de recherche (/, /messages, /channels/:id) sans label (placeholder seul) ; <img> sans attribut alt (logo icon-tile.svg sur chaque page, avatars /api/files/..., image décorative de login/register).
  • Preuve : sortie du script d'audit (document.querySelectorAll + calcul de nom accessible) sur chaque page, admin connecté.
[SECURITY_UX-23] Pas de piège du focus dans les modales (Invite, Nouvel évènement) ; le menu compte n'a pas de sémantique de dialogue — Gravité : Mineur
  • Où : bouton « Invite » (sidebar), bouton « + Event » (/calendar), menu « Settings » (engrenage)
  • Étapes : 1. Ouvrir la modale Invite. 2. Appuyer 25 fois sur Tab en vérifiant dialog.contains(document.activeElement).
  • Attendu : le focus reste dans la modale (role=dialog aria-modal=true est bien présent).
  • Obtenu : Invite : le focus sort de la modale 14 fois sur 25 (il va dans la sidebar/page derrière) ; Nouvel évènement : 1 fois ; le focus initial d'Invite est sur un DIV et non sur un contrôle. Le panneau « Account Info » (Settings) n'a ni role=dialog ni trap : Tab passe dans les liens de la sidebar derrière. Escape ferme bien les trois ; le focus visible existe (outline 1px solid).
  • Preuve : screens/security_ux_modal_invite.png, security_ux_modal_settings.png

Trouvé par une campagne de tests QA automatisés (agents Claude, Playwright) sur l'environnement de dev. Les captures citées sont locales et non jointes.

**Gravité :** Mineur **Rapports QA d'origine :** SECURITY_UX-20, SECURITY_UX-23 ## Détails des rapports <details><summary>[SECURITY_UX-20] Accessibilité : contrôles sans nom accessible — Gravité : Mineur</summary> - Où : `/admin/roles` : 224 `<input type=checkbox>` (matrice des permissions) sans `<label>`/`aria-label` ; `/calendar` : 2 boutons icône sans nom (probablement mois précédent/suivant) ; `/knowledge` : 1 bouton icône sans nom ; champs de recherche (`/`, `/messages`, `/channels/:id`) sans label (placeholder seul) ; `<img>` sans attribut `alt` (logo `icon-tile.svg` sur chaque page, avatars `/api/files/...`, image décorative de login/register). - Preuve : sortie du script d'audit (`document.querySelectorAll` + calcul de nom accessible) sur chaque page, admin connecté. </details> <details><summary>[SECURITY_UX-23] Pas de piège du focus dans les modales (Invite, Nouvel évènement) ; le menu compte n'a pas de sémantique de dialogue — Gravité : Mineur</summary> - Où : bouton « Invite » (sidebar), bouton « + Event » (`/calendar`), menu « Settings » (engrenage) - Étapes : 1. Ouvrir la modale Invite. 2. Appuyer 25 fois sur Tab en vérifiant `dialog.contains(document.activeElement)`. - Attendu : le focus reste dans la modale (`role=dialog aria-modal=true` est bien présent). - Obtenu : Invite : le focus sort de la modale 14 fois sur 25 (il va dans la sidebar/page derrière) ; Nouvel évènement : 1 fois ; le focus initial d'Invite est sur un `DIV` et non sur un contrôle. Le panneau « Account Info » (Settings) n'a ni `role=dialog` ni trap : Tab passe dans les liens de la sidebar derrière. Escape ferme bien les trois ; le focus visible existe (outline 1px solid). - Preuve : `screens/security_ux_modal_invite.png`, `security_ux_modal_settings.png` </details> --- _Trouvé par une campagne de tests QA automatisés (agents Claude, Playwright) sur l'environnement de dev. Les captures citées sont locales et non jointes._
asventi self-assigned this 2026-10-30 17:19:09 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Transcendence/frontend#162
No description provided.