# 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` исключены.