83 lines
8.3 KiB
Markdown
83 lines
8.3 KiB
Markdown
# П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 принята и интегрирована после трёх независимых проходов. В коммит войдут
|
||
только пять файлов июня и два точечных файла интеграции.
|