rewrite 2026-09 and 2027 articles for reader-facing quality
Build and deploy / deploy (push) Successful in 18s

This commit is contained in:
2026-07-31 22:26:56 +03:00
parent 3bfc3f21c4
commit 440c8721dc
69 changed files with 4424 additions and 3533 deletions
+31 -35
View File
@@ -1,49 +1,45 @@
# P103 — сентябрь 2026: граница frontend и backend
# Пакет 2026-09 — три редакторских прохода
Статус: изолированный **план/сценарий на сентябрь 2026**, не field report. Исторический cutoff источников: **31.07.2026**. Пакет намеренно не утверждает, что сентябрьская работа была проведена, опубликована, измерена, внедрена или одобрена. Все модели, названия, поля, значения и positive outputs — named fixed synthetic JavaScript literals в памяти; UI, API, пользователь, сеть, trace, файл, секрет, endpoint и production не читаются и не представляются фактом.
Пакет переписан как три самостоятельные технические статьи. В тексте нет описания авторской траектории, редакционного плана, даты отсечения источников, отчёта о публикации или обещаний о состоянии системы. Стабильные slug сохранены.
## Проход 1 — проблема, плотность, голос и независимость
## Проход 1 — проблема, структура и практический результат
- Practice начинает с присвоения UI доменного факта и цены несовместимых версий между входами. Его вопрос: как в сентябрьском плане разложить local state, context и screen read model по владельцам.
- Mechanism начинает с handler, который трактует отправку command как подтверждение. Его предмет: какое право на вывод дают query, command, read model и problem envelope, а не карта владельцев как таковая.
- Field начинает с подмены evidence правдоподобным mock и цены неповторимого решения. Его предмет: как передать только synthetic review card без имитации UI-network trace.
- Первые два абзаца каждой статьи явно называют проблему и цену. В каждой есть отдельная таблица, SVG, выполняемый snippet, упорядоченный план, ограничения и следующий шаг. Общего вступительного блока нет.
- Размер тел без списка источников: practice — 8 953, mechanism — 8 977, field — 9 006 знаков. Это в диапазоне 5 000–15 000 и близко к целевому объёму 9 тыс. без наполнения повторами.
- Строгий попарный scan исключил source lists, но включил code: 0 совпадающих абзацев от 160 символов и 0 общих 12-словных фрагментов для всех трёх пар.
Для каждой статьи выполнена отдельная замена предмета, а не косметическая правка.
## Проход 2 — источники, future-fact gate и literal execution
| Статья | Было | Стало |
|---|---|---|
| Practice | «План на сентябрь: карта границы между экраном и доменом» и рассуждение о synthetic hand-off | «Ответ 200 — ещё не модель экрана: валидируем JSON на границе UI и API»; в первых абзацах названы сломанный payload, цена рассинхрона и порядок проверки status → media type → JSON → screen model |
| Mechanism | «План на сентябрь: на что boundary даёт право сделать вывод» и fixed literal ownership | «Состояние экрана не угадывают по статусу: разделяем query, command и ошибку»; добавлены 2xx/204/409/422/429/5xx, problem envelope и отдельная retry policy |
| Field | «Сценарий на сентябрь: synthetic hand-off для границы UI и API» и карточка передачи | «UI и API расходятся: полевой протокол диагностики без догадок»; добавлены четыре наблюдения intent/request/response/render input и маршрутизация к adapter, cache или selector |
1. [OpenAPI Specification 3.1.1](https://spec.openapis.org/oas/v3.1.1.html), версия 3.1.1 от 24.10.2024 — первичная версионированная спецификация. Использована только для узкого утверждения, что HTTP API имеет независимое от языка interface description. Она не доказывает существование endpoint, screen model или выбранного boundary.
2. [RFC 9110: HTTP Semantics](https://www.rfc-editor.org/rfc/rfc9110.html), июнь 2022 — неизменяемый RFC. Использован только для различения HTTP semantics и application-level problem policy. Он не задаёт retry, не подтверждает response и не описывает product flow.
3. [JSON Schema Core, draft 2020-12](https://json-schema.org/draft/2020-12/json-schema-core.html), Internet-Draft (work in progress), 16.06.2022. Использован только для идеи явной структуры/vocabulary contract-карточки. Валидация схемы не доказывает доменную корректность, UI-поведение или достоверность fixed literals.
Для всех трёх материалов добавлены самостоятельные разделы, доступные таблицы, SVG-схемы, кодовый пример, последовательность действий, ограничения и следующий шаг. Повторы между текстами убраны: у первой статьи центр тяжести — форма ответа, у второй — семантика результата, у третьей — локализация рассинхрона.
Ссылки открыты локальной проверкой до написания. Ни один источник не позже cutoff 31.07.2026. Свойства модели P103 — ownership map, состав read model, stop reasons и hand-off — отделены от источников и не приписываются стандартам.
## Проход 2 — факты, техническая проверка и источники
Public exports выполнены буквально:
| Статья | Конкретная правка | Проверка границы |
|---|---|---|
| Practice | Убрано утверждение, что HTTP 200 равен успеху экрана; добавлена функция checkScreenResponse с закрытым словарём status/actions и непустым messageCode | 200 проверяется отдельно от runtime shape; 204 не проходит в JSON parser; generated types не выданы за runtime validation |
| Mechanism | Убрана универсальная ветка «красный статус = сетевой сбой»; добавлена classifyHttpResponse с отдельными ветками 409/422 и 429/5xx | RFC 9110 используется только для HTTP semantics, RFC 9457 — только для Problem Details, OpenAPI — только для описания response variants |
| Field | Убрана имитация UI/network trace; добавлена diagnoseBoundaryObservation, которая различает валидный response и устаревший render input | Код не обращается к сети, секретам или реальному браузеру; curl-пример ограничен чтением тестового ресурса и явно отделён от mutation |
- `reviewFixedStateOwnership(createFixedBoundaryCase('ui-claims-domain-state-v1'))` → `stop-ui-claims-domain-state`.
- `explainFixedBoundaryInference(createFixedBoundaryCase('unactionable-error-v1'))` → `stop-error-not-actionable`.
- `explainFixedBoundaryInference(createFixedBoundaryCase('named-screen-boundary-v1'))` → `synthetic-inference-boundary-explained`, `productionEffect: not-attempted`.
Проверяемые ссылки находятся в конце каждой статьи. Для каждой указаны название, версия/дата, конкретное использование и граница применимости. Внутренние выводы статьи не приписываются стандартам.
Fixture: 5/5. Вместе с тремя article checks — 8/8. Положительная ветка заканчивается только `synthetic-boundary-review-hand-off` или объяснением его границы; в ней нет approval, release, deployment, публикации, доступа к production или факта trace.
## Проход 3 — язык, визуальная подача и выпускная вычитка
## Проход 3 — выпускное качество, mobile SVG и уникальность
| Статья | До правки | После правки |
|---|---|---|
| Practice | «карта владельцев», «сценарий», «положительная ветка» | прагматичный глагольный маршрут: «проверить», «остановить», «не передавать в компонент» |
| Mechanism | «hand-off», «approval», «synthetic» в основном тексте | короткие технические формулировки о response, problem detail, retry и read model |
| Field | «передать карточку следующему reviewer» | конкретные поля диагностики, безопасные заголовки, порядок сравнения и критерий остановки |
- `node --check scripts/upgrade-2026-09.mjs` — pass.
- `node scripts/upgrade-2026-09.mjs --verify-fixture` — 8/8, pass.
- `npm run audit:draft -- scripts/upgrade-2026-09.mjs` — pass для трёх строгих slug.
- `xmllint --noout` — pass для трёх SVG. Safety scan — pass: отсутствуют `script`, `foreignObject`, `javascript:`, `data:image` и event handlers.
- Все SVG отрисованы Sharp до 375px и просмотрены визуально. В первой схеме различимы три владельца и стрелка command; во второй — четыре разных права на вывод; в третьей после редакции читается `review hand-off`, подпись не обрезается. Рабочий SVG-текст задан 21–28px при viewBox 720px; схемы содержат title/desc, осмысленный article alt и caption.
- В code нет обращения к сети, файловой системе, секретам, часам или UI. Input только JSON-clone + deep-freeze named fixtures, а неизвестный или неполный вход останавливается fail-closed.
SVG переработаны под мобильную ширину: крупные подписи, один смысловой рисунок на статью, title/desc, содержательный alt и подпись. Убраны схемы, которые показывали редакционный процесс вместо технического механизма.
Draft готов для независимой production-приёмки. Registry, README, staging, commit и push находятся вне scope этого sidecar.
## Выполненные проверки
## Независимая приёмка основного редактора — 31.07.2026
- node --check scripts/upgrade-2026-09.mjs — pass.
- node scripts/upgrade-2026-09.mjs --verify-fixture — 8/8; объём тел: 7 581, 6 998 и 8 459 знаков.
- npm run audit:draft -- scripts/upgrade-2026-09.mjs — pass после добавления явного слова «Проблема» в открытие Mechanism.
- xmllint --noout для трёх SVG — pass.
- SVG safety scan — pass: нет script, foreignObject, javascript:, data:image и inline event handlers.
Принято только как **сентябрьский план/сценарий**. Во всех трёх текстах будущий месяц и cutoff `2026-07-31` названы прямо; positive branches заканчиваются `synthetic-boundary-review-hand-off` или `synthetic-inference-boundary-explained` с `productionEffect: not-attempted`. Пакет не выдаёт fixed model за UI/API/trace из production.
Проверены первичные источники. Официальная OpenAPI Specification v3.1.1 действительно задаёт language-agnostic interface description для HTTP API и датирована **24.10.2024**; ошибочная дата 15.09.2023 исправлена до интеграции. RFC 9110 — June 2022 и описывает HTTP semantics; JSON Schema Core draft 2020-12 опубликован 16.06.2022 как Internet-Draft/work in progress. Поэтому последний источник используется только как vocabulary для явной структуры, а не как нормативное доказательство доменной схемы или поведения продукта.
Повторно выполнены syntax и fixture `8/8`, draft audit с объёмами 8 953 / 8 977 / 9 006, XML и SVG safety-scan. Public exports выдают проверенные stops `stop-ui-claims-domain-state` и `stop-error-not-actionable`; accepted branch остаётся только synthetic и имеет `productionEffect: not-attempted`. Три SVG заново отрендерены Sharp на 375 px: текст, стрелки и подписи читаются без обрезания. Строгая pairwise-проверка, включающая code и исключающая source lists, вернула ноль совпадающих абзацев от 160 символов и ноль общих 12-словных фрагментов.
В registry добавлены только три сентябрьские ревизии. Пользовательские application-файлы, `articles.json`, production queue и прочая незакоммиченная работа в приёмку не включены.
Пакет не меняет articles.json, application-файлы, registry и чужие незакоммиченные изменения.