# Сентябрь 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](https://www.w3.org/TR/2020/REC-trace-context-1-20200206/) | Тексты называют готовым именно переносимый 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](https://www.w3.org/TR/2020/REC-trace-context-1-20200206/) | Учебный 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](https://github.com/open-telemetry/opentelemetry-specification/blob/v0.5.0/CHANGELOG.md) | Пакет не приписывает сентябрю 2020 стабильный collector, auto-instrumentation, service map или version-independent SDK. | | Официальная документация относит стабильность Trace API к началу 2021 года | [OpenTelemetry Libraries](https://opentelemetry.io/docs/concepts/instrumentation/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 и зарезервированный 09 flags отвергаются. Выполнен --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 принят к отдельной публикации**. После трёх проходов зафиксированы три существенные границы качества: 1. W3C Trace Context Recommendation 2020 отделена от незрелости ранней OpenTelemetry-экосистемы; статья не обещает современный platform-level результат. 2. Fixture проверяет не только красивую схему: он связывает trace context, parent/child relation, duration и exclusive critical path в одном синтетическом запросе. 3. 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 остаётся источником её фактической записи.