# П53 · 2022-07 · Работа при плохой сети — три прохода саморевью ## Рамка пакета - Slug: `editorial-2022-07-practice-poor-network`, `editorial-2022-07-mechanism-poor-network`, `editorial-2022-07-field-poor-network`. - Голос: М5, frontend-системщик 2022 года. Мост от ошибок формы и идемпотентности к пользовательскому сценарию: видимое состояние, владение черновиком, граница попытки и подтверждение результата. - Граница компетентности: нет выдуманного production SLO, инцидента, offline trace, browser-прогона, настоящего Fetch/HTTP, service worker или ответа сервера. Network labels, keys и acknowledgement — учебные значения модели. - Fixture: только локальные объекты и массивы. Она не создаёт DOM, storage API, worker, таймер или запрос. `unknown-outcome` означает отсутствие acknowledgement в модели, а не установленный факт о сети или сервере. ## Проход 1 — факты и техника - Историческая рамка проверена по датированному [WHATWG Fetch Review Draft, 19.12.2021](https://fetch.spec.whatwg.org/review-drafts/2021-12/), [W3C Service Workers Candidate Recommendation Draft, 12.07.2022](https://www.w3.org/TR/2022/CRD-service-workers-20220712/) и нормативному [RFC 9110, июнь 2022](https://www.rfc-editor.org/rfc/rfc9110.html). Текущие mutable-версии документации не используются как доказательство состояния 2022 года. - Убрана ложная цепочка «нет ответа → сервер ничего не сделал». В тексте остаётся только проверяемое утверждение: текущая модель не приняла acknowledgement с ожидаемыми ключами и версией. - Fixture разделяет `draft.version`, persisted copy, `requestKey`, `attemptKey`, phase и acknowledgement. Retry сохраняет logical request key и меняет attempt key; stale/duplicate payload не делает второй commit; acknowledgement старой версии не очищает более новый draft. - После финальной правки пройдены: `node --check web/scripts/upgrade-2022-07.mjs` — PASS; `node web/scripts/upgrade-2022-07.mjs --verify-fixture` — PASS 15/15; `npm run audit:draft -- scripts/upgrade-2022-07.mjs` — PASS. ## Проход 2 — редактура и голос - Первые два абзаца каждой статьи называют наблюдаемый сбой и цену: ложный success, дублирование действия, потерянный текст и невозможность объяснить состояние пользователю. - Речь строится по маршруту «симптом → причина → проверка → действие». Термины acknowledgement, request key, attempt key, stale reply и recovery привязаны к одной модели, а не используются как абстрактные признаки надёжности. - В каждой статье есть таблица, figure с содержательными alt/caption, исполнимый JS fixture, нумерованный маршрут, ограничения и проверяемый следующий шаг. - Размер основного текста проверяется самим скриптом: 8 276 / 9 358 / 9 319 знаков без списка источников. Все три текста попадают в целевой диапазон М5 8–10 тыс. и в обязательный диапазон 5–15 тыс. ## Проход 3 — визуал и выпуск - Три SVG отвечают на разные вопросы: user-visible network state, contract request/attempt/acknowledgement и диагностика/recovery. В них нет `script`, `foreignObject`, внешних URL или `data:image`. - Пройдены XML-проверка, safety scan без совпадений и Sharp-рендер всех SVG на ширине 375 px; на узком экране читаются названия состояний, ключевые ветки и нижняя граница модели. - Sidecar меняет только пять разрешённых файлов. Registry, README, `articles.json`, очередь, QUALITY_STANDARD, `docs/`, Git и чужие sidecar-файлы не затрагиваются. Интеграция и публикация не выполнялись. ## Независимый редакторский приём ### Проход 1 — источники и переходы Проверены доступность и статус фиксированных источников: WHATWG Fetch Review Draft декабря 2021 года, Service Workers Candidate Recommendation Draft 12 июля 2022 года и RFC 9110 отвечают `200`. Статья использует их только для исторической границы Fetch/HTTP/service worker; прикладные keys и acknowledgement остаются решениями учебной модели. В fixture усилены три проверки переходов. Снимок persisted draft теперь сохраняется сразу после offline block; stale acknowledgement сравнивает phase/request/attempt/acknowledgement до и после обработки; принятие старой версии сохраняет новый draft в отдельном снимке до duplicate branch. Это исключает ложный PASS, когда последующее действие маскирует раннюю мутацию. Ни Fetch, ни транспорт, ни сервер при этом не создаются. Fixture прошла **15/15 assertions**. ### Проход 2 — текст и полнота Перечитаны problem/cost, таблицы, исполнимые примеры, routes, rollback и границы трёх материалов. `unknown-outcome` везде означает отсутствие model acknowledgement, а не утверждение о судьбе серверного действия. Draft audit подтвердил 8 276 / 9 358 / 9 319 знаков; import-safe проверка вернула три revision-объекта без `date` и `author`. ### Проход 3 — визуал и выпуск `xmllint` прошёл; safety scan не нашёл script, `foreignObject`, внешних URL или `data:image`. Sharp-рендеры на 375 px просмотрены: схема видимых состояний, retry contract и diagnosis/recovery читаемы и отделяют model ack от ответа сервера. После подключения июля registry содержит 154 ревизии. Строгий slug-audit прошёл с одной figure, таблицей и code example на статью; production build успешно сгенерировал 374 страницы. Sidecar следующих месяцев не затрагиваются. ## Финальный вердикт П53 принята и интегрирована после трёх независимых проходов. В коммит войдут только пять файлов июля и два точечных файла интеграции.