# Февраль 2027 — редакторское ревью после переписывания ## Объём партии - `editorial-2027-02-practice-bitrix-lessons` — 5 691 знак основного текста; - `editorial-2027-02-mechanism-bitrix-lessons` — 5 398 знаков; - `editorial-2027-02-field-bitrix-lessons` — 5 080 знаков. Stable slugs сохранены. Все три материала говорят с читателем о Bitrix/PHP boundary, а не о редакционном процессе. В body нет плановой или сценарной мета-лексики, статусов отсутствующих артефактов, synthetic hand-off и сюжета о развитии автора. ## Проход 1 — факты, техника, пример и источники - **Practice.** До: выбор `keep/wrap/replace` был описан как безопасная передача вопроса. После: `chooseLegacyBoundary()` принимает callers, characterization tests, unknown side effects и canonical contract. Причина: решение привязано к наблюдаемым условиям legacy-кода. - **Mechanism.** До: имя метода Bitrix подавалось как версия контракта. После: `inspectBitrixSurface()` отдельно проверяет module loaded, legacy surface и D7 surface. Причина: подключение модуля, наличие метода и семантика поля — разные факты. - **Field.** До: миграционная статья описывала форму evidence без read-back. После: `migrateUserFields()` показывает mapping `PERSONAL_PHONE`/`EMAIL`, сохраняет legacy snapshot и маркирует обратимость. Причина: пример проверяет именно данные поля и повторяемое преобразование. Источники проверены HTTP 200 и применены с границами: - [CUser](https://dev.1c-bitrix.ru/api_help/main/reference/cuser/index.php) — документация API, проверена 31 July 2026, класс с версии 3.0.6; поля `ID`, `EMAIL`, `PERSONAL_PHONE`, `XML_ID` и аналог D7; не описывает local events, права и callers. - [CModule::IncludeModule](https://dev.1c-bitrix.ru/api_help/main/reference/cmodule/includemodule.php) — документация API, проверена 31 July 2026, CModule с версии 3.0.1; условие подключения модуля; не подтверждает состояние конкретной установки. - [PHP `filter_var`](https://www.php.net/manual/en/function.filter-var.php) — PHP Manual, проверена 31 July 2026; валидация входного email; не определяет бизнес-правила Bitrix. - [Semantic Versioning 2.0.0](https://semver.org/spec/v2.0.0.html) — Version 2.0.0, 2013; граница обещаний совместимости; не делает внутренний Bitrix API semver-совместимым автоматически. ## Проход 2 — структура, голос, плотность и мета-лексика - **Practice.** До: вступление начиналось с «старый код нужно обновлять». После: первые два абзаца называют неявные поля, hooks, callers и цену потерянного поведения. Причина: возраст файла заменён конкретным риском. - **Mechanism.** До: текст повторял названия CUser/UserTable. После: порядок стал «модуль → поверхность → поля → семантика», а таблица связывает каждый слой с проверкой. Причина: читатель может выполнить диагностику без лозунга о миграции. - **Field.** До: успешный `ID` выглядел достаточным результатом. После: добавлены различия `missing`/`empty`, read-back и повторный запуск. Причина: статья отвечает на реальную поломку данных, а не на факт вызова API. Запрещённая мета-лексика проверена в body: `0` совпадений. Порядок «симптом → причина → проверка → действие → ограничение» сохранён для каждой статьи; общий вводный блок между тремя текстами не повторяется. ## Проход 3 — визуал, мобильная читаемость, доступность и повторы - **Practice.** До: дерево содержало synthetic contract и даты. После: SVG сравнивает callers, tests и side effects с тремя решениями. Причина: рисунок стал визуальным продолжением `chooseLegacyBoundary()`. - **Mechanism.** До: матрица показывала placeholder и hand-off. После: строки описывают module, method, fields и semantics; последний статус — «неясно, остановить замену». Причина: граница версии стала технической. - **Field.** До: петля заканчивалась отсутствующим migration result. После: схема проходит mapping, write, read-back и retry; отдельный узел различает `missing` и `clear`. Причина: визуал повторяет проверяемый порядок миграции. У SVG русские title/desc, alt/caption в статьях, локальная разметка и нет опасных элементов. Мобильный просмотр на 375 px повторён после правки длинных подписей в нижних узлах Bitrix-графики. ## Проверки ```text node --check scripts/upgrade-2027-02.mjs — PASS node scripts/upgrade-2027-02.mjs --verify-fixture — PASS, 4/4 npm run audit:draft -- scripts/upgrade-2027-02.mjs — PASS, 3/3 локальные Bitrix mapping/surface examples — PASS, 12/12 для всей партии xmllint --noout для 3 SVG — PASS SVG safety scan — PASS Sharp resize width=375 для 3 SVG — PASS; визуально проверены матрица, дерево и цикл strict cross-article scan января–апреля: collisions: [] ``` Git, registry, README, `articles.json`, приложение и файлы других месяцев не изменялись.