# Пакет 2026-09 — три редакторских прохода Пакет переписан как три самостоятельные технические статьи. В тексте нет описания авторской траектории, редакционного плана, даты отсечения источников, отчёта о публикации или обещаний о состоянии системы. Стабильные slug сохранены. ## Проход 1 — проблема, структура и практический результат Для каждой статьи выполнена отдельная замена предмета, а не косметическая правка. | Статья | Было | Стало | |---|---|---| | Practice | «План на сентябрь: карта границы между экраном и доменом» и рассуждение о synthetic hand-off | «Ответ 200 — ещё не модель экрана: валидируем JSON на границе UI и API»; в первых абзацах названы сломанный payload, цена рассинхрона и порядок проверки status → media type → JSON → screen model | | Mechanism | «План на сентябрь: на что boundary даёт право сделать вывод» и fixed literal ownership | «Состояние экрана не угадывают по статусу: разделяем query, command и ошибку»; добавлены 2xx/204/409/422/429/5xx, problem envelope и отдельная retry policy | | Field | «Сценарий на сентябрь: synthetic hand-off для границы UI и API» и карточка передачи | «UI и API расходятся: полевой протокол диагностики без догадок»; добавлены четыре наблюдения intent/request/response/render input и маршрутизация к adapter, cache или selector | Для всех трёх материалов добавлены самостоятельные разделы, доступные таблицы, SVG-схемы, кодовый пример, последовательность действий, ограничения и следующий шаг. Повторы между текстами убраны: у первой статьи центр тяжести — форма ответа, у второй — семантика результата, у третьей — локализация рассинхрона. ## Проход 2 — факты, техническая проверка и источники | Статья | Конкретная правка | Проверка границы | |---|---|---| | Practice | Убрано утверждение, что HTTP 200 равен успеху экрана; добавлена функция checkScreenResponse с закрытым словарём status/actions и непустым messageCode | 200 проверяется отдельно от runtime shape; 204 не проходит в JSON parser; generated types не выданы за runtime validation | | Mechanism | Убрана универсальная ветка «красный статус = сетевой сбой»; добавлена classifyHttpResponse с отдельными ветками 409/422 и 429/5xx | RFC 9110 используется только для HTTP semantics, RFC 9457 — только для Problem Details, OpenAPI — только для описания response variants | | Field | Убрана имитация UI/network trace; добавлена diagnoseBoundaryObservation, которая различает валидный response и устаревший render input | Код не обращается к сети, секретам или реальному браузеру; curl-пример ограничен чтением тестового ресурса и явно отделён от mutation | Проверяемые ссылки находятся в конце каждой статьи. Для каждой указаны название, версия/дата, конкретное использование и граница применимости. Внутренние выводы статьи не приписываются стандартам. ## Проход 3 — язык, визуальная подача и выпускная вычитка | Статья | До правки | После правки | |---|---|---| | Practice | «карта владельцев», «сценарий», «положительная ветка» | прагматичный глагольный маршрут: «проверить», «остановить», «не передавать в компонент» | | Mechanism | «hand-off», «approval», «synthetic» в основном тексте | короткие технические формулировки о response, problem detail, retry и read model | | Field | «передать карточку следующему reviewer» | конкретные поля диагностики, безопасные заголовки, порядок сравнения и критерий остановки | SVG переработаны под мобильную ширину: крупные подписи, один смысловой рисунок на статью, title/desc, содержательный alt и подпись. Убраны схемы, которые показывали редакционный процесс вместо технического механизма. ## Выполненные проверки - node --check scripts/upgrade-2026-09.mjs — pass. - node scripts/upgrade-2026-09.mjs --verify-fixture — 8/8; объём тел: 7 581, 6 998 и 8 459 знаков. - npm run audit:draft -- scripts/upgrade-2026-09.mjs — pass после добавления явного слова «Проблема» в открытие Mechanism. - xmllint --noout для трёх SVG — pass. - SVG safety scan — pass: нет script, foreignObject, javascript:, data:image и inline event handlers. Пакет не меняет articles.json, application-файлы, registry и чужие незакоммиченные изменения.