# P96 · 2026-02 · Устойчивость к отказам — трёхпроходное self-review ## Граница пакета Проверен только изолированный overlay для трёх slug: - editorial-2026-02-practice-resilience - editorial-2026-02-mechanism-resilience - editorial-2026-02-field-resilience Все компоненты, маршруты, попытки, budgets, fallback, replica names, latency units, failure injection и trace — fixed synthetic JavaScript literals в памяти. Пакет не использует сеть, filesystem, clock, telemetry, Git, CI, PII, клиентов, реальную инфраструктуру или production data. Положительный статус строго равен synthetic resilience review hand-off. ## Проход 1 — problem, cost, голос и самостоятельность Проверено 2026-07-31. - Practice начинает с частичного сбоя и цены лишней работы в ослабленном маршруте. Механизм статьи — карта расширения logical work, один retry owner и ранний limit point. - Mechanism начинает с ошибки настройки timeout без модели ширины работы. Механизм статьи — различение attempts, fan-out, fallback и limit как разных осей, плюс консервативная верхняя граница fixed записи. - Field начинает словами «Проблема каскадного сбоя» и ценой неясной точки остановки. Механизм статьи — допуск к сравнению по comparison key и review trace до вывода о репликации. - Каждая статья имеет отдельный problem/cost, таблицу, последовательность, executable example, safe SVG и отдельное ограничение метода. Нет общей вводной, общего тела либо общего финального совета. - Голос М9: короткая прагматичная техническая речь; декларации эффекта заменены условиями, границами и следующими действиями. - Первый запуск audit выявил конкретный дефект field: в раннем фрагменте не было явного слова о проблеме. Введено «Проблема каскадного сбоя», затем audit повторён успешно. Итоговые объёмы основного текста без раздела источников: | Статья | Знаков | Решение | | --- | ---: | --- | | practice | 9 230 | PASS, внутри диапазона 5 000–15 000 | | mechanism | 9 177 | PASS, внутри диапазона 5 000–15 000 | | field | 9 252 | PASS, внутри диапазона 5 000–15 000 | ## Проход 2 — источники, историческая граница и исполнимость Проверено 2026-07-31, историческая граница источников: не позднее 2026-02-28. | Pin | Проверенный факт | Применение | Явная граница | | --- | --- | --- | --- | | [Google SRE Book, архивный capture 2025-01-23](https://web.archive.org/web/20250123164219id_/https://sre.google/sre-book/addressing-cascading-failures/) | Глава описывает каскад как положительную обратную связь, retry budget и риск произведения попыток на нескольких уровнях. | Контекст для обсуждения каскада и одного владельца retry. | Это исторический текст, не trace и не capacity-доказательство fixture. | | [gRPC A6, immutable commit dc9fd4fe5b94b90b82fe2833ad1d80938e6a49c1](https://raw.githubusercontent.com/grpc/proposal/dc9fd4fe5b94b90b82fe2833ad1d80938e6a49c1/A6-client-retries.md) | Commit authored 2024-08-29. A6 определяет maxAttempts, throttling, token_count и ограничения retry/hedging. | Термины и boundary retry policy. | Proposal не запускается в модуле и не доказывает эффект synthetic сценария. | | [RFC 9110](https://www.rfc-editor.org/rfc/rfc9110.html) | Неизменяемая RFC publication, June 2022; sections 10.2.3 и 15.6.4 задают семантику Retry-After и 503. | Узкая трактовка временной недоступности сообщения. | RFC не определяет владельца retry, idempotency операции или fan-out данного record. | Точечные fetch-проверки подтвердили capture, Git SHA и дату, а также именно те утверждения, которые пересказаны в source lists. В каждой статье видимы version/date и immutable URL. Стандарт и документация нигде не выданы за измерение эффекта fixture. Все три видимых snippets использовали только public exports и были исполнены буквально из каталога web/scripts: - accepted record: synthetic-resilience-ready, handoff synthetic-resilience-review; - negative record: stop-retry-amplification с причиной одного владельца и конечной границы; - comparison: stop-incomparable-scenario. Fixture намеренно fail-closed для retry amplification, anonymous fallback, unbounded replication, отсутствующего limit point, несопоставимого scenario и unknown input. Никакой output не содержит production effect: значение равно not-attempted. ## Проход 3 — визуалы, mobile, структура и команды Проверено 2026-07-31. - Проверены три оригинальные SVG: каскадный граф, матрица деградации и loop review. - XML валиден. Safety scan не нашёл script, foreignObject, javascript URI, data:image или inline handler. - Sharp создал PNG-рендеры всех трёх SVG при ширине 375 px; каждый затем был просмотрен визуально. - Первый mobile review нашёл обрезанные заголовки у матрицы и feedback loop, а также переполненную подпись stop. Подписи сокращены; повторный 375 px render читаем и не обрезан. - Cross-article scan по основному тексту без source lists: 0 общих 12-словных фрагментов во всех трёх парах. Фактические команды: | Команда | Результат | | --- | --- | | node --check web/scripts/upgrade-2026-02.mjs | PASS | | node web/scripts/upgrade-2026-02.mjs --verify-fixture | PASS, 16/16 assertions | | npm run audit:draft -- scripts/upgrade-2026-02.mjs | PASS для всех трёх slug | | xmllint --noout для трёх SVG | PASS | | rg safety scan для трёх SVG | PASS, 0 matches | | Sharp render 375 px | PASS, 3 PNG; повторный PASS для двух исправленных SVG | | git diff --check | PASS | Npm вывел только существующие предупреждения о неизвестных user config store-dir, cache-dir и public-hoist-pattern; проверка пакета завершилась с кодом 0. ## Итог draft-прохода На момент передачи draft-пакет был готов к независимой приёмке; registry, README, app files, articles.json, очередь, чужие изменения, staging, commit и push не были затронуты. ## Независимая приёмка основного редактора Основания пакета сверены повторно по закреплённым первоисточникам. Wayback capture Google SRE Book от 23 января 2025 года прямо определяет каскад как positive feedback, показывает перегрузку оставшихся реплик и отдельно предупреждает, что retry на нескольких уровнях может перемножить попытки. GitHub API подтвердил exact gRPC A6 SHA `dc9fd4fe5b94b90b82fe2833ad1d80938e6a49c1` и author date `2024-08-29T15:14:35Z`; pinned text содержит retry policy, hedging и `maxAttempts`. Immutable RFC 9110 подтверждает разделы Retry-After и 503 Service Unavailable. Ни одно утверждение о synthetic карточках не выдано за факт этих источников. Все три snippets исполнены из public exports: accepted record вернул `synthetic-resilience-ready` с owner `edge` и конечными границами; негативный record вернул `stop-retry-amplification`; сравнение разных ключей вернуло `stop-incomparable-scenario`. Fixture содержит **16** истинных assertions и во всех положительных и отрицательных путях оставляет `productionEffect: not-attempted`. После подключения overlay production-аудит подтвердил 9 230 / 9 177 / 9 252 знака, по одной figure, table и code example. В `editorialRevisions` теперь **283** записи; каждый февральский slug присутствует ровно один раз. Строгая cross-article проверка полного body, включая code и без source list, дала 0 одинаковых абзацев длиной от 160 знаков и 0 общих 12-словных фрагментов во всех трёх парах. XML и safety SVG повторно прошли, три mobile render на 375 px визуально просмотрены. `git diff --check` чист; `npm run build` успешно сгенерировал **374/374** статические страницы. **Итог независимой приёмки: PASS.** Пакет готов к отдельному commit и push; сторонние незавершённые изменения в него не входят.