17 KiB
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 | 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 | immutable commit 6a92295d73cd86b37a810a87f45e7deb21d10a0f, 31.01.2025 |
Job, который ссылается на environment, ждёт protection rules и не получает environment secrets до их прохождения; approval и bypass имеют отдельные правила. | Описывает GitHub Actions environment в этой версии, не семантику diff, независимость reviewer, полноту preview или безопасность другого runner. |
| Kubernetes kubectl apply | 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 страницы.