revise January 2026 platform API articles
Build and deploy / deploy (push) Successful in 18s

This commit is contained in:
2026-07-31 18:49:24 +03:00
parent 50d783d0d5
commit fd381cd2f5
7 changed files with 898 additions and 1 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
# Производство редакционных партий
На 31 июля 2026 года строгий аудит проходит 286 из 358 созданных материалов. Остальные 72 не считаются «почти готовыми»: их нужно заменить, а не косметически удлинить.
На 31 июля 2026 года строгий аудит проходит 289 из 358 созданных материалов. Остальные 69 не считаются «почти готовыми»: их нужно заменить, а не косметически удлинить.
## Одна партия
+119
View File
@@ -0,0 +1,119 @@
# 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](https://spec.openapis.org/oas/v3.1.1.html) | 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](https://github.com/semver/semver/blob/7c834b3f3a4940d77ab593bc32583004d6a426a9/semver.md) | commit 7c834b3f3a4940d77ab593bc32583004d6a426a9, **18.06.2013** | SemVer требует precise public API и связывает incompatible public API change с major version. | Номер не определяет public surface сам и не доказывает совместимость конкретного consumer. |
| [RFC 9110: HTTP Semantics](https://www.rfc-editor.org/rfc/rfc9110.html) | 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.**
## Проход 3 — release quality, mobile SVG, source/link audit и уникальность
| Статья | Основной текст без 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; в неё не включаются сторонние незавершённые изменения.