Files
progcode/editorial/reviews/2024-11-draft.md
T
huncode d6c9a8f75a
Build and deploy / deploy (push) Successful in 16s
revise November 2024 deprecation articles
2026-07-31 16:46:20 +03:00

13 KiB
Raw Blame History

P81 — ноябрь 2024: удаление устаревшего API/пути

Область пакета

Заменяются только три overlay-статьи:

  • editorial-2024-11-practice-deprecation — «Устаревший API нельзя удалить по дате в календаре».
  • editorial-2024-11-mechanism-deprecation — «Почему telemetry не равна списку пользователей».
  • editorial-2024-11-field-deprecation — «Последний consumer: доказуемое удаление».

Все имена, даты, счётчики, classes, outcomes и actions внутри статей и fixture являются fixed synthetic in-memory значениями. Пакет не выполняет source search, API requests, telemetry reading, access-log query, customer lookup, Git, CI, network или production action. Он не обещает отсутствие hidden consumers.

Исследование и историческая граница

Проверка ссылок выполнена 31.07.2026 обычным HTTPS GET и direct curl: все четыре URL вернули HTTP 200 без авторизации и без TLS bypass. Эта дата проверки не меняет историческую границу публикации: все закреплённые версии были доступны до ноября 2024.

Источник Дата / версия URL Узко поддерживаемое утверждение Граница утверждения
IETF RFC 8594 May 2019 https://datatracker.ietf.org/doc/rfc8594/ Sunset сообщает, что конкретный URI вероятно станет недоступен в указанную дату; это hint о lifecycle. Не доказывает фактическую доступность до или после даты, не перечисляет consumers, не задаёт миграционный процесс.
IETF draft deprecation header revision 09, 27.09.2024 https://datatracker.ietf.org/doc/html/draft-ietf-httpapi-deprecation-header-09 Deprecation сообщает, что resource уже deprecated или будет deprecated; link relation может вести к документации и guide. На ноябрь 2024 это Internet-Draft, не RFC. Header не меняет behavior resource и не является user list.
OpenAPI Specification v3.1.0, versioned official URL https://spec.openapis.org/oas/v3.1.0.html deprecated: true в Operation Object объявляет operation устаревшей; consumers SHOULD refrain from usage. Не доказывает, что generated clients обновлены, runtime usage прекратился или replacement совместим.
Semantic Versioning 2.0.0, versioned official URL https://semver.org/spec/v2.0.0.html Public API должен быть declared; deprecated public functionality требует minor increment, incompatible public change — major increment. Это правило versioning заявленного API, не policy удаления, telemetry model или authority для отключения endpoint.

Проход 1 — факты и техника

Проверен предмет утверждений.

  • Разделены declaration в OpenAPI, runtime lifecycle signal, Sunset boundary и отдельный removal change. Нигде не сказано, что header, дата или один график доказывают отсутствие consumers.
  • RFC 8594 использован только для Sunset: предполагаемая недоступность URI и его hint-семантика. Текст не называет timestamp гарантийным SLA.
  • Draft-09 прямо помечен Internet-Draft на историческую дату; он не выдан за опубликованный RFC. Его утверждение ограничено signal и documentation link.
  • SemVer и OpenAPI не подменяют consumer map: они объясняют contract and versioning vocabulary, а не фактическое использование API.
  • Во всех трёх статьях real telemetry, customer list, traffic count, incident, source search and production outcome исключены прямо в тексте и в модели.

Проверен пример.

  • createFixedSyntheticDeprecationInput принимает только три fixed case id.
  • inspectSyntheticDeprecation строит только canonical report из frozen objects; отсутствуют file, Git, network, CI, clock, telemetry, customer-list and production effects.
  • planSyntheticDeprecationReview принимает только exact canonical report и создаёт human-review draft, а не action against an API.
  • restoreSyntheticDeprecationReview выбрасывает только canonical in-memory draft. Он явно не выдаётся за rollback deployed route.
  • Fixture покрывает exact input/report/draft contracts, dense arrays, unknown fields, forged records, active/unknown/migrated states, cyclic input, cyclic report rejection and direct canonical JSON cycle rejection.

Вердикт: пройдено. Источники не расширены до несуществующих гарантий, а synthetic model не притворяется операционным доказательством.

Проход 2 — редактура и голос

Ноябрь 2024 остаётся уровнем системного практика, а не автора 2027: системная граница названа через contract, owner, compatibility, review and restore boundary, но нет деклараций о масштабе организации, универсальной policy или выдуманных metrics.

Статья Проблема и цена в первых двух абзацах Основной текст Практический артефакт Проверяемый финал
practice Календарная дата выдаётся за доказательство, неизвестный client получает отказ. 9 393 знака consumer map, deprecation record, removal gate Заполнить шесть колонок для одной operation и остановиться на первой unknown row.
mechanism Нулевой signal превращают в user list, hidden client выпадает из выбранного окна. 10 864 знака evidence matrix, lifecycle timeline, pure fixture Составить пять evidence rows и назвать blind zone каждой.
field Named integrations migrated, но hidden caller не доказан отсутствующим; удаление может сломать compatibility. 10 614 знаков три fixed cases, removal gate, checklist Выдать честный active / unknown / migrated verdict и зафиксировать stop condition.

Редакторская вычитка:

  • В первых двух абзацах каждой статьи есть situation and cost, без вводной о «важности API».
  • Каркас следует формуле «симптом → причина → проверка → действие».
  • Каждая статья содержит figure с содержательным alt и caption, HTML table, ordered route, reproducible code/example, limitations, sources and next step.
  • Термины telemetry и removal gate раскрыты при первом содержательном появлении; English names остаются только там, где они называют code or protocol artifact.
  • Удалены обещания «последний consumer найден» и «rollback доступен» без boundary. Состояние unknown сохранено как честный результат.
  • Объём находится внутри 5 000–15 000 знаков, а audit:draft подтверждает наличие требуемой структуры.

Вердикт: пройдено. Тон короткий и технический, каждый большой абзац добавляет symptom, mechanism, check, limitation или next action.

Проход 3 — визуал и выпуск

Проверены три ручные SVG:

Asset Смысл 375 px
deprecation-2024-consumer-map.svg contract → known/unknown consumer map → closed gate 375×291, читаемо после центрирования нижней плашки.
deprecation-2024-timeline.svg warning → deprecated → sunset → removal, с границами каждого состояния 375×291, читаемо.
deprecation-2024-removal-gate.svg active / unknown / migrated → human review → separate change 375×291, читаемо после сокращения нижней подписи.

Проверки:

  • node --check web/scripts/upgrade-2024-11.mjs — PASS.
  • node web/scripts/upgrade-2024-11.mjs --verify-fixture — PASS, 34/34 assertions.
  • npm run audit:draft -- scripts/upgrade-2024-11.mjs — PASS для трёх slug.
  • xmllint --noout для трёх SVG — PASS.
  • SVG safety scan — чисто: нет script, foreignObject, javascript:, data:image и event-handler attributes.
  • Sharp render на ширине 375 px и ручная визуальная проверка — PASS.

В первом visual pass обнаружен выход нижней плашки consumer map за viewBox; геометрия исправлена и оба затронутых SVG повторно проверены на 375 px.

Общий build намеренно не запускался: это самостоятельный draft-пакет, а пользователь запретил трогать registry, README, очередь, articles.json, staging, commits and publishing. Регистрация overlay, full build и выпуск остаются задачей интегратора после отдельного review.

Вердикт: пройдено для draft-пакета. Git and publication state не изменены.

Выпуск после трёх независимых проходов

  1. Факты и техника. Редактор повторно проверил RFC 8594, draft-09 от 27.09.2024, OpenAPI 3.1.0 и SemVer 2.0.0. Sunset и Deprecation остаются hints и не меняют behaviour endpoint; draft-09 на историческую дату действительно был Internet-Draft; OpenAPI/SemVer описывают контракт и версию, но не список users. node --check и fixture — PASS 34/34.
  2. Редактура и голос. Три статьи различают consumer map, виды evidence и removal gate. Тексты не обещают найти последнего consumer: unknown остаётся допустимым результатом. Объёмы — 9 393, 10 864, 10 614 знаков; в каждом тексте есть problem/cost, две таблицы, пример, ограничения и проверяемый следующий шаг.
  3. Визуал и выпуск. XML/safety scan, Sharp-render и ручная проверка на 375 px подтвердили читаемость consumer map, timeline и removal gate после исправления нижней плашки. После подключения overlay audit:articles подтвердил 1 figure, 2 table и 1 code example на каждый slug; registry содержит 238 уникальных ревизий. npm run build успешно создал 374 страницы.

В выпуск включаются только пять файлов ноября, обновления registry/production README и эта приёмка. Пользовательские изменения, черновики декабря/января и исходный articles.json исключены.