Files
progcode/editorial/reviews/2026-01-draft.md
T
huncode fd381cd2f5
Build and deploy / deploy (push) Successful in 18s
revise January 2026 platform API articles
2026-07-31 18:49:24 +03:00

12 KiB
Raw Blame History

P95 — январь 2026: API платформенной команды

Область изолированного draft-пакета

Пакет содержит только три overlay-статьи:

  • editorial-2026-01-practice-platform-api;
  • editorial-2026-01-mechanism-platform-api;
  • editorial-2026-01-field-platform-api.

Исполняемый модуль — web/scripts/upgrade-2026-01.mjs. В нём все API, версии, request, response, consumer, статусы, трассы и решения — named fixed synthetic JavaScript literals в памяти. Нет сети, файловой системы, Git, CI, production API, реальных сервисов, компаний, ключей, пользовательских данных, telemetry или side effect. Положительный результат всегда ограничен synthetic-contract-review-hand-off; он не меняет API и не означает выпуск, migration, rollout или production effect.

На момент передачи draft registry, README, app-файлы, articles.json, очередь, Git-state и чужие незавершённые изменения не менялись.

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

Граница статьи — 31 января 2026. Все три источника — первичные/официальные и закреплены версией, датой и неизменяемым адресом или commit pin.

Источник Version / immutable pin Узкий подтверждённый факт Явная граница
OpenAPI Specification v3.1.1 3.1.1, 24.10.2024, dated version publication OAS описывает language-agnostic interface для HTTP API; schema описывает content request, response, parameter или header. OAS не доказывает поведение implementation, tolerance consumer или success migration.
Semantic Versioning 2.0.0 commit 7c834b3f3a4940d77ab593bc32583004d6a426a9, 18.06.2013 SemVer требует precise public API и связывает incompatible public API change с major version. Номер не определяет public surface сам и не доказывает совместимость конкретного consumer.
RFC 9110: HTTP Semantics RFC 9110, June 2022, immutable RFC HTTP задаёт uniform interface и representations, не раскрывая внутреннюю реализацию ресурса. RFC не задаёт application-level guarantee, escape hatch, contract family или verdict review.

Для изменяемого по природе репозитория SemVer использован exact commit, а не live documentation URL. OAS привязан к датированной версии 3.1.1, RFC — к неизменяемой публикации. В каждой статье sourceList показывает version/pin рядом с ссылкой и повторяет границу применения.

Проход 1 — проблема, плотность, голос и самостоятельность

Проверены первые два абзаца: у каждой статьи названы наблюдаемые problem/cost и короткое действие. Голос М9 — прагматичный технический: symptom → distinction → check → next action. Риторические обещания, «универсальные» рецепты и утверждения об эффекте для реальной команды исключены.

Статья Самостоятельный вопрос Собственный механизм и visual Цена ошибки
practice Как оформить public surface до первого особого случая? contract card, named surface и узкий documented escape hatch скрытый флаг становится неявной зависимостью
mechanism Почему поле, гарантия, exception и version нельзя считать одним объектом? матрица guarantee/family и fail-closed statuses изменение обнаруживается после смешения schema, reader и version
field Как вести compatibility review для разных потребителей без ложного общего verdict? inventory, family-first loop и return reason команда чинит следы разных ожиданий вместо контракта

У статей разная точка входа, набор пояснений, таблица, sequence и conclusion. Общий развёрнутый вводный блок не используется.

Вердикт прохода 1: PASS.

Проход 2 — факты, историческая граница и исполнимость

Проверено, что утверждения о стандартах не выходят за их узкий scope. В частности:

  • SemVer используется только после явного определения public API; номер версии не объявляет synthetic surface совместимой.
  • OAS используется как vocabulary описания HTTP interface; документ не выдаётся за evidence исполнения.
  • RFC 9110 используется для границы interface/representation; из него не выводятся business, latency, security или migration promises.

Модуль принимает только named fixed literals. Произвольный объект возвращает stop-unknown-fixed-review. Fixture fail-closed на всех требуемых нарушениях:

  • stop-undocumented-escape-hatch;
  • stop-implicit-guarantee;
  • stop-incompatible-consumer;
  • stop-incomparable-consumer.

Все article snippets импортируют только public exports и выполнены буквально из web/scripts:

{ status: 'synthetic-contract-review-hand-off',
  fields: ['id', 'state', 'label'],
  hatch: ['raw-envelope-v1'] }

{ status: 'stop-implicit-guarantee',
  reasons: ['implicit-guarantee'],
  next: 'write-the-guarantee-into-the-fixed-contract-or-remove-the-claim' }

{ status: 'stop-incomparable-consumer',
  next: 'separate-contract-review-by-family',
  assertions: 15 }

Positive output не меняет fixed contract, не вызывает API и не утверждает, что какая-либо внешняя интеграция работает.

Вердикт прохода 2: PASS.

Статья Основной текст без source list SVG Mobile inspection 375 px
practice 9 270 знаков platform-api-2026-contract-surface.svg PASS: gate разбит на две строки, скрытый обход остаётся читаемым
mechanism 9 406 знаков platform-api-2026-guarantee-exception-matrix.svg PASS: заголовки колонок разнесены на две строки, статусы различимы
field 9 245 знаков platform-api-2026-consumer-compatibility-loop.svg PASS: return route и stop card не обрезаны

После mobile render исправлены три конкретных проблемы первого SVG-прохода: обрезанный текст gate, слипшиеся заголовки матрицы и выходящая за границу подпись return route. В final SVG отсутствуют script, foreignObject, javascript:, data:image и inline event handlers.

Cross-article uniqueness по body без source list:

  • 0 одинаковых абзацев длиной от 160 знаков;
  • 0 общих последовательностей из 12 слов во всех трёх парах.

Команды и результаты:

  • node --check web/scripts/upgrade-2026-01.mjs — PASS.
  • node web/scripts/upgrade-2026-01.mjs --verify-fixture — PASS, 15/15 assertions.
  • npm run audit:draft -- scripts/upgrade-2026-01.mjs из web/ — PASS: 9 270 / 9 406 / 9 245; есть problem/cost в начале, table, figure с alt/caption, executable code, ordered sequence и source section.
  • xmllint --noout для трёх SVG — PASS.
  • SVG safety scan через rg — PASS.
  • Sharp render всех трёх SVG на ширине 375 px — PASS и визуально просмотрен.
  • Exact public-export snippets — PASS.
  • Cross-article duplicate scan — PASS: paragraphs=0, fragments12=0 для всех трёх пар.
  • git diff --check — PASS.

Вердикт прохода 3: PASS.

На момент окончания изолированного draft-прохода registry и README не были интегрированы; commit, push и полный site build оставались задачей основного редактора.

Независимая приёмка основного редактора

При интеграции повторно проверены не выводы draft, а сами основания:

  • OAS 3.1.1 по датированной публикации подтверждает дату 24 October 2024 и назначение language-agnostic interface description для HTTP API;
  • GitHub API для exact SemVer commit вернул SHA 7c834b3f3a4940d77ab593bc32583004d6a426a9, дату 2013-06-18T17:14:52Z; закреплённый исходник прямо требует declare a public API и связывает incompatible change с major version;
  • immutable RFC 9110 подтверждает uniform interface, определение representation как information и information hiding за interface.

Буквально запущены три публичных фрагмента из статей. Они вернули соответственно synthetic-contract-review-hand-off с id/state/label, stop-implicit-guarantee с именованной причиной и stop-incomparable-consumer с separate-contract-review-by-family; fixture содержит 15 истинных assertions. Ни один пример не имеет внешнего side effect.

После подключения overlay в web/data/editorial-revisions.mjs production-аудит подтвердил все три slug: 9 270 / 9 406 / 9 245 знаков, по одной figure, table и code example. В реестре 280 ревизий, а каждый январский slug присутствует ровно один раз. Повторная проверка полных body, включая code и исключая source list, дала 0 одинаковых абзацев от 160 знаков и 0 общих фрагментов из 12 слов во всех трёх парах.

Повторно подтверждены XML и safety SVG; mobile renders на 375 px просмотрены. git diff --check прошёл. npm run build завершил production build: TypeScript прошёл, сгенерированы 374/374 статические страницы.

Итог независимой приёмки: PASS. Январская тройка готова к отдельному commit и push; в неё не включаются сторонние незавершённые изменения.