10 KiB
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
статические страницы.