Files
progcode/editorial/reviews/2027-07-draft.md
T
2026-07-31 22:26:56 +03:00

53 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Июль 2027 — техническая вычитка retry и идемпотентности
Три статьи разделяют решение о повторе, прикладную семантику операции и поля, которые позволяют расследовать исчерпанное время.
| Статья | Body без источников | Практический результат |
| --- | ---: | --- |
| <code>editorial-2027-07-practice-reliability-capstone</code> | 5 401 | локальный сервер 503 → 503 → 200 с общим deadline |
| <code>editorial-2027-07-mechanism-reliability-capstone</code> | 5 710 | локальный POST с idempotency key и одним resource id |
| <code>editorial-2027-07-field-reliability-capstone</code> | 5 677 | события попыток с remainingMs и decision |
## Проход 1 — факты, пример и источники
| Статья | До | После | Причина |
| --- | --- | --- | --- |
| Practice | Заголовок обещал общий deadline, а код ограничивал только число попыток. | В код добавлены deadline, вычисление остатка времени и <code>AbortSignal.timeout</code>; проверка метода сохранена. | Пример должен демонстрировать заявленный контракт, а не только цикл. |
| Mechanism | Локальный сервер мог создать впечатление полной дедупликации тела запроса. | В тексте прямо указано: учебный сервер читает только ключ; проверка тела, атомарность и срок хранения вынесены в ограничения. | Не выдавать Map за транзакционную реализацию. |
| Field | Событие содержало attempt и status, но не остаток времени. | Добавлено поле <code>remainingMs</code>, а fixture сохраняет отдельное состояние deadline. | Отделить исчерпанное время от ответа 503. |
Проверены первичные источники:
1. [RFC 9110 — HTTP Semantics](https://www.rfc-editor.org/rfc/rfc9110.html), IETF Standards Track, June 2022. Использован для safe/idempotent methods, статусов и <code>Retry-After</code>. Граница: 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 называет причину и действие. | Визуал стал полевым инструментом диагностики. |
<code>xmllint --noout</code> и SVG safety scan прошли для трёх файлов. Sharp отрендерил три изображения в ширине 375 px (<code>375×250</code> каждое); узлы, стрелки и нижние ограничения не обрезаны. Повторный scan 12-граммовых фрагментов с code включён, sources исключены: <code>0</code>.
## Итоговые проверки
- <code>node --check scripts/upgrade-2027-07.mjs</code> — PASS.
- <code>node scripts/upgrade-2027-07.mjs --verify-fixture</code> — PASS, <code>7/7</code>.
- <code>npm run audit:draft -- scripts/upgrade-2027-07.mjs</code> — PASS, 3/3 exact slugs.
- Три извлечённых примера запускаются локально: bounded retry, idempotency key и события попыток — <code>3/3</code>.
- Сквозное сравнение 349 материалов, 4 176 сравнений, sources исключены, code включён; совпадений — <code>0</code>.