Files
progcode/editorial/reviews/2020-08-draft.md
T
huncode 8e16858f16
Build and deploy / deploy (push) Successful in 13s
revise August 2020 metrics articles
2026-07-31 11:44:13 +03:00

153 lines
14 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.
# Автономное тройное ревью П30 · август 2020 · «Метрики приложения»
Статус: **принят независимым редактором в выпусковой набор**. В нём ровно три
revision для стабильных slug:
- <code>editorial-2020-08-practice-metrics-basics</code>;
- <code>editorial-2020-08-mechanism-metrics-basics</code>;
- <code>editorial-2020-08-field-metrics-basics</code>.
Созданы только пять разрешённых файлов П30:
- <code>web/scripts/upgrade-2020-08.mjs</code>;
- <code>web/public/assets/editorial/2020/metrics-signal-contract-2020.svg</code>;
- <code>web/public/assets/editorial/2020/metrics-label-boundary-2020.svg</code>;
- <code>web/public/assets/editorial/2020/metrics-diagnosis-2020.svg</code>;
- этот документ.
Module export не задаёт <code>date</code> или <code>author</code>. При будущей
интеграции registry может наложить только редакционные поля на базовые записи
архива. <code>articles.json</code>, registry, стандарт, очередь, package config
и Git данным пакетом не менялись. Команда <code>--print-revisions</code>
печатает только JSON, а <code>--verify-fixture</code> запускает отдельную
детерминированную проверку в памяти.
## Проход 1. Факты и техника — пройдено
| Утверждение | Первичный или официальный источник | Проверенная граница |
| --- | --- | --- |
| Имя метрики описывает одну величину и единицу; для counter используется суффикс <code>_total</code>, duration измеряется в seconds | [Prometheus: Metric and label naming](https://prometheus.io/docs/practices/naming/) | <code>store_http_requests_total</code> отделён от <code>store_http_request_duration_seconds</code>; учебные имена не смешивают запросы, ошибки и время |
| Для online-serving системы полезно считать завершённые запросы, ошибки и latency; errors нужны рядом с числом попыток | [Prometheus: Instrumentation](https://prometheus.io/docs/practices/instrumentation/) | Counter увеличивается после завершения operation; <code>operation</code> и <code>outcome</code> ограничены allowlist |
| Counter накапливает события и при рестарте может сброситься; server-side query над окном не равен ручной разности двух точек | [Prometheus: Instrumentation](https://prometheus.io/docs/practices/instrumentation/), [Prometheus: Querying basics](https://prometheus.io/docs/prometheus/latest/querying/basics/) | PromQL с <code>increase(...[10m])</code> приведён как будущий вопрос к серверу; fixture проверяет только монотонную учебную серию и не моделирует reset или scrape |
| Уникальная комбинация имени и labels создаёт отдельную time series; неограниченные значения раздувают storage | [Prometheus: Metric and label naming](https://prometheus.io/docs/practices/naming/), [Prometheus: Instrumentation](https://prometheus.io/docs/practices/instrumentation/) | Учебная арифметика 3 operations × 2 outcomes и пример с 100 user ID не выданы за RAM-, disk- или workload-замер |
| Counter, gauge, histogram и summary описывают разные формы величины | [Prometheus: Metric types](https://prometheus.io/docs/concepts/metric_types/) | Counter не назван current state; fixture с sum/count не выдаёт p95 или распределение за production telemetry |
Все четыре официальные страницы использованы для сверки смысла names, labels,
types и запросов. Они не представлены как доказательство развернутого в августе
2020 года production-контура. В тексте нет claim о реальном Prometheus server,
exporter, scrape interval, dashboard, alert delivery, нагрузке или
производственном пороге.
### Техническая граница учебной фикстуры
<code>runMetricsFixture()</code> создаёт четыре synthetic event, допускает
ровно <code>catalog</code>, <code>checkout</code>, <code>profile</code> и
<code>success/error</code>, затем формирует локальный exposition-текст. Вторая
часть fixture сравнивает две серии counter:
- <code>0 → 1 → 2</code> за учебное окно даёт delta <code>2</code> и
пересекает упражнение <code>&gt;= 2</code>;
- <code>0 → 1 → 1</code> даёт delta <code>1</code> и его не пересекает.
Эта проверка не подменяет PromQL, target scrape, counter reset, network,
storage, client library или alerting. Её задача уже: зафиксировать, что
изменение labels или числа в учебном контракте не пройдёт незаметно.
Вердикт прохода: **пройден**. Утверждения о Prometheus отделены от учебной
модели, а учебная модель — от запуска на реальной инфраструктуре.
## Проход 2. Редактура, глубина и голос М3 — пройдено
| Ревизия | Симптом и цена в первых двух абзацах | Главный вопрос | Объём основного текста |
| --- | --- | --- | --- |
| Практика | Общий график requests не показывает operation и outcome; цена — поиск не по той границе и разрастание бесполезных линий | Как выбрать один completed-request signal, bounded labels и учебный threshold | **9 182** знаков body |
| Механизм | Уникальный label размножает series и делает запрос неясным; цена — хранение и потеря агрегированного смысла | Где заканчивается полезная dimension и почему request context живёт в журнале | **10 230** знаков body |
| Полевой разбор | Одна линия requests не объясняет деградацию; цена — шумный порог и правка timeout без факта | Как прочитать controlled counter-series, окно и threshold, не выдав их за production-диагноз | **9 480** знаков body |
- Во всех материалах начало устроено по схеме «симптом → цена → ограниченная
учебная граница», затем следует «причина → проверка → действие».
- У каждой revision больше пяти смысловых разделов, есть figure с
самостоятельным <code>alt</code>/<code>figcaption</code>, таблица с
<code>caption</code>/<code>thead</code>, code/query/fixture example,
нумерованный маршрут и четыре официальные ссылки.
- Статьи не используют общую риторику про важность наблюдаемости. Они
фиксируют completed request, counter, seconds, operation/outcome, time
series, окно, порог, log и следующий сценарий.
- Голос соответствует М3 / августу 2020 года. Автор связывает application-code
с наблюдаемым измерением, но не приписывает себе SLO, error budget,
observability platform, реальные production-значения или опыт большого
инцидента.
- Все цифры в графике, таблице cardinality и пороге явно названы учебными.
Нагрузка, допустимая ошибка и стоимость alert не придуманы вместо данных
проекта.
Второй редакторский проход проверил, что count, duration и latency не
смешиваются. Counter не назван current state, а <code>increase()</code> не
выдана за ручную разность snapshots. Pseudocode над client library отмечен как
контракт labels, а не как запущенный exporter.
Вердикт прохода: **пройден**. Тексты укладываются в 5 000–15 000 знаков,
остаются прагматичными и не перескакивают к зрелой платформенной терминологии.
## Проход 3. Визуал, fixture и выпусковой preflight — пройдено в пределах пакета
- <code>metrics-signal-contract-2020.svg</code> ведёт от операционного
вопроса к counter, двум ограниченным labels, учебному окну и действию после
пересечения порога.
- <code>metrics-label-boundary-2020.svg</code> отделяет allowlist
<code>operation/outcome</code> для series от request ID, email и полного URL,
которые остаются в журнале.
- <code>metrics-diagnosis-2020.svg</code> показывает три synthetic snapshots
counter <code>0 → 1 → 2</code>, условие <code>increase(...[10m]) = 2</code>
и следующий диагностический шаг.
- У схем есть <code>title</code>, <code>desc</code>, <code>role="img"</code>,
вертикальные viewBox 720 px, контрастные карточки и текст не мельче 20 px в
исходном SVG. В них нет JavaScript, <code>foreignObject</code>, внешних URL
или raster data URI.
- Отдельный mobile preflight отрендерил все три SVG в PNG шириной 375 px
через Sharp и просмотрел результат. У всех схем крупные заголовки, короткие
строки и вертикальная композиция; clipping, наложение и горизонтальный
overflow внутри SVG не обнаружены. Это статическая проверка visual asset, не
browser-run и не test screen reader.
### Фактически выполненные проверки
Запущены после финальной редакторской правки 31 июля 2026 года:
<pre><code>cd web &amp;&amp; node --check scripts/upgrade-2020-08.mjs
cd web &amp;&amp; npm run audit:draft -- scripts/upgrade-2020-08.mjs
cd web &amp;&amp; node scripts/upgrade-2020-08.mjs --verify-fixture
cd web &amp;&amp; xmllint --noout \
public/assets/editorial/2020/metrics-signal-contract-2020.svg \
public/assets/editorial/2020/metrics-label-boundary-2020.svg \
public/assets/editorial/2020/metrics-diagnosis-2020.svg</code></pre>
| Проверка | Реальный результат |
| --- | --- |
| <code>node --check</code> | PASS, code 0 |
| Import-safe export и draft gate | PASS: **9 182 / 10 230 / 9 480** знаков body; три slug, tables, figures, code, routes, sources и assets найдены |
| In-memory fixture | PASS: bounded labels сохранены, counter error checkout найден, threshold пересекается на 2 и не пересекается на 1 |
| <code>xmllint --noout</code> | PASS, все три SVG — корректный XML |
| Sharp mobile preflight | PASS: три PNG шириной 375 px просмотрены; нет clipping, наложения или horizontal overflow внутри схем |
| Scope/self-review | PASS: в revision нет <code>date</code>/<code>author</code>; созданы только пять файлов П30; чужие незакоммиченные пакеты не редактировались и не индексировались |
## Независимая интеграционная приёмка
Основной редактор 31 июля 2026 года подключил три revision к
<code>web/data/editorial-revisions.mjs</code>, не меняя базовый
<code>articles.json</code>, даты или автора архивных записей. После подключения
в registry стало 85 revision. Отдельно выполнены:
| Проверка после интеграции | Реальный результат |
| --- | --- |
| Строгий audit трёх slug | PASS: 9 182 / 10 230 / 9 480 знаков; у каждой статьи один figure, одна table и два code example |
| Production build | PASS: Next.js собрал 374 статические страницы |
| Независимый mobile visual review | PASS: основной редактор повторно просмотрел все три SVG, отрендеренные Sharp в 375 px; clipping, overlap и overflow не обнаружены |
Ни этот отчёт, ни интеграция не утверждают, что был запущен настоящий
Prometheus, exporter, scrape, browser или assistive technology. Они фиксируют
границы автономного учебного пакета и результат статических проверок.
Выпусковой вердикт: **ACCEPT**. Commit и push выполняются отдельной
публикационной операцией; Git остаётся источником её фактической записи.