Files
progcode/editorial/reviews/2023-10-draft.md
T
huncode 6da24704e1
Build and deploy / deploy (push) Successful in 14s
revise October 2023 slo articles
2026-07-31 15:16:33 +03:00

55 lines
10 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.
# 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](https://sre.google/sre-book/service-level-objectives/), [Google SRE Workbook, Example SLO Document, 19.02.2018](https://sre.google/workbook/slo-document/), [Example Error Budget Policy, 19.02.2018](https://sre.google/workbook/error-budget-policy/) и [Alerting on SLOs, copyright 2018](https://sre.google/workbook/alerting-on-slos/). Первые два дают определения 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
статические страницы.