This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# Производство редакционных партий
|
||||
|
||||
На 31 июля 2026 года строгий аудит проходит 286 из 358 созданных материалов. Остальные 72 не считаются «почти готовыми»: их нужно заменить, а не косметически удлинить.
|
||||
На 31 июля 2026 года строгий аудит проходит 289 из 358 созданных материалов. Остальные 69 не считаются «почти готовыми»: их нужно заменить, а не косметически удлинить.
|
||||
|
||||
## Одна партия
|
||||
|
||||
|
||||
@@ -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; в неё не включаются сторонние незавершённые изменения.
|
||||
Reference in New Issue
Block a user