Files
progcode/editorial/reviews/2025-05-draft.md
T
huncode fa6d1c3eac
Build and deploy / deploy (push) Successful in 15s
revise May 2025 engineering automation articles
2026-07-31 17:48:51 +03:00

164 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 страницы.