# P87 — май 2025: автоматизация инженерной рутины без массовой ошибки
## Область draft-пакета
Пакет заменяет только три overlay-статьи:
- editorial-2025-05-practice-engineering-automation — «Автоматизация инженерной рутины без массовой ошибки».
- editorial-2025-05-mechanism-engineering-automation — «Почему preview, approval и audit trail не доказывают безопасный change».
- editorial-2025-05-field-engineering-automation — «Полевой маршрут: автоматизация без массового неверного change».
Единственный исполняемый артефакт — web/scripts/upgrade-2025-05.mjs.
Все operation cards, target ids, selector ids, digests, authority levels,
approval cards, timestamps, execution receipts, audit records, verification
reports, stop codes и rollback plans в нём — fixed synthetic in-memory
значения. Скрипт не читает и не пишет files, Git, сеть, CI, clock, telemetry,
production, cloud или real API и не выполняет реальный change.
simulateSyntheticExecution записывает только model receipt с
productionEffect: not-attempted. Его immutable audit record
заморожен через Object.freeze внутри модуля; это не durable,
append-only или tamper-proof storage. stopAndPlanSyntheticRollback
создаёт только новый plan с planned-only-not-executed; он не
наследует approval и не выполняет rollback.
Registry, README, очередь, articles.json, app-страницы, full
build, Git staging, commit и push намеренно не менялись.
## Исследование и историческая граница
Проверка URL выполнена 31.07.2026 обычными HTTPS-запросами
curl -L --fail / curl -I -L --fail, без TLS bypass
и без авторизации. HTTP 200 получены для всех трёх закреплённых источников.
Текущая доступность не заменяет историческую границу: все ссылки ведут на
immutable commit, существовавший к маю 2025.
| Источник | Историческое закрепление | Узко подтверждаемое утверждение | Граница утверждения |
| --- | --- | --- | --- |
| [Terraform plan](https://raw.githubusercontent.com/hashicorp/terraform/898e397ebaefb4d0c363b7332b3ba184b8852162/website/docs/cli/commands/plan.mdx) | commit 898e397ebaefb4d0c363b7332b3ba184b8852162; tag v1.10.5; commit date 22.01.2025 | terraform plan сам не выполняет proposed changes; speculative plan не имеет намерения apply, а change target system между early plan и final apply способен изменить final effect. | Не задаёт универсальный protocol approval, audit storage или rollback и не подтверждает correct change в другой системе. |
| [GitHub Docs: environments](https://raw.githubusercontent.com/github/docs/6a92295d73cd86b37a810a87f45e7deb21d10a0f/content/actions/managing-workflow-runs-and-deployments/managing-deployments/managing-environments-for-deployment.md) | immutable commit 6a92295d73cd86b37a810a87f45e7deb21d10a0f, 31.01.2025 | Job, который ссылается на environment, ждёт protection rules и не получает environment secrets до их прохождения; approval и bypass имеют отдельные правила. | Описывает GitHub Actions environment в этой версии, не семантику diff, независимость reviewer, полноту preview или безопасность другого runner. |
| [Kubernetes kubectl apply](https://raw.githubusercontent.com/kubernetes/website/c889d9b2510bba78dbb527a79b8e2099b16f3d67/content/en/docs/reference/kubectl/generated/kubectl_apply/_index.md) | immutable commit c889d9b2510bba78dbb527a79b8e2099b16f3d67, 14.03.2024 | --dry-run=client печатает object без отправки; --dry-run=server отправляет server-side request без persistence ресурса. | Не обещает, что поздний persistent apply увидит такое же state или policy, и не описывает другой инструмент. |
Вывод автора — «preview, approval и audit trail отвечают на разные вопросы» —
не приписан как гарантия ни Terraform, ни GitHub Actions, ни Kubernetes. Он
следует из разнесённых contracts учебной модели.
## Проход 1 — факты, историческая граница и техника
**Проверена модель.**
- previewSyntheticAutomation принимает только exact fixed
operation card: operation, selector, dense targets, target digest,
proposed change и requested authority.
- requestSyntheticApproval отдельно проверяет exact preview,
authority id, allowed selector и maximum targets.
- approveSyntheticOperation связывает operation id, preview
digest, target digest и authority id. Approval с другим target digest
останавливается до simulation.
- simulateSyntheticExecution создаёт только in-memory receipt и
audit record без real external effect.
- verifySyntheticExecution проверяет только exact synthetic
receipt и возвращает requires-external-verification-not-performed;
он не читает target и не объявляет production state проверенным.
- stopAndPlanSyntheticRollback требует trusted receipt/report и
возвращает новый rollback plan, а не command. Для реального rollback нужны
новый scope, authority, preview и approval.
**Проверены отрицательные ветки.**
| Случай | Где закрывается путь | Ожидаемый результат |
| --- | --- | --- |
| Unknown, extra или missing operation field | preview contract | fail-closed, productionEffect: not-attempted |
| Forged target digest | exact fixed card comparison | untrusted-or-unknown-operation-card |
| Three targets при authority limit два | authority gate | stop-scope-exceeds-authority-limit до approval |
| Forged authority card | authority gate | forged-or-wrong-authority-card |
| Approval A+C для preview A+B | approval binding | stop-approval-does-not-bind-preview-target-and-authority |
| Sparse/cyclic card или receipt | canonical comparison | reject без exception и без execution |
| Forged audit record | verification entry | untrusted-or-forged-synthetic-audit-receipt |
| Forged verification report | stop/rollback boundary | нет rollback plan для недоверенного input |
Fixture проверяет exact contracts и negative branches; она не проверяет
identity, durable storage, external state, real permissions, live policy,
network races или криптографические свойства digest.
**Вердикт прохода 1:** пройдено. Источники ограничены своим содержанием и
датированы до мая 2025; пример не выдаёт in-memory model за production runner.
## Проход 2 — редактура, М8 и плотность
Тон соответствует М8: автор ведёт от наблюдаемой цены ошибки к ownership,
contracts и проверяемому следующему шагу. Техническая речь строится по схеме
«симптом → причина → проверка → действие» без универсальных обещаний и без
анахронизмов после мая 2025.
| Статья | Проблема и цена ошибки в первых двух абзацах | Основной текст | Практический артефакт | Проверяемый финал |
| --- | --- | ---: | --- | --- |
| practice | Массовая рутина масштабирует неверный selector; цена — неверное state, восстановление и потеря истории запуска. | 10 982 знака | operation card, цепочка gates, 31-assertion fixture | Подменить target digest или добавить target и получить stop до write. |
| mechanism | Green pipeline скрывает разрыв между proposal, authority, approval, audit и observed state; цена — неверный scope и рискованный rollback. | 10 983 знака | матрица доказательств, authority/approval contracts | Удалить binding field и показать, что старый approval не переносится на новый scope. |
| field | Широкий selector и stale inventory создают массовый change; цена — частичный state и повторный опасный запуск. | 10 982 знака | checklist, fail-closed example, rollback boundary | Запустить three-case test: bounded, over-scope, mismatched approval. |
Редакторская вычитка:
- Каждая статья прямо называет проблему и цену ошибки в
первых двух <p>; это проверяет усиленный audit.
- В каждой статье есть table, figure с meaningful alt и caption,
компактный reproduciable example, ограничения и следующий проверяемый шаг.
- Preview/dry-run, authority, approval, audit trail, verification и rollback
не названы взаимозаменяемыми. Текст отдельно фиксирует ограничения каждого
барьера.
- Все body лежат в диапазоне 5 000–15 000 и в целевом диапазоне 8–11 тыс.
знаков; после сокращения сняты повторы о review, audit и rollback без потери
negative branches.
- Fixed synthetic labels явно отделены от фактов источников; immutable
не выдан за свойство внешнего хранилища.
**Вердикт прохода 2:** пройдено. Статьи стали короче после саморевью, сохранив
таблицы, examples, ограничения, owner и final action.
## Проход 3 — SVG, fixture и усиленный audit draft
Проверены три собственных SVG:
| Asset | Смысл | Итог 375 px |
| --- | --- | --- |
| engineering-automation-2025-preview-approval-rollback.svg | Семь переходов и красная stop/rollback-plan ветка. | Footer сокращён после первого render; все карточки и подписи читаемы. |
| engineering-automation-2025-authority-matrix.svg | Authority limit, target mismatch, execute receipt и boundary verification. | Правый столбец и fail-closed footer сокращены после первого render; таблица читаема. |
| engineering-automation-2025-dry-run-evidence-loop.svg | Evidence loop от preview до observed verification и нового plan. | Footer сокращён после первого render; пунктирный возврат к новому plan виден. |
Последовательность проверок:
- node --check scripts/upgrade-2025-05.mjs — PASS.
- node scripts/upgrade-2025-05.mjs --verify-fixture — PASS,
31/31 assertions.
- npm run audit:draft -- scripts/upgrade-2025-05.mjs — PASS для
всех трёх slugs, включая requirement о цене ошибки в первых двух paragraphs
и диапазон 5 000–15 000.
- xmllint --noout — PASS для трёх SVG.
- SVG safety scan — чисто: нет script,
foreignObject, javascript:,
data:image и event-handler attributes.
- Sharp render на ширине 375 px и ручной visual review — PASS после
сокращения трёх footer/column labels.
Full build и registry audit намеренно не запускались. Registry, README, queue,
articles.json, app-files и Git остаются вне scope P87.
**Вердикт прохода 3:** пройдено для самостоятельного draft-пакета.
Публикация не выполнялась.
## Выпуск после независимой приёмки
### 1. Факты и техника
Редактор повторно проверил первичные источники по immutable HTTPS-revisions. Terraform commit `898e397ebaefb4d0c363b7332b3ba184b8852162` от 22 января 2025 подтверждает различие speculative plan и final apply, включая риск изменения target system между ними. GitHub Docs commit `6a92295d73cd86b37a810a87f45e7deb21d10a0f` от 31 января 2025 подтверждает environment protection rules, недоступность secrets до их прохождения и отдельную настройку bypass. Kubernetes website commit `c889d9b2510bba78dbb527a79b8e2099b16f3d67` от 14 марта 2024 подтверждает границу client/server dry-run. Ни один из фактов не расширен в текстах до гарантии безопасности произвольного runner.
Заново запущены `node --check`, fixture (31/31) и усиленный draft audit. Ручной запуск всех трёх опубликованных code examples вернул ожидаемые статусы: positive path остаётся simulated execution без внешнего change, over-scope и lower-authority cases останавливаются до approval. Три статьи содержат 10 982, 10 983 и 10 982 знака. Fixed synthetic fixture сознательно не моделирует identity, срок approval, durable audit store и observed production state; статьи называют эти поля требованиями реального процесса, а не свойствами модели.
### 2. Редактура и голос автора
Полностью прочитаны practice, mechanism и field case. Первые два абзаца каждой формулируют наблюдаемую проблему и цену массовой ошибки. Текст выдерживает прагматичный маршрут «симптом → причина → проверка → действие»: отдельно названы proposal, scope, authority, approval, audit trail, observed verification и rollback plan. В статьях нет вымышленных production-инцидентов, фактических прав или внешних операций; термины получают технический контекст, а следующие шаги воспроизводимы на одной ограниченной операции.
### 3. Визуал и выпуск
Все SVG прошли XML и safety scan. Независимый Sharp render на ширине 375 px показал читаемые карточки, строки матрицы и stop-ветки без обрезания; figure alt и captions объясняют, что именно доказывает диаграмма. После подключения overlay целевой audit подтвердил по одной figure, таблице и code example у practice, по одной figure, двум таблицам и одному примеру у mechanism и field. Registry содержит 256 уникальных ревизий, `git diff --check` чист, production build успешно сгенерировал 374 страницы.