15 KiB
Сентябрь 2020 — тройное ревью автономного пакета P31 «Трассировка запроса»
Статус: принят независимым редактором в выпусковой набор. В revision нет
date и author; слой публикации сохраняет их из
базового архива. Автономный авторский пакет не менял registry,
articles.json, стандарт, очередь, package configuration или Git.
Проверенные revision:
editorial-2020-09-practice-tracing-basics;editorial-2020-09-mechanism-tracing-basics;editorial-2020-09-field-tracing-basics.
Модуль экспортирует ровно три revision. При --print-revisions
stdout содержит только JSON. При --verify-fixture запускается
только in-memory модель одного synthetic trace; она не открывает сеть, не
читает production-журнал и не вызывает collector.
Проход 1. Факты, историческая рамка и механизм — пройдено
| Утверждение или решение | Первичный / официальный источник | Зафиксированная граница |
|---|---|---|
Trace Context Level 1 — W3C Recommendation от 06 февраля 2020 года, а не черновик сентября 2020 |
W3C Trace Context Level 1, 2020-02-06 | Тексты называют готовым именно переносимый format traceparent, а не «готовую трассировочную платформу». |
Для version 00 traceparent несёт version, 32-hex trace-id, 16-hex parent-id и trace-flags; нулевые ID невалидны |
W3C Trace Context, sections 3.2–3.2.2 | Учебный parser принимает только 00, lowercase hex, ненулевые ID и 00/01 flags; он не притворяется generic parser-ом будущих версий. |
В 2020 OpenTelemetry-specification ещё была до 1.0; tag v0.5.0 датирован 02 июня 2020 |
OpenTelemetry Specification v0.5.0 changelog | Пакет не приписывает сентябрю 2020 стабильный collector, auto-instrumentation, service map или version-independent SDK. |
| Официальная документация относит стабильность Trace API к началу 2021 года | OpenTelemetry Libraries | Это редакционная историческая сверка: текст сентября 2020 остаётся transport-neutral учебным разбором, а не ретроспективной инструкцией по современной экосистеме. |
Техническая модель повторно сверена после авторского прохода:
- один synthetic trace-id связывает ровно пять span;
catalog.lookupполучает gateway как parent, аinventory.fetch— catalog;- duration считается только как
endMs - startMs; - child intervals полностью лежат внутри parent intervals в пределах fixture;
- pricing и inventory перекрываются, поэтому их duration не суммируются;
- выбранный fixture critical path —
gateway.handle → catalog.lookup → inventory.fetch → inventory.adapter; - exclusive segments выбранной цепочки равны
40 + 30 + 100 + 70 = 240 ms, то есть root duration; - invalid all-zero trace-id и зарезервированный
09flags отвергаются.
Выполнен --verify-fixture. Реальный результат содержит восемь
истинных assertions: round-trip traceparent, получение текущего
parent child-операцией, общий trace-id, положительные intervals, ожидаемый
critical path, совпадение exclusive суммы с root и два негативных случая.
Fixture использует только synthetic IDs, services, интервалы и header:
training-gateway, training-catalog,
training-inventory и
00-4bf92f3577b34da6a3ce929d0e0e4736-a111111111111111-01.
Вердикт прохода: пройден. Поправлена дополнительная техническая граница:
version 00 fixture больше не принимает произвольный двухсимвольный
flags byte; 01 остаётся примером sampled bit, но не policy,
которой должен доверять публичный вход.
Проход 2. Редактура, голос М3 и плотность — пройдено
| Revision | Проблема и цена в первых двух абзацах | Главный вопрос | Голос и следующий шаг |
|---|---|---|---|
| Практика | Логи есть, но 240 ms не разложены; правка timeout/retry/базы по догадке увеличивает стоимость следующего сбоя | Как сохранить один context и увидеть один учебный waterfall | М3 связывает границы gateway, catalog и inventory; сначала проверяет carrier и fixture, затем предлагает один transport test. |
| Механизм | Разные trace-id или потерянный parent создают ложную причинность и неправильного «виновника» | Что реально несут trace-id, span-id, parent-id, flags и duration | М3 описывает W3C contract и прямую ответственность transport boundary, не выдавая carrier за бизнес-API. |
| Полевой разбор | Самый заметный span провоцирует оптимизацию не той ветви | Как отделить inclusive duration от critical path одной истории | М3 разбирает controlled fixture, называет overlap и выбирает одну следующую проверку вместо диагноза production-системы. |
- Draft gate после финальной технической правки измерил основной текст без источников: практика — 10 269 знаков, механизм — 11 727, полевой разбор — 9 702. Все три текста попадают в диапазон 5 000–15 000.
- В каждом revision есть 8–9 смысловых разделов, две таблицы с
caption/thead, две figure с осмысленнымиalt/figcaption, два code/example блока, нумерованный маршрут и три официальные или первичные ссылки. - Структура держит краткую последовательность «симптом → причина → проверка → действие». Примеры не подменяют проверку общими словами о важности наблюдаемости.
- В текст не внесены современные обещания: нет production latency, реального trace или URL, сервиса карт, стабильного tracing platform, готовой collector-конфигурации, автоматического instrumentor-а или наблюдаемого инцидента пользователя.
- Используется исторически подходящий словарь М3: trace context, span, transport boundary, fixture, overlap и clock skew раскрываются рядом с конкретным действием. Автор учится связать события между сервисами, но не пишет от лица владельца зрелой платформы.
Вердикт прохода: пройден. Тексты сохраняют техническую плотность и соответствуют сентябрю 2020 года без анахронизмов.
Проход 3. Визуал, доступность и выпуск автономного пакета — пройдено в заданных границах
tracing-span-waterfall-2020.svgпоказывает пять intervals на шкале 0–240 ms, overlap pricing/inventory и выделенную позднюю цепочку.tracing-context-propagation-2020.svgпоказывает отдельные шаги inject/extract, неизменность trace-id и смену текущего span-id без имитации сетевого трафика.tracing-critical-path-2020.svgпоказывает разницу inclusive и exclusive duration, параллельный pricing и расчёт 240 ms.- У каждого SVG есть
title,desc,role="img", вертикальный viewBox, контрастные карточки и короткие подписи. Нет JavaScript,foreignObject, внешних URL, data URI или пользовательских данных. - Все три SVG отрендерены Sharp при ширине 375 px и просмотрены вручную. Текст, bars и нижние карточки читаемы; обрезания, наложения и горизонтальный overflow внутри SVG не обнаружены. Waterfall оставлен вертикальным именно для этой ширины.
Фактические команды и результаты
cd web
node --check scripts/upgrade-2020-09.mjs
npm run audit:draft -- scripts/upgrade-2020-09.mjs
node scripts/upgrade-2020-09.mjs --verify-fixture
xmllint --noout \
public/assets/editorial/2020/tracing-span-waterfall-2020.svg \
public/assets/editorial/2020/tracing-context-propagation-2020.svg \
public/assets/editorial/2020/tracing-critical-path-2020.svg
| Проверка | Реальный результат |
|---|---|
node --check |
код завершения 0 |
| Draft audit | PASS: 10 269 / 11 727 / 9 702 знаков тела |
| In-memory fixture | 8 assertions вернули true; root duration и selected exclusive path равны 240 ms |
| XML | все три SVG валидны, код завершения 0 |
| 375 px visual preflight | выполнен через локальный Sharp-render и ручной просмотр; SVG читаемы, без clipping/overflow |
| Scope/self-review | revision не переопределяет date/author; в работе изменены только пять разрешённых файлов P31 |
Не запускались browser-review опубликенной страницы, реальный HTTP, reverse proxy, browser instrumentation, OpenTelemetry SDK/collector, exporter, clock synchronization, CI, production build, deployment или assistive-technology проверка. Наличие осмысленных alt-текстов и подписей не заменяет проверку скринридером.
Итог
Статус: тройное ревью пройдено, пакет P31 принят к отдельной публикации.
После трёх проходов зафиксированы три существенные границы качества:
- W3C Trace Context Recommendation 2020 отделена от незрелости ранней OpenTelemetry-экосистемы; статья не обещает современный platform-level результат.
- Fixture проверяет не только красивую схему: он связывает trace context, parent/child relation, duration и exclusive critical path в одном синтетическом запросе.
- SVG переделаны как крупные вертикальные схемы и отдельно проверены на ширине 375 px; публикационный слой, архив и чужие незакоммиченные файлы намеренно не затронуты.
Независимая интеграционная приёмка
Основной редактор 31 июля 2026 года подключил три revision к
web/data/editorial-revisions.mjs, не меняя базовый
articles.json, даты или автора архивных записей. В registry стало
88 revision. Отдельно выполнены:
| Проверка после интеграции | Реальный результат |
|---|---|
| Строгий audit трёх slug | PASS: 10 269 / 11 727 / 9 702 знаков; у каждой статьи есть figures, tables и code examples |
| Production build | PASS: Next.js собрал 374 статические страницы |
| Независимый mobile visual review | PASS: основной редактор повторно просмотрел три SVG после Sharp-рендера в 375 px; clipping, overlap и overflow не обнаружены |
W3C Recommendation от 6 февраля 2020 года сверена независимо по первичному
тексту: она действительно описывает перенос контекста через
traceparent, но не обещает готовую tracing-платформу. В отчёте не
утверждается запуск реального HTTP, proxy, OpenTelemetry SDK/collector,
browser или assistive technology.
Выпусковой вердикт: ACCEPT. Commit и push выполняются отдельной публикационной операцией; Git остаётся источником её фактической записи.