revise May 2025 engineering automation articles
Build and deploy / deploy (push) Successful in 15s

This commit is contained in:
2026-07-31 17:48:51 +03:00
parent 4930c69d90
commit fa6d1c3eac
7 changed files with 1255 additions and 1 deletions
+163
View File
@@ -0,0 +1,163 @@
# P87 — май 2025: автоматизация инженерной рутины без массовой ошибки
## Область draft-пакета
Пакет заменяет только три overlay-статьи:
- <code>editorial-2025-05-practice-engineering-automation</code> — «Автоматизация инженерной рутины без массовой ошибки».
- <code>editorial-2025-05-mechanism-engineering-automation</code> — «Почему preview, approval и audit trail не доказывают безопасный change».
- <code>editorial-2025-05-field-engineering-automation</code> — «Полевой маршрут: автоматизация без массового неверного change».
Единственный исполняемый артефакт — <code>web/scripts/upgrade-2025-05.mjs</code>.
Все 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.
<code>simulateSyntheticExecution</code> записывает только model receipt с
<code>productionEffect: not-attempted</code>. Его immutable audit record
заморожен через <code>Object.freeze</code> внутри модуля; это не durable,
append-only или tamper-proof storage. <code>stopAndPlanSyntheticRollback</code>
создаёт только новый plan с <code>planned-only-not-executed</code>; он не
наследует approval и не выполняет rollback.
Registry, README, очередь, <code>articles.json</code>, app-страницы, full
build, Git staging, commit и push намеренно не менялись.
## Исследование и историческая граница
Проверка URL выполнена 31.07.2026 обычными HTTPS-запросами
<code>curl -L --fail</code> / <code>curl -I -L --fail</code>, без TLS bypass
и без авторизации. HTTP 200 получены для всех трёх закреплённых источников.
Текущая доступность не заменяет историческую границу: все ссылки ведут на
immutable commit, существовавший к маю 2025.
| Источник | Историческое закрепление | Узко подтверждаемое утверждение | Граница утверждения |
| --- | --- | --- | --- |
| [Terraform plan](https://raw.githubusercontent.com/hashicorp/terraform/898e397ebaefb4d0c363b7332b3ba184b8852162/website/docs/cli/commands/plan.mdx) | commit <code>898e397ebaefb4d0c363b7332b3ba184b8852162</code>; tag <code>v1.10.5</code>; commit date 22.01.2025 | <code>terraform plan</code> сам не выполняет 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 <code>6a92295d73cd86b37a810a87f45e7deb21d10a0f</code>, 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 <code>c889d9b2510bba78dbb527a79b8e2099b16f3d67</code>, 14.03.2024 | <code>--dry-run=client</code> печатает object без отправки; <code>--dry-run=server</code> отправляет server-side request без persistence ресурса. | Не обещает, что поздний persistent apply увидит такое же state или policy, и не описывает другой инструмент. |
Вывод автора — «preview, approval и audit trail отвечают на разные вопросы» —
не приписан как гарантия ни Terraform, ни GitHub Actions, ни Kubernetes. Он
следует из разнесённых contracts учебной модели.
## Проход 1 — факты, историческая граница и техника
**Проверена модель.**
- <code>previewSyntheticAutomation</code> принимает только exact fixed
operation card: operation, selector, dense targets, target digest,
proposed change и requested authority.
- <code>requestSyntheticApproval</code> отдельно проверяет exact preview,
authority id, allowed selector и maximum targets.
- <code>approveSyntheticOperation</code> связывает operation id, preview
digest, target digest и authority id. Approval с другим target digest
останавливается до simulation.
- <code>simulateSyntheticExecution</code> создаёт только in-memory receipt и
audit record без real external effect.
- <code>verifySyntheticExecution</code> проверяет только exact synthetic
receipt и возвращает <code>requires-external-verification-not-performed</code>;
он не читает target и не объявляет production state проверенным.
- <code>stopAndPlanSyntheticRollback</code> требует trusted receipt/report и
возвращает новый rollback plan, а не command. Для реального rollback нужны
новый scope, authority, preview и approval.
**Проверены отрицательные ветки.**
| Случай | Где закрывается путь | Ожидаемый результат |
| --- | --- | --- |
| Unknown, extra или missing operation field | preview contract | fail-closed, <code>productionEffect: not-attempted</code> |
| Forged target digest | exact fixed card comparison | <code>untrusted-or-unknown-operation-card</code> |
| Three targets при authority limit два | authority gate | <code>stop-scope-exceeds-authority-limit</code> до approval |
| Forged authority card | authority gate | <code>forged-or-wrong-authority-card</code> |
| Approval A+C для preview A+B | approval binding | <code>stop-approval-does-not-bind-preview-target-and-authority</code> |
| Sparse/cyclic card или receipt | canonical comparison | reject без exception и без execution |
| Forged audit record | verification entry | <code>untrusted-or-forged-synthetic-audit-receipt</code> |
| 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. |
Редакторская вычитка:
- Каждая статья прямо называет проблему и <strong>цену ошибки</strong> в
первых двух <code>&lt;p&gt;</code>; это проверяет усиленный audit.
- В каждой статье есть table, figure с meaningful <code>alt</code> и 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 явно отделены от фактов источников; <code>immutable</code>
не выдан за свойство внешнего хранилища.
**Вердикт прохода 2:** пройдено. Статьи стали короче после саморевью, сохранив
таблицы, examples, ограничения, owner и final action.
## Проход 3 — SVG, fixture и усиленный audit draft
Проверены три собственных SVG:
| Asset | Смысл | Итог 375 px |
| --- | --- | --- |
| <code>engineering-automation-2025-preview-approval-rollback.svg</code> | Семь переходов и красная stop/rollback-plan ветка. | Footer сокращён после первого render; все карточки и подписи читаемы. |
| <code>engineering-automation-2025-authority-matrix.svg</code> | Authority limit, target mismatch, execute receipt и boundary verification. | Правый столбец и fail-closed footer сокращены после первого render; таблица читаема. |
| <code>engineering-automation-2025-dry-run-evidence-loop.svg</code> | Evidence loop от preview до observed verification и нового plan. | Footer сокращён после первого render; пунктирный возврат к новому plan виден. |
Последовательность проверок:
- <code>node --check scripts/upgrade-2025-05.mjs</code> — PASS.
- <code>node scripts/upgrade-2025-05.mjs --verify-fixture</code> — PASS,
<strong>31/31</strong> assertions.
- <code>npm run audit:draft -- scripts/upgrade-2025-05.mjs</code> — PASS для
всех трёх slugs, включая requirement о цене ошибки в первых двух paragraphs
и диапазон 5 000–15 000.
- <code>xmllint --noout</code> — PASS для трёх SVG.
- SVG safety scan — чисто: нет <code>script</code>,
<code>foreignObject</code>, <code>javascript:</code>,
<code>data:image</code> и event-handler attributes.
- Sharp render на ширине 375 px и ручной visual review — PASS после
сокращения трёх footer/column labels.
Full build и registry audit намеренно не запускались. Registry, README, queue,
<code>articles.json</code>, 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 страницы.