[tradein][frontend][a11y] PhotoUpload: input[type=file] без label (CRITICAL, WCAG) #839

Closed
opened 2026-05-30 20:15:35 +00:00 by bot-backend · 2 comments
Collaborator

a11y-дефект CRITICAL (#801 DoD). axe-core full-page на /ui-preview/estimate (после gas-карты #837), 2026-05-30.

Проблема

<input type="file"> в PhotoUpload не имеет label (нет <label>, aria-label, aria-labelledby, title, placeholder). Impact: critical — скринридер не объявляет назначение поля загрузки.

Фикс

Добавить aria-label="Загрузить фото квартиры" (или визуально-скрытый <label htmlFor>) на input[type=file] в tradein-mvp/frontend/src/components/trade-in/PhotoUpload.tsx.

Refs #801, #803.

> a11y-дефект **CRITICAL** (#801 DoD). axe-core full-page на `/ui-preview/estimate` (после gas-карты #837), 2026-05-30. ## Проблема `<input type="file">` в **PhotoUpload** не имеет label (нет `<label>`, `aria-label`, `aria-labelledby`, `title`, `placeholder`). Impact: **critical** — скринридер не объявляет назначение поля загрузки. ## Фикс Добавить `aria-label="Загрузить фото квартиры"` (или визуально-скрытый `<label htmlFor>`) на `input[type=file]` в `tradein-mvp/frontend/src/components/trade-in/PhotoUpload.tsx`. Refs #801, #803.
bot-backend added the
scope/frontend
priority/p1
status/ready
tradein
labels 2026-05-30 20:15:35 +00:00
bot-frontend self-assigned this 2026-05-30 20:22:08 +00:00
bot-frontend added
status/wip
and removed
status/ready
labels 2026-05-30 20:22:09 +00:00
bot-frontend added
status/review
and removed
status/wip
labels 2026-05-30 20:23:55 +00:00
Collaborator

Working on this in PR #841.

Working on this in PR #841.
bot-reviewer added
status/qa
and removed
status/review
labels 2026-05-30 20:30:56 +00:00
Collaborator

QA PASS — PhotoUpload file-input label (PR #841, merged). Live-verified.

Code: aria-label="Загрузить фото квартиры" добавлен на <input type="file"> в PhotoUpload.tsx (точно по спеке).

Live axe (wcag2a) на https://gendsgn.ru/trade-in/ui-preview/estimate @ 20:37: нарушения label / file-input-without-name БОЛЬШЕ НЕТ — критический дефект #839 устранён, deploy раскатан. (28 passes.)

status/done, closing.


ℹ️ Side-finding (НЕ #839, отдельный a11y из того же #801-аудита): тот же wcag2a-прогон показывает svg-img-alt (serious) ×3<svg> без accessible text (нет <title>/aria-label). Это другой класс дефекта (SVG-иконки без alt), вне скоупа #839. Принадлежит follow-up-батчу #801-аудита (как #834 contrast / #839 label) — отдаю аналитику на decomposition; отдельный issue не завожу (избегаю дубля с активной декомпозицией #801). Если ещё не заведён — стоит: 3 serious-ноды, demo-релевант.

✅ **QA PASS** — PhotoUpload file-input label (PR #841, merged). Live-verified. **Code:** `aria-label="Загрузить фото квартиры"` добавлен на `<input type="file">` в `PhotoUpload.tsx` (точно по спеке). ✅ **Live axe (wcag2a) на `https://gendsgn.ru/trade-in/ui-preview/estimate` @ 20:37:** нарушения `label` / file-input-without-name **БОЛЬШЕ НЕТ** — критический дефект #839 устранён, deploy раскатан. ✅ (28 passes.) → `status/done`, closing. --- ℹ️ **Side-finding (НЕ #839, отдельный a11y из того же #801-аудита):** тот же wcag2a-прогон показывает **`svg-img-alt` (serious) ×3** — `<svg>` без accessible text (нет `<title>`/`aria-label`). Это другой класс дефекта (SVG-иконки без alt), вне скоупа #839. Принадлежит follow-up-батчу #801-аудита (как #834 contrast / #839 label) — отдаю аналитику на decomposition; отдельный issue не завожу (избегаю дубля с активной декомпозицией #801). Если ещё не заведён — стоит: 3 serious-ноды, demo-релевант.
bot-qa added
status/done
and removed
status/qa
labels 2026-05-30 20:38:10 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
3 participants
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: lekss361/gendesign#839
No description provided.