revise January 2024 legacy modernization articles
Build and deploy / deploy (push) Successful in 15s

This commit is contained in:
2026-07-31 15:28:25 +03:00
parent 201dc7bd54
commit e74907ff32
7 changed files with 779 additions and 1 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
# Производство редакционных партий
На 31 июля 2026 года строгий аудит проходит 214 из 358 созданных материалов. Остальные 144 не считаются «почти готовыми»: их нужно заменить, а не косметически удлинить.
На 31 июля 2026 года строгий аудит проходит 217 из 358 созданных материалов. Остальные 141 не считаются «почти готовыми»: их нужно заменить, а не косметически удлинить.
## Одна партия
+57
View File
@@ -0,0 +1,57 @@
# П71 · 2024-01 · Модернизация legacy-системы без потери поведения — три прохода саморевью
## Граница sidecar-партии
- Slug: <code>editorial-2024-01-practice-legacy-modernization</code>, <code>editorial-2024-01-mechanism-legacy-modernization</code>, <code>editorial-2024-01-field-legacy-modernization</code>.
- Голос: М7. Автор уже связывает локальный API/интеграционный опыт с ценой решения для команды: scope, owner, compatibility, rollout и rollback. Тон остаётся прагматичным: наблюдаемый симптом, причина, проверка, действие и граница вывода. Нет фиктивной production-истории, универсальных процентов rollout или обещания, что переписывание всегда безопасно.
- Созданы только этот review, один import-safe script и три локальных SVG. Не менялись <code>articles.json</code>, registry, README, очередь, Git и любые чужие пути. Партия не интегрирована.
- Fixture создаёт только фиксированные, явно помеченные synthetic JS-records в памяти. Он не читает legacy code/history, файлы, базу или переменные окружения; не запускает parity tests, CI, сеть или HTTP; не измеряет coverage/performance; не получает пользователей, трафик, ответы или deployment history. PASS не заявляет, что реальное legacy-поведение сохранено, parity прошёл или rollout/rollback выполнен.
## Проход 1 — факты и техника
- Исторические источники перепроверены 31.07.2026 и ограничены тем, что существовало к концу января 2024:
- [Martin Fowler, Original Strangler Fig Application, 29.06.2004](https://martinfowler.com/bliki/OriginalStranglerFigApplication.html). Использован только для исторического вывода о сложности и риске большого cut-over и ценности постепенного вытеснения. Страница прямо называет этот текст оригинальной версией; более поздние материалы со страницы не используются как знания автора января 2024.
- [OpenAPI Specification v3.1.0, 15.02.2021](https://spec.openapis.org/oas/v3.1.0.html). Использована для утверждений о language-agnostic HTTP interface, paths, operations и Schema Object. Документ не превращён в доказательство business semantics, side effect, temporal rule или runtime parity.
- [Google SRE Workbook, Canarying Releases, copyright 2018](https://sre.google/workbook/canarying-releases/). Использован для определения canary как частичного ограниченного по времени развёртывания с оценкой, требования сравнить canary/control и оговорки о synthetic load. Глава не перенесена в текст как готовый процент traffic, наблюдаемость, alert policy или release authority чужой команды.
- Три статьи отвечают на разные вопросы. Practice выбирает измеримый шов и стоимость временного сосуществования. Mechanism отделяет schema от transport/payload/effect/time compatibility. Field раскладывает rollout на manual gates и отделяет возврат route от data recovery.
- <code>createSyntheticModernizationPlan()</code> принимает только один фиксированный synthetic seam, три rules, три cases, три ordered stages, named owner и proposal вернуть legacy-only route. Поля для network, real result, coverage, whole-system rewrite, unknown owner, automatic release, перестановки stages и destructive rollback отклоняются до формирования plan.
- На техническом проходе найден риск ложного rollback: ранее функция могла принять произвольно собранный объект с <code>accepted=true</code> и пустым snapshot. Добавлена <code>isSyntheticSnapshot()</code> и отрицательная ветка <code>rejectsFabricatedSnapshot</code>. Независимое review добавило ещё одну защиту: snapshot с верной длиной nested arrays, но без фиксированных records, тоже отклоняется. Теперь rollback возвращает только snapshot plan с точным seam, compatibility rules/cases, ordered stages и rollback contract; он не выполняет route/data action.
- У результата явно сохранены отрицательные заявления: <code>realLegacyBehavior=not-read-or-claimed</code>, <code>parity=not-run-or-claimed</code>, <code>realRollout=not-attempted</code>, <code>releaseAuthority=not-granted</code>, <code>coverage=not-measured</code> и <code>performance=not-measured</code>. Это не операционный runbook и не тест production-поведения.
## Проход 2 — редактура, объём и голос
- Каждый текст начинается с конкретной цены ошибки: большой rewrite скрывает правила до cut-over; похожий JSON скрывает semantic/effect mismatch; процент rollout без control и data boundary расширяет blast radius.
- В каждой ревизии есть таблица, самостоятельный SVG с содержательными <code>alt</code> и подписью, executable synthetic fixture, нумерованный маршрут «симптом → причина → проверка → действие», limits, rollback boundary и следующий шаг.
- Автоматический аудит подтвердил основной объём без metadata и списка источников: practice — 10 713, mechanism — 10 857, field — 10 509 знаков. Все три статьи лежат в требуемом диапазоне П71 9–11 тыс. и общем диапазоне 5–15 тыс. знаков.
- Техническая речь оставлена короткой и привязанной к артефакту: <code>seam</code> означает один request/response contract; <code>parity</code> — выбранные invariants; <code>gate</code> — один вопрос и owner; <code>rollback-route</code> не выдается за data recovery. Общие оценки заменены условиями, evidence и действием.
- M7 не подменяет траекторию автора скачком в абстрактную стратегию. Мост к новой компетенции — ранние материалы о Bitrix/legacy-гранях, API contracts, delivery и наблюдаемости. В январе 2024 автор ещё не заявляет платформенный масштаб, а помогает команде сделать минимальный проверяемый шаг и увидеть стоимость неясности.
## Проход 3 — визуал, безопасность и выпуск
- <code>legacy-modernization-2024-strangler-map.svg</code> показывает один request-level seam, router decision, legacy/new adapters, owner и вынесенные за границу data/effects.
- <code>legacy-modernization-2024-compatibility-matrix.svg</code> разделяет valid/invalid/repeat и transport/payload/effect/time. Unknown остаётся отдельным результатом, а не декоративной зелёной отметкой.
- <code>legacy-modernization-2024-rollout-gate.svg</code> показывает manual stages, comparison evidence, return route и отдельную красную границу data recovery/provider effect.
- После первого Sharp-review заголовок матрицы не помещался на ширине 375 px. Он сокращён до «Parity: свойства важнее похожего JSON»; финальный рендер читаем без обрезания. В остальных двух схемах проверены стрелки, подписи, границы и отсутствие перекрытий.
- SVG не содержит <code>script</code>, <code>foreignObject</code>, внешних URL, <code>javascript:</code>, <code>data:image</code> или event-handler attributes. В каждом есть <code>title</code>, <code>desc</code>, <code>role=img</code> и корректный viewBox.
- Выполнены: <code>node --check web/scripts/upgrade-2024-01.mjs</code> — PASS; fixture — PASS 26/26 после независимого model review; <code>cd web && npm run audit:draft -- scripts/upgrade-2024-01.mjs</code> — PASS для трёх slug; import-safe export без <code>date</code>/<code>author</code> — PASS через audit; <code>xmllint --noout</code> — PASS; SVG safety scan — чисто; Sharp 375 px — PASS.
- Не запускались production build, registry integration, Git commit и push: это за пределами sidecar-ограничения и будет отдельной приёмкой.
## Интеграционное ревью главного агента
Проверены первичные источники. Original Strangler Fig Application описывает
риск big cut-over и постепенное вытеснение; OAS 3.1.0 от 15 февраля 2021
определяет language-agnostic HTTP interface; Google SRE Workbook связывает
canary с сопоставлением control/canary и отдельно ограничивает synthetic load
как неполное представление state coverage. Эти факты используются как рамка,
не как доказательство эффективности конкретной миграции.
Model review обнаружил, что `isSyntheticSnapshot()` проверял длины вложенных
arrays, но не их exact records. Snapshot теперь сохраняет полный contract и
rollout shape, а его проверка вызывает строгие validators seam/rules/cases/
stages/rollback. Добавлена ветка с тремя пустыми records каждой коллекции;
она отвергается. Fixture проходит `26/26` assertions.
Все SVG прошли XML и safety scan, затем вручную проверены после Sharp-render
на 375 px. Повторный draft audit: 10 755 / 10 857 / 10 509 знаков. Строгий
archive audit прошёл для трёх slug; registry содержит 208 уникальных ревизий.
`npm run build` успешно сгенерировал 374 статические страницы.