Files
huncode 6da24704e1
Build and deploy / deploy (push) Successful in 14s
revise October 2023 slo articles
2026-07-31 15:16:33 +03:00

10 KiB
Raw Permalink Blame History

P68 · 2023-10 · SLI/SLO и error budget без декоративных метрик — три прохода саморевью

Рамка sidecar-партии

  • Slug: editorial-2023-10-practice-sli-slo, editorial-2023-10-mechanism-sli-slo, editorial-2023-10-field-sli-slo.
  • Голос: М6, октябрь 2023. Системный практик начинает с наблюдаемого сбоя и цены, затем проходит путь «симптом → причина → проверка → действие», называет owner, границу данных и обратимость. Текст не выдаёт учебную модель за собственный production-опыт.
  • Созданы ровно пять sidecar-файлов: этот review, один import-safe script и три локальные SVG. articles.json, registry, README, очередь, Git и чужие файлы не менялись; пакет не интегрирован.
  • Fixture работает только с фиксированными synthetic JS-объектами в памяти. Он не читает проект, файлы, переменные окружения, часы, monitoring, CI, сеть, HTTP, SDK или production-конфигурацию. Его PASS не заявляет реальный SLI, availability, incident, burn rate, traffic, alert, rollout или release authority.

Проход 1 — факты, источник и техника

  • Источники перепроверены 31.07.2026; все существовали до конца октября 2023: Google SRE Book, Service Level Objectives, copyright 2017, Google SRE Workbook, Example SLO Document, 19.02.2018, Example Error Budget Policy, 19.02.2018 и Alerting on SLOs, copyright 2018. Первые два дают определения SLI/SLO, scope и пример четырёхнедельного rolling window; policy описывает баланс надёжности и изменения, а не наказание; alerting разбирает отдельную модель burn rate и проблему low traffic.
  • В статьях эти материалы ограничены их фактическими выводами. Четырёхнедельное окно названо примером Google, а не универсальной нормой. Формула fixture не названа burn rate. Policy не превращена в автоматический release gate. Google-примеры не используются как доказательство поведения неизвестного сервиса.
  • createSyntheticSloContract() принимает только полный synthetic-slo-contract-input-v1 с фиксированными synthetic scope, 28-day window, good/eligible rules, target и owner. Отрицательные ветки отвергают неотмеченный вход, лишнее network-like поле без его вызова, пропущенное обязательное поле, другую область, другое окно, размытый индикатор, target 100, нулевой знаменатель и impossible counts.
  • runSloFixture() вычисляет только учебные syntheticGoodCount, syntheticEligibleCount, syntheticBadCount, допустимые synthetic bad и synthetic остаток. Он явно возвращает observed=not-observed, realSli=not-claimed, realIncident=not-claimed, realBurnRate=not-calculated, realAvailability=not-claimed, releaseAuthority=not-granted.
  • На техническом проходе найден и исправлен дефект отрицательной ветки rollback: она ошибочно пробовала accepted exhausted sample. Теперь ей передаётся отклонённый wrongScope, а assertion требует restored=false. Это проверяет границу модели, а не создаёт ложный operational rollback.
  • rollbackSyntheticSloContract() возвращает только snapshot договора и явно сообщает: monitoring/CI не затронуты, сеть не использовалась, production effect не предпринимался. Он не удаляет данные и не управляет release.

Проход 2 — редактура, полнота и голос

  • Три статьи различаются вопросом. Practice собирает SLI-contract от пользовательского пути; mechanism раскрывает арифметику окна, знаменателя и policy; field строит петлю решения с owner и evidence. Они не пересказывают один текст разными заголовками.
  • В первых двух абзацах каждого текста названы проблема и цена: декоративный процент ведёт к неверному релизному решению, неполная формула — к ложной остановке или рисковому rollout, а красный график без owner — к скрытым полномочиям и плохой диагностике.
  • В каждой ревизии есть доступная таблица, figure с содержательными alt и подписью, исполнимый synthetic fixture, явные ограничения, rollback, финальный следующий шаг и упорядоченный маршрут «симптом → причина → проверка → действие».
  • audit:draft зафиксировал объём основного текста, включая короткий executable пример и без источников: practice — 9 606, mechanism — 9 892, field — 9 770 знаков. Все три текста находятся в заданной цели 8–10 тыс. и обязательном диапазоне 5–15 тыс. знаков.
  • Речь краткая и предметная: термины SLI, SLO, eligible, good, window, policy, owner и proxy привязаны к контракту или решению. Нет обобщений про «современный мир», фантазий о production-инциденте, обещаний «универсальной доступности» или подмены технической проверки ярким заголовком.

Проход 3 — визуал, безопасность и выпуск

  • SVG разделяют понятия: договор SLI, окно с synthetic арифметикой и петля ручного решения. В них нет script, foreignObject, внешних URL, data:image, event-handler-атрибутов или пользовательского ввода.
  • Sharp-render всех трёх SVG на ширине 375 px открыт вручную. После первого рендера были перенесены две нижние подписи и сокращён заголовок петли решения, чтобы текст не обрезался справа. Финальные 375 px варианты читаемы: блоки, стрелки, числа, ограничения и ручная граница release decision не перекрываются.
  • Выполнены проверки: node --check web/scripts/upgrade-2023-10.mjs — PASS; node web/scripts/upgrade-2023-10.mjs --verify-fixture — PASS 22/22 после независимого model review; cd web && npm run audit:draft -- scripts/upgrade-2023-10.mjs — PASS для трёх slug; import-safe export без date/author — PASS; xmllint --noout — PASS; SVG safety scan — чистый результат; Sharp 375 px — PASS.
  • Пакет не коммитился, не пушился, не интегрировался в registry и не запускал production build: эти действия намеренно оставлены за пределами sidecar и пользовательского ограничения ровно пяти файлов.

Интеграционное ревью главного агента

Отдельно сверены первичные страницы Google SRE: SLO — target/range измеряемого SLI; error budget связывается с решением о риске; Example SLO Document даёт четырёхнедельное rolling window как пример; Example Error Budget Policy не называет остановку изменений наказанием; Alerting on SLOs разбирает burn rate и особенно риск ложной чувствительности low-traffic систем. В статьях эти утверждения сохранены как исторический контекст, не как политика проекта.

Model review закрыл форму synthetic-входа. Раньше helper запрещал лишние keys, но не требовал полный набор собственных полей. Теперь top-level и все nested records обязаны быть plain records с точным expected shape; добавлена отрицательная ветка без sample. Fixture после исправления проходит 22/22 assertions и по-прежнему не получает полномочие на release.

На визуальном проходе в SLI-схеме мобильный рендер обрезал последнюю часть подписи исключения. Подпись разбита на две строки; повторный Sharp-render 375 px читаем. Все SVG прошли XML и safety scan. Повторный draft audit: 9 640 / 9 892 / 9 770 знаков; строгий archive audit — PASS для трёх slug; registry содержит 199 уникальных ревизий. npm run build успешно сгенерировал 374 статические страницы.