# П50 · 2022-04 · Доступный интерфейс — три прохода саморевью ## Рамка пакета - Slug: `editorial-2022-04-practice-accessible-interface`, `editorial-2022-04-mechanism-accessible-interface`, `editorial-2022-04-field-accessible-interface`. - Голос: М5, системный практик 2022 года. Мост от рендеринга и frontend-сценариев к надёжности интерактивного изменения: имя, роль, состояние, маршрут фокуса и обратимое сохранение. - Граница компетентности: автор не заявляет a11y-платформу, production-дефект, user study, ручной screen-reader результат или полную доступность продукта. - Fixture: только локальные объекты/массивы. Все `focus`/`focusRoute` и `declaredAnnouncement` — проектные модельные значения. DOM, браузер, keyboard events, HTTP, accessibility tree и assistive technology не создаются и не наблюдаются. ## Проход 1 — факты и техника - Историческая рамка сверена с неизменяемой W3C Recommendation [WCAG 2.1, 05.06.2018](https://www.w3.org/TR/2018/REC-WCAG21-20180605/), датированной [WAI-ARIA Authoring Practices 1.2, 29.11.2021](https://www.w3.org/TR/2021/NOTE-wai-aria-practices-1.2-20211129/) и неизменяемым [WAI-ARIA 1.2 Candidate Recommendation Draft, 08.12.2021](https://www.w3.org/TR/2021/CRD-wai-aria-1.2-20211208/). Не используется будущая Recommendation 2023 года. - Убраны непроверяемые формулировки о том, что screen reader «объявил» текст: статьи говорят о declared status и требуют отдельной платформенной проверки. - Fixture отделяет draft `channel` от committed `savedChannel`; invalid branch не коммитит состояние, save оставляет prior value для одного undo, повторный undo останавливается. - Проверки после финальной правки: `node --check web/scripts/upgrade-2022-04.mjs` — PASS; `node web/scripts/upgrade-2022-04.mjs --verify-fixture` — PASS 16/16; `npm run audit:draft -- scripts/upgrade-2022-04.mjs` — PASS. ## Проход 2 — редактура и голос - В первых двух абзацах каждой статьи есть конкретный сбой и цена: потерянный фокус, разрыв visual/semantic state, неверный commit или непредсказуемый откат. - Основная речь следует маршруту «симптом → причина → проверка → действие». Термины `WCAG`, `role`, `radiogroup`, declared status и rollback привязаны к контракту одной панели, а не используются как общий лозунг. - В каждой статье есть таблица, рисунок с содержательным alt/caption, исполнимый детерминированный пример, нумерованный маршрут, ограничения и следующий шаг. - Размер основного текста проверяется самим скриптом: 8 002 / 8 743 / 8 980 знаков без списка источников; все значения в диапазоне 5 000–15 000. ## Независимый редакторский приём ### Проход 1 — факты и контракт Проверены даты, статусы и доступность трёх W3C URL: WCAG 2.1 — Recommendation 5 июня 2018 года; APG 1.2 — Group Note 29 ноября 2021 года; WAI-ARIA 1.2 — Candidate Recommendation Draft 8 декабря 2021 года. Все датированные URL ответили `200`. Источники используются только для критериев, практик и исторической границы; они не выдаются за результат проверки конкретной панели. Независимый просмотр fixture выявил разрыв между текстом и кодом: у статичных описаний `email`/`sms` признак `checked` не менялся после выбора SMS. Он удалён из статических descriptor-объектов. Новая `declaredOptionState()` выводит учебный selected state только из `channel`; добавлены assertions initial, выбора SMS и undo. Отдельно сохранён текст status до undo, поэтому assertion о save больше не проверяет сообщение rollback. Модель по-прежнему не создаёт DOM или `aria-checked` и не наблюдает accessibility tree. ### Проход 2 — речь и доказательства Повторно прочитаны problem/cost в первых двух абзацах, таблицы, код, маршруты и ограничения всех трёх статей. Они не обещают screen-reader speech, универсальную доступность или проведённое исследование. Целевой audit подтвердил 8 002 / 8 743 / 8 980 знаков, по одной figure и таблице в каждой статье и 1 / 1 / 1 code example. После правки fixture завершилась с **16/16 assertions**, а import-safe проверка вернула три объекта без `date` и `author`. ### Проход 3 — визуал и выпуск `xmllint` прошёл для всех SVG; safety scan не нашёл script, `foreignObject`, внешних URL или `data:image`. Sharp-рендеры на 375 px просмотрены: схема focus route, semantic contract и diagnosis/undo отвечают на разные вопросы и сохраняют читаемую границу «модель, не DOM». После подключения апреля registry содержит 145 ревизий. Строгий аудит slug прошёл; production build успешно сгенерировал 374 страницы. Материалы мая–июля этой партией не затрагиваются. ## Финальный вердикт П50 принята и интегрирована после трёх независимых проходов. В коммит войдут только пять файлов апреля и два точечных файла интеграции. ## Проход 3 — визуал и выпуск - SVG различаются по задаче: focus sequence, semantic/state contract и diagnosis/rollback. В них нет `script`, `foreignObject`, внешних URL или `data:image`. - Выполнены XML-проверка, safety scan без совпадений и рендер всех трёх SVG на ширине 375 px через Sharp; подписи и ключевые ветки остаются различимыми. - Sidecar не меняет registry, README, `articles.json`, очередь, стандарт качества, документацию или Git-состояние. Интеграция и публикация сознательно не выполнялись.