# П52 · 2022-06 · Ошибки формы — draft review ## Граница пакета - Slug: `editorial-2022-06-practice-form-errors`, `editorial-2022-06-mechanism-form-errors`, `editorial-2022-06-field-form-errors`. - Голос: М5, системный frontend-практик 2022 года. Текст начинается с конкретного пользовательского сбоя и отделяет проектную модель от наблюдений в браузере. - Пакет намеренно не меняет registry, README, базовый архив, документы, очередь, стандарт качества или Git-состояние. - Fixture — детерминированная in-memory модель. В ней нет HTTP, Fetch, сети, таймеров, DOM, браузера, screen reader, accessibility tree, реального server status, telemetry или пользовательского исследования. ## Источники и временная граница 1. [HTML 5.2, W3C Recommendation, 14 December 2017](https://www.w3.org/TR/2017/REC-html52-20171214/) — неизменяемая нормативная версия для form controls и constraint validation. 2. [WAI-ARIA 1.2, W3C Candidate Recommendation Draft, 8 December 2021](https://www.w3.org/TR/2021/CRD-wai-aria-1.2-20211208/) — датированный нормативный снимок для `aria-invalid` и `aria-errormessage`. 3. [WAI-ARIA Authoring Practices 1.2, W3C Group Note, 29 November 2021](https://www.w3.org/TR/2021/NOTE-wai-aria-practices-1.2-20211129/) — датированное официальное guidance, не подменяющее проверку конкретного интерфейса. Не использованы floating current docs как доказательство прошлого. Источники не подтверждают project-specific `attemptId`, version, retry или rollback: это явно обозначенные решения учебной модели. ## Проход 1 — факты и техника - Проверен сценарий с локально невалидным вводом, активной попыткой, изменением поля после submit, stale response, совпавшей server error, retry, duplicate response и одноразовым rollback. - В response сначала сопоставляется `attemptId`, затем versions снимка и текущих полей. Старый ответ не применяет message и снимает active attempt, поэтому новый input можно отправить повторно. - Semantic payload хранит только declared `invalid`, `describedBy`, `errorMessageId` и text. Он не выдаётся за DOM, accessibility tree или результат речи screen reader. - Rollback возвращает только последний локальный accepted snapshot и не называется отменой server-side действия. Повторный rollback блокируется. - `node --check` и `node web/scripts/upgrade-2022-06.mjs --verify-fixture`: PASS, 18/18 assertions. ## Проход 2 — редактура и голос - Практика: **6 756** знаков основного текста. - Механизм: **8 531** знак основного текста. - Поле: **8 820** знаков основного текста. - Во всех трёх материалах проблема и цена названы в первых двух абзацах; есть таблица, figure с alt/caption, исполнимый JS-пример, маршрут, ограничения и следующий проверяемый шаг. - Убраны неподтверждённые слова о production-инциденте, сетевой записи, реальной задержке и пользовательском исследовании. Формула текста выдержана: симптом → причина → проверка → действие. - М5 соблюдён: системность выражена через владение состоянием и проверяемый переход, а не через общий стратегический тон или выдуманные метрики. ## Проход 3 — визуал и выпуск sidecar - `node web/scripts/audit-editorial-draft.mjs scripts/upgrade-2022-06.mjs`: PASS для всех трёх slug. - XML проверен `xmllint --noout`; safety scan не нашёл `script`, `foreignObject`, external URL или `data:image`. - Каждая SVG — vector-only и отвечает на отдельный вопрос: автомат state, declared association ошибки, диагностика retry/rollback. - Рендеры Sharp на 375 px просмотрены вручную. После первого прохода увеличены шрифты и упрощены подписи в блоках, чтобы на узкой ширине сохранялись читаемые состояния и граница модели. - Выпуск, интеграция registry, production build, commit и push намеренно не выполнялись: это автономный sidecar из пяти файлов. ## Независимый редакторский приём ### Проход 1 — источники и переходы Проверены три датированных W3C URL: HTML 5.2 Recommendation 14 декабря 2017 года, WAI-ARIA 1.2 Candidate Recommendation Draft 8 декабря 2021 года и APG 1.2 Group Note 29 ноября 2021 года. Все ответили `200`; ни один документ не используется как доказательство сетевого ответа или поведения учебной формы. Независимый code review ужесточил fixture. Раньше assertions о stale response и очистке server error смотрели на финальное состояние длинного сценария. Теперь сохраняются `versionAfterEdit`, `staleServerError`, active attempt и semantic payload сразу в соответствующих переходах. Так тест ловит возврат старого сообщения до следующего retry, а не случайно проходит после позднего rollback. Модель всё ещё не выполняет HTTP, Fetch, DOM или доступность платформы. Fixture прошла **18/18 assertions**. ### Проход 2 — текст и границы Повторно прочитаны problem/cost, таблицы, code examples, ordered route и rollback во всех трёх статьях. Они различают local validation, active attempt, stale response, matching server error и accepted snapshot; `attemptId` и versions названы решениями пакета, а не свойствами HTML или ARIA. Draft audit подтвердил 6 756 / 8 531 / 8 820 знаков; import-safe проверка вернула три revision-объекта без `date` и `author`. ### Проход 3 — визуал и выпуск `xmllint` прошёл; safety scan не нашёл script, `foreignObject`, внешних URL или `data:image`. Sharp-рендеры на 375 px отдельно проверены: state machine, semantic association и diagnosis/recovery различают вопросы и не выдают локальные значения за browser trace. После подключения июня registry содержит 151 ревизию. Строгий slug-audit прошёл с одной figure, таблицей и code example на статью; production build успешно сгенерировал 374 страницы. Неинтегрированные материалы июля и позже не затрагиваются. ## Финальный вердикт П52 принята и интегрирована после трёх независимых проходов. В коммит войдут только пять файлов июня и два точечных файла интеграции.