13 KiB
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 не изменены.
Выпуск после трёх независимых проходов
- Факты и техника. Редактор повторно проверил 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. - Редактура и голос. Три статьи различают consumer map, виды evidence и removal gate. Тексты не обещают найти последнего consumer:
unknownостаётся допустимым результатом. Объёмы — 9 393, 10 864, 10 614 знаков; в каждом тексте есть problem/cost, две таблицы, пример, ограничения и проверяемый следующий шаг. - Визуал и выпуск. 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 исключены.