diff --git a/editorial/production/README.md b/editorial/production/README.md index 5adb26f..f7e5505 100644 --- a/editorial/production/README.md +++ b/editorial/production/README.md @@ -1,6 +1,6 @@ # Производство редакционных партий -На 31 июля 2026 года строгий аудит проходит 202 из 358 созданных материалов. Остальные 156 не считаются «почти готовыми»: их нужно заменить, а не косметически удлинить. +На 31 июля 2026 года строгий аудит проходит 205 из 358 созданных материалов. Остальные 153 не считаются «почти готовыми»: их нужно заменить, а не косметически удлинить. ## Одна партия diff --git a/editorial/reviews/2023-09-draft.md b/editorial/reviews/2023-09-draft.md new file mode 100644 index 0000000..4e51387 --- /dev/null +++ b/editorial/reviews/2023-09-draft.md @@ -0,0 +1,53 @@ +# П67 · 2023-09 · Логи, метрики и трассы — три прохода саморевью + +## Рамка пакета + +- Slug: `editorial-2023-09-practice-telemetry-signals`, `editorial-2023-09-mechanism-telemetry-signals`, `editorial-2023-09-field-telemetry-signals`. +- Голос: М6, сентябрь 2023 года. Автор работает как системный практик: начинает с несвязанного сигнала и цены ошибочного решения, строит маленький контракт данных, отделяет проверяемое от неизвестного и оставляет владельцу следующий шаг. Тон короткий и технический: «симптом → причина → проверка → действие», без вымышленного incident report, нагрузки или результата rollout. +- Главная тема: log, metric и trace — разные представления. `traceId` связывает один сценарий в trace и event/log record; metric labels отвечают на агрегирующий вопрос и имеют небольшой фиксированный словарь; event attributes объясняют конкретное событие; evidence-card хранит только допустимый вывод о synthetic модели. +- Граница: sidecar создаёт ровно пять новых файлов — этот review, один import-safe script и три локальных SVG. Registry, README, `articles.json`, очередь, документация, Git, чужие файлы, staging, commit и push не менялись. + +## Проход 1 — факты, модель и границы + +- Историческая граница сверена 31.07.2026 по первичным официальным материалам, доступным к сентябрю 2023: [OpenTelemetry Specification release v1.20.0 от 07.04.2023](https://github.com/open-telemetry/opentelemetry-specification/releases/tag/v1.20.0), [versioned Overview v1.20.0](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.20.0/specification/overview.md), [Tracing API v1.20.0](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.20.0/specification/trace/api.md), [Metrics Data Model v1.20.0](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.20.0/specification/metrics/data-model.md) и [Logs Data Model v1.20.0](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.20.0/specification/logs/data-model.md). Используются только versioned URLs, а не текущая документация как будто она существовала тогда. +- Формулировки ограничены источниками. Overview разделяет signals; Tracing API описывает `SpanContext`, `TraceId` и `SpanId`; Metrics Data Model различает events, streams, time series и attributes; Logs Data Model задаёт `LogRecord`, `TraceId`, `SpanId` и attributes. Из этого не сделан ложный вывод о конкретной SDK, collector, exporter, transport, backend, schema maturity, retention, query или dashboards данного проекта. +- `assembleSyntheticTelemetryScenario()` принимает только fixed synthetic input с точным top-level shape. У valid branch общий `synthetic-trace-2023-09-A` связывает trace и log; event относится к downstream span; metric получает только `service`, `route`, `outcome`. `trace_id`, `span_id`, `request_id`, `user_id`, `order_id`, error text, любые лишние keys в metric labels и любое неизвестное top-level поле отвергаются. Это не универсальная политика для всех backend, а явно названный маленький contract. +- `runTelemetryFixture()` содержит 19 assertions. Он проверяет correlation trace/log, раздельные span IDs, fixed small labels, отсутствие `trace_id` в labels, event attributes, закрытый input shape, отрицательные ветки mismatch, high-cardinality-like keys, предел модели и rollback. Fixture создаёт records только в памяти и не читает исходники, конфигурацию, Git, часы, сеть, collector, storage или telemetry backend; не создаёт SDK provider, exporter, trace, log или metric и не передаёт данных. +- Во всех статьях и в коде явно сказано: PASS не доказывает observability, latency, cardinality, trace/log/metric export, поиск, retention, стоимость, production effect, incident, причину ошибки или совместимость SDK. `value: 1` и все identifiers — фиксированные synthetic labels, не измерение и не request identity. +- Rollback сознательно узкий: он возвращает только snapshot contract draft и ставит `telemetry=not-created-or-deleted`, `productionEffect=not-attempted`. Он не удаляет фактические записи, не выключает instrumentation, sampling, alert, dashboard, collector или backend. Реальный rollback вынесен как отдельное операционное решение с владельцем, средой и проверкой. + +## Проход 2 — голос, полнота и объём + +- Первые два абзаца каждого материала называют проблему и цену. Practice показывает несвязанные окна и ошибочный ремонт через identifier в metric labels; mechanism — подмену разных data model общим словом telemetry; field — решение по самой громкой витрине без evidence. Ни один пример не объявлен наблюдением реального сервиса. +- Practice отвечает на вопрос «как собрать минимальный correlation contract», mechanism — «почему trace ID не является metric label», field — «как пройти diagnostic route, не перепутав симптом и причину». У статей нет дублирующего центрального тезиса: они используют один fixture как общий предмет, но смотрят на него как на контракт, семантику и порядок диагностики. +- В каждой статье есть: таблица с доступным заголовком; один собственный SVG с осмысленными alt и caption; исполнимый marked synthetic code; упорядоченный route с буквальными словами «симптом → причина → проверка → действие»; отдельные ограничения; rollback; следующий шаг; раздел проверяемых официальных источников. Нет универсальных обещаний и фраз, запрещённых редакционным аудитом. +- Размер основного текста, посчитанный script без списка источников: practice — 9 949 знаков, mechanism — 10 222 знака, field — 10 197 знаков. Все три текста находятся внутри обязательных 5 000–15 000 знаков и внутри цели 8–11 тыс. `readingMinutes`: 11, 12 и 12 соответственно. +- Речь соответствует М6: термин не подменяет действие. После `traceId`, `SpanContext`, cardinality, labels и event attributes всегда указано, какое поле проверяется и чего оно не доказывает. Автора 2023 года не выдают за владельца всей платформы: он не приписывает себе реальные dashboards, SLO, incidents, cost data или организационный масштаб. + +## Проход 3 — визуал, безопасность и выпуск + +- Три SVG разделяют визуальные задачи: `correlation-map` показывает один key в trace/log и его намеренное отсутствие в metric labels; `cardinality-budget` различает маленький fixed vocabulary и per-request/free-text values; `diagnosis-route` показывает последовательность metric → trace → log/event → evidence и явно перечёркивает подмену correlation новым label. Подписи в каждом файле говорят, что это учебная схема, не production export или измерение. +- Все SVG самостоятельные: нет `