# Июль 2027 — техническая вычитка retry и идемпотентности Три статьи разделяют решение о повторе, прикладную семантику операции и поля, которые позволяют расследовать исчерпанное время. | Статья | Body без источников | Практический результат | | --- | ---: | --- | | editorial-2027-07-practice-reliability-capstone | 5 401 | локальный сервер 503 → 503 → 200 с общим deadline | | editorial-2027-07-mechanism-reliability-capstone | 5 710 | локальный POST с idempotency key и одним resource id | | editorial-2027-07-field-reliability-capstone | 5 677 | события попыток с remainingMs и decision | ## Проход 1 — факты, пример и источники | Статья | До | После | Причина | | --- | --- | --- | --- | | Practice | Заголовок обещал общий deadline, а код ограничивал только число попыток. | В код добавлены deadline, вычисление остатка времени и AbortSignal.timeout; проверка метода сохранена. | Пример должен демонстрировать заявленный контракт, а не только цикл. | | Mechanism | Локальный сервер мог создать впечатление полной дедупликации тела запроса. | В тексте прямо указано: учебный сервер читает только ключ; проверка тела, атомарность и срок хранения вынесены в ограничения. | Не выдавать Map за транзакционную реализацию. | | Field | Событие содержало attempt и status, но не остаток времени. | Добавлено поле remainingMs, а fixture сохраняет отдельное состояние deadline. | Отделить исчерпанное время от ответа 503. | Проверены первичные источники: 1. [RFC 9110 — HTTP Semantics](https://www.rfc-editor.org/rfc/rfc9110.html), IETF Standards Track, June 2022. Использован для safe/idempotent methods, статусов и Retry-After. Граница: RFC не выбирает retry policy конкретного API. 2. [RFC 9000 — QUIC](https://www.rfc-editor.org/rfc/rfc9000.html), IETF Standards Track, May 2021. Использован для отделения транспортного состояния от прикладной семантики. Граница: транспортный RFC не доказывает применение бизнес-операции. Обе страницы отвечают HTTP 200. В статьях явно разделены транспортный факт, HTTP-ответ и состояние операции. ## Проход 2 — структура, голос и плотность | Статья | До | После | Причина | | --- | --- | --- | --- | | Practice | Введение могло звучать как рекомендация «повторять всегда». | Первые абзацы начинаются с двойной записи и сразу задают три ограничения: метод, deadline, attempts. | Безопасность повторения должна быть условием, а не лозунгом. | | Mechanism | Термины connection id, request id и idempotency key шли подряд без задачи. | Добавлена таблица «кто создаёт → что доказывает» и отдельный локальный POST. | Термины привязаны к наблюдаемому действию. | | Field | Лог retry описывался через общий «сбой». | Причина и decision разделены; добавлены примеры timeout, 503, 429 и POST. | Событие должно подсказывать следующий безопасный запрос. | Речь короткая и техническая: «повторить», «отказать», «проверить состояние», «сохранить». Нет рассказа о внутреннем процессе создания материала или о несуществующем эксплуатационном опыте. ## Проход 3 — визуал, доступность и повторы | Статья | До | После | Причина | | --- | --- | --- | --- | | Practice | Дерево решения не показывало deadline до проверки метода. | SVG сначала проверяет оставшееся время, затем безопасность метода; alt и подпись повторяют порядок. | Исправить причинность решения. | | Mechanism | Схема смешивала транспорт и бизнес-результат. | SVG разделяет транспорт, HTTP и операцию, а нижняя карточка показывает GET/POST-действие. | Не обещать транспортную гарантию бизнес-эффекта. | | Field | Loop выглядел как общий hand-off. | SVG показывает Attempt 1 → Attempt 2 → Decision и поля события; caption называет причину и действие. | Визуал стал полевым инструментом диагностики. | xmllint --noout и SVG safety scan прошли для трёх файлов. Sharp отрендерил три изображения в ширине 375 px (375×250 каждое); узлы, стрелки и нижние ограничения не обрезаны. Повторный scan 12-граммовых фрагментов с code включён, sources исключены: 0. ## Итоговые проверки - node --check scripts/upgrade-2027-07.mjs — PASS. - node scripts/upgrade-2027-07.mjs --verify-fixture — PASS, 7/7. - npm run audit:draft -- scripts/upgrade-2027-07.mjs — PASS, 3/3 exact slugs. - Три извлечённых примера запускаются локально: bounded retry, idempotency key и события попыток — 3/3. - Сквозное сравнение 349 материалов, 4 176 сравнений, sources исключены, code включён; совпадений — 0.