Files
huncode 9812aa0c63
Build and deploy / deploy (push) Successful in 17s
revise February 2026 resilience articles
2026-07-31 18:59:19 +03:00

11 KiB
Raw Permalink Blame History

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 Глава описывает каскад как положительную обратную связь, retry budget и риск произведения попыток на нескольких уровнях. Контекст для обсуждения каскада и одного владельца retry. Это исторический текст, не trace и не capacity-доказательство fixture.
gRPC A6, immutable commit dc9fd4fe5b94b90b82fe2833ad1d80938e6a49c1 Commit authored 2024-08-29. A6 определяет maxAttempts, throttling, token_count и ограничения retry/hedging. Термины и boundary retry policy. Proposal не запускается в модуле и не доказывает эффект synthetic сценария.
RFC 9110 Неизменяемая 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; сторонние незавершённые изменения в него не входят.