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