raise editorial quality gate and revise 2018 spring
Build and deploy / deploy (push) Successful in 15s
Build and deploy / deploy (push) Successful in 15s
This commit is contained in:
@@ -18,17 +18,36 @@
|
||||
- Добавить минимум один рисунок или диаграмму, один пример и один проверяемый источник.
|
||||
- Закончить конкретным порядком действий, ограничениями и тем, что именно следует проверить в своём проекте.
|
||||
|
||||
## Объём и плотность
|
||||
|
||||
- Основной текст статьи, без HTML-разметки, заголовка, метаданных и списка источников, занимает от **5 000 до 15 000 знаков**.
|
||||
- Нижняя граница — не повод искусственно растягивать выводы. Если тема проста, глубину создают контекст, контрпример, проверка и решение, а не повтор одной мысли.
|
||||
- Верхняя граница — повод разбить слишком широкую тему на серию. Одна статья отвечает на один главный вопрос.
|
||||
- Каждый абзац либо добавляет факт, решение, ограничение или следующий шаг. Вступления «вообще о важности темы» и эмоциональные связки без технического смысла вырезаются.
|
||||
|
||||
## Техническая речь
|
||||
|
||||
- Пишем коротко и предметно: **симптом → причина → проверка → действие**. Предпочитаем глаголы и наблюдаемые факты: «запрос вернул 403», «фильтр исключает запись», «метрика выросла на 18%».
|
||||
- Один абзац — одна мысль; одно предложение не пытается одновременно описать проблему, историю команды и решение.
|
||||
- Термин используется только там, где он точнее обычного слова. После первого появления даём расшифровку или пример.
|
||||
- Не используем общие оценки: «в современном мире», «очень важно», «магическая сила», «просто нужно учитывать». Вместо них называем условие, риск или ограничение.
|
||||
- Заголовок обещает ровно тот вопрос, на который отвечает текст. Результат не объявляется «универсальным», если он зависит от версии, нагрузки, прав или архитектуры проекта.
|
||||
|
||||
## Голос автора
|
||||
|
||||
- Для 2017–2018 годов — практичная, тёплая заметка инженера: «давайте разберём», осторожные выводы, внимание к реальной ошибке и следующему шагу.
|
||||
- Для 2019–2021 годов — инженер развивает T-shape: от PHP и Bitrix к фронтенду, инфраструктуре и данным. Текст всё ещё говорит от первого лица, но уже связывает решение с границами системы.
|
||||
- Для 2022–2024 годов — системный практик: появляются измерения, надёжность, безопасность, доставка и взаимодействие ролей. Утверждения становятся проверяемее, а выводы — спокойнее.
|
||||
- Для 2025–2027 годов — наставник и техлид: автор сравнивает варианты, называет стоимость решения, объясняет компромиссы и оставляет команде воспроизводимый способ работы.
|
||||
- Не подменять опыт общими фразами вроде «важно учитывать» или «магическая сила». Каждое обобщение должно опираться на случай, код, таблицу или источник.
|
||||
- Не делать вид, что исторический автор уже знает инструменты и практики 2027 года. Поздние материалы могут становиться системнее, но развитие должно быть постепенным.
|
||||
- Термины и сокращения раскрываются при первом появлении, если они не очевидны из контекста кода.
|
||||
- Полная временная карта, словарь, переходы навыков и анти-анахронизмы находятся в `editorial/voice/author-trajectory-2017-2027.md`; она обязательна для редакторского прохода.
|
||||
|
||||
## Тройное ревью перед публикацией
|
||||
|
||||
1. **Факты и техника.** Сверить утверждения с источниками, проверить пример, версионные оговорки, ссылки и отсутствие ложных обещаний.
|
||||
2. **Редактура и голос.** Проверить постановку проблемы, полноту раскрытия, естественность тона соответствующего года, повторы и ясность переходов.
|
||||
2. **Редактура и голос.** Проверить постановку проблемы, объём 5–15 тыс. знаков, плотность, прагматичность речи, естественность тона соответствующего года, повторы и ясность переходов.
|
||||
3. **Визуал и выпуск.** Открыть изображения и диаграммы, проверить таблицы на узком экране, доступность `alt`/подписей, JSON, автоматический аудит и production-сборку.
|
||||
|
||||
Результат каждой ручной проверки фиксируется рядом с партией в `editorial/reviews/`.
|
||||
|
||||
@@ -34,3 +34,5 @@
|
||||
## Публикация
|
||||
|
||||
Первичный массовый генератор `web/scripts/publishEditorialArchive.mjs` выведен из использования: он не соответствует редакционному стандарту и не должен перезаписывать доработанные статьи. Переработка идёт небольшими тематическими тройками поверх существующего архива. Для каждой тройки есть источник текста, автоматическая проверка, ручное трёхкратное ревью и проверка сборки.
|
||||
|
||||
Текущая очередь, состояние архива и входной quality gate описаны в [производственном контуре](production/README.md).
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
# Производство редакционных партий
|
||||
|
||||
На 31 июля 2026 года строгий аудит проходит 3 из 358 созданных материалов. Остальные 355 не считаются «почти готовыми»: их нужно заменить, а не косметически удлинить.
|
||||
|
||||
## Одна партия
|
||||
|
||||
Партия содержит три связанные, но не повторяющие друг друга статьи:
|
||||
|
||||
1. практический разбор с воспроизводимым решением;
|
||||
2. объяснение механизма и границ ответственности;
|
||||
3. полевой кейс, диагностику или сравнение вариантов.
|
||||
|
||||
Для каждой статьи автор готовит исследование, основной текст на 5 000–15 000 знаков, отдельный visual asset, таблицу, пример и список источников. Черновой скрипт не имеет права писать в `web/data/articles.json`: он только печатает ревизии через `--print-revisions`.
|
||||
|
||||
## Вход в публикацию
|
||||
|
||||
Основной редактор интегрирует партию только после того, как одновременно выполнены:
|
||||
|
||||
- исследовательское ревью: ссылки проверены, версии и ограничения названы;
|
||||
- редакторское ревью: проблема в начале, нет шаблонного языка, голос соответствует году;
|
||||
- визуальное ревью: рисунки открываются, таблицы работают на 375px, у рисунков есть `alt` и подписи;
|
||||
- `node --check`, XML-проверка диаграмм, `npm run audit:articles -- <slugs>` и production-сборка проходят.
|
||||
|
||||
После этого рядом с партией появляется запись в `editorial/reviews/`, а изменение публикуется отдельным коммитом. Ни один скрипт не должен перегенерировать уже отревьюированный архив целиком.
|
||||
File diff suppressed because it is too large
Load Diff
@@ -22,7 +22,7 @@
|
||||
- Проблема названа в первом абзаце, а финал даёт проверяемый следующий шаг.
|
||||
- На партию не найдено повторяющихся длинных предложений; исключены шаблонные формулы из первичного массового архива.
|
||||
- Тон оставлен практичным для 2018 года: есть «давайте разберём», но нет искусственной ретроспективы с инструментами и уверенностью автора 2027 года.
|
||||
- Глубина после финальной правки: 5 102, 5 634 и 5 085 символов обычного текста; 9, 9 и 10 минут чтения соответственно.
|
||||
- Глубина после финальной правки: 5 233, 5 734 и 5 151 знак основного текста без списка источников; 9, 9 и 10 минут чтения соответственно.
|
||||
|
||||
## 3. Визуал и выпуск — пройдено
|
||||
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
# Черновое тройное ревью — февраль 2018
|
||||
|
||||
Партия не интегрирована в `web/data/articles.json`. Ревизии доступны только через:
|
||||
|
||||
```bash
|
||||
node web/scripts/upgrade-2018-02.mjs --print-revisions
|
||||
```
|
||||
|
||||
## 1. Факты и техника
|
||||
|
||||
| Слаг | Главный вопрос | Проверенные первичные источники | Результат |
|
||||
| --- | --- | --- | --- |
|
||||
| `editorial-2018-02-practice-php-diagnostics` | Как оставить диагностический факт при 500 и фатальной ошибке PHP? | [set_error_handler](https://www.php.net/manual/en/function.set-error-handler.php), [set_exception_handler](https://www.php.net/manual/en/function.set-exception-handler.php), [register_shutdown_function](https://www.php.net/manual/en/function.register-shutdown-function.php), [error_get_last](https://www.php.net/manual/en/function.error-get-last.php) | Пример не обещает перехватить ошибки до регистрации обработчиков; отдельно названы ограничения фатального пути. |
|
||||
| `editorial-2018-02-mechanism-php-diagnostics` | Почему строка от `curl_exec()` не означает успех API-операции? | [curl_exec](https://www.php.net/manual/en/function.curl-exec.php), [curl_getinfo](https://www.php.net/manual/en/function.curl-getinfo.php), [curl_errno](https://www.php.net/manual/en/function.curl-errno.php), [RFC 7231](https://www.rfc-editor.org/rfc/rfc7231#section-6) | Строго разделены ошибка cURL, HTTP-статус и контракт тела; повтор записи не рекомендован без идемпотентности. |
|
||||
| `editorial-2018-02-field-php-diagnostics` | Как отделить битый JSON от корректного `null`? | [json_decode](https://www.php.net/manual/en/function.json-decode.php), [json_last_error](https://www.php.net/manual/en/function.json-last-error.php), [RFC 8259](https://www.rfc-editor.org/rfc/rfc8259.html) | Используется подход PHP 7.1; отмечено, что `JSON_THROW_ON_ERROR` появился только в PHP 7.3. |
|
||||
|
||||
Проверено вручную:
|
||||
|
||||
- В каждой статье не меньше двух официальных или первичных источников.
|
||||
- Утверждение о статусах HTTP ограничено протокольным уровнем; успех бизнес-операции проверяется проектным контрактом.
|
||||
- В журналы не предлагается писать пароли, токены, исходное тело запроса или полный ответ партнёра.
|
||||
- У примеров есть версия и границы: PHP 7.1, проектные таймауты, отсутствие универсального retry.
|
||||
|
||||
## 2. Редактура и голос
|
||||
|
||||
| Слаг | Проблема в начале | Техническая речь и тон 2018 | Объём основного текста |
|
||||
| --- | --- | --- | --- |
|
||||
| `editorial-2018-02-practice-php-diagnostics` | Ответ 500 без причины в журнале | Короткая практическая заметка: контекст, этап, обработчик, проверка | Проверяется скриптом, диапазон 5 000–15 000 знаков |
|
||||
| `editorial-2018-02-mechanism-php-diagnostics` | Строка от cURL ошибочно объявляется успешной интеграцией | Симптом → уровень сбоя → запись в журнал → действие | Проверяется скриптом, диапазон 5 000–15 000 знаков |
|
||||
| `editorial-2018-02-field-php-diagnostics` | `if (!$data)` склеивает несколько разных состояний | Один вопрос о JSON, затем конкретные значения и контракт | Проверяется скриптом, диапазон 5 000–15 000 знаков |
|
||||
|
||||
Проверено вручную:
|
||||
|
||||
- У каждой статьи один главный вопрос; темы не копируют друг друга: runtime PHP, transport/HTTP и payload JSON.
|
||||
- Изъяты общие вводные о «важности» и обещания универсального решения.
|
||||
- Использованы проектные оговорки вместо выдуманных цифр, версий партнёрских API или результатов замеров.
|
||||
- Статьи заканчиваются действиями и ограничениями до списка источников.
|
||||
|
||||
## 3. Визуал и выпуск
|
||||
|
||||
| Материал | Назначение | Проверка |
|
||||
| --- | --- | --- |
|
||||
| `php-fatal-context-flow.svg` | Показывает три ветки диагностики PHP и общий контекст операции | SVG содержит `title`, `desc`, осмысленный `alt` и подпись в статье |
|
||||
| `curl-outcome-classifier.svg` | Разделяет транспорт, HTTP и контракт тела | SVG содержит `title`, `desc`, осмысленный `alt` и подпись в статье |
|
||||
| `json-payload-diagnostic.svg` | Разделяет ошибку декодера и нарушение JSON-контракта | SVG содержит `title`, `desc`, осмысленный `alt` и подпись в статье |
|
||||
|
||||
Проверки к запуску перед интеграцией:
|
||||
|
||||
```bash
|
||||
node --check web/scripts/upgrade-2018-02.mjs
|
||||
node web/scripts/upgrade-2018-02.mjs --print-revisions | jq 'length'
|
||||
xmllint --noout web/public/assets/editorial/2018/php-fatal-context-flow.svg
|
||||
xmllint --noout web/public/assets/editorial/2018/curl-outcome-classifier.svg
|
||||
xmllint --noout web/public/assets/editorial/2018/json-payload-diagnostic.svg
|
||||
```
|
||||
|
||||
После интеграции основной агент должен запустить общий audit-скрипт и production-сборку. Этот авторский черновик их намеренно не запускает: он не меняет архив.
|
||||
|
||||
### Результаты авторского прохода
|
||||
|
||||
- `node --check web/scripts/upgrade-2018-02.mjs` — PASS.
|
||||
- `node web/scripts/upgrade-2018-02.mjs --print-revisions` вернул массив из трёх ревизий; встроенная проверка структуры прошла.
|
||||
- Длина основного текста без источников: 7 109, 6 519 и 6 706 знаков соответственно; все значения в диапазоне 5 000–15 000.
|
||||
- `xmllint --noout` для трёх SVG — PASS.
|
||||
- Локальная браузерная отрисовка SVG заблокирована политикой среды, поэтому финальный просмотр на desktop и узком экране остаётся выпускной проверкой после интеграции в страницу. Структурная проверка выполнена: у каждого SVG единый `viewBox 1200×620`, описание `title`/`desc` и все координаты элементов лежат внутри полотна.
|
||||
@@ -0,0 +1,65 @@
|
||||
# Март 2018 — безопасная загрузка файлов: draft-review
|
||||
|
||||
Статус: принято в публикационный слой 31 июля 2026 после независимого audit. Эта партия существует как три ревизии из `web/scripts/upgrade-2018-03.mjs --print-revisions`; слой `web/data/editorial-revisions.mjs` сопоставляет их только по стабильным slug, не меняя даты, автора или историю Git.
|
||||
|
||||
| Slug | Главный вопрос | Основной текст без источников |
|
||||
| --- | --- | ---: |
|
||||
| `editorial-2018-03-practice-safe-uploads` | Как принять JPEG или PNG для аватара без доверия к имени и MIME-типу формы? | 5 666 знаков |
|
||||
| `editorial-2018-03-mechanism-safe-uploads` | Какие признаки файла можно использовать для какой проверки? | 6 209 знаков |
|
||||
| `editorial-2018-03-field-safe-uploads` | Как выдать владельцу приватный PDF, если файл хранится вне веб-корня? | 5 688 знаков |
|
||||
|
||||
## 1. Факты и техника — пройдено
|
||||
|
||||
### Практика: приём аватара
|
||||
|
||||
- Проверены [коды ошибок загрузки PHP](https://www.php.net/manual/en/features.file-upload.errors.php), [move_uploaded_file](https://www.php.net/manual/en/function.move-uploaded-file.php), [finfo_file](https://www.php.net/manual/en/function.finfo-file.php), [ограничение getimagesize как валидатора](https://www.php.net/manual/en/function.getimagesize.php) и [OWASP File Upload Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/File_Upload_Cheat_Sheet.html).
|
||||
- Пример проверяет `UPLOAD_ERR_OK`, прикладной лимит, MIME-тип через Fileinfo и размеры изображения до переноса. `getimagesize()` используется только для размеров, не как доказательство корректности изображения.
|
||||
- Ограничения названы прямо: нет антивирусной проверки, CSRF-защиты и обработки миниатюр.
|
||||
|
||||
### Механизм: границы доверия
|
||||
|
||||
- Проверены [RFC 7578 для multipart/form-data](https://www.rfc-editor.org/rfc/rfc7578), [коды ошибок PHP](https://www.php.net/manual/en/features.file-upload.errors.php), [Fileinfo](https://www.php.net/manual/en/function.finfo-file.php), [getimagesize](https://www.php.net/manual/en/function.getimagesize.php) и [OWASP](https://cheatsheetseries.owasp.org/cheatsheets/File_Upload_Cheat_Sheet.html).
|
||||
- Воспроизводимый `curl`-пример не утверждает конкретный результат базы magic: он показывает разницу между заявленным клиентом `type` и типом, который определяет Fileinfo.
|
||||
- Статья не называет Fileinfo антивирусом и не переносит ответственность за лимит всего запроса на одну PHP-функцию.
|
||||
|
||||
### Поле: выдача приватного PDF
|
||||
|
||||
- Проверены [OWASP для размещения файлов вне webroot](https://cheatsheetseries.owasp.org/cheatsheets/File_Upload_Cheat_Sheet.html), [header()](https://www.php.net/manual/en/function.header.php), [readfile()](https://www.php.net/manual/en/function.readfile.php) и [RFC 6266 для Content-Disposition](https://www.rfc-editor.org/rfc/rfc6266).
|
||||
- В коде ID документа и текущий пользователь участвуют в одном SQL-запросе; путь строится только из ключа, прошедшего контрактное регулярное выражение.
|
||||
- Ограничения не скрыты: в примере нет Range, кеширования, ограничения частоты и эффективной выдачи больших файлов.
|
||||
|
||||
Версионная оговорка: код ориентирован на PHP 7.2. В статьях не используются приёмы, добавленные позднее; актуальные страницы PHP Manual взяты как первичный справочник функций и их ограничений.
|
||||
|
||||
## 2. Редактура и голос — пройдено после исправления стоп-условия
|
||||
|
||||
- Каждая статья отвечает на один вопрос и начинает с наблюдаемой ситуации, а не с общего рассуждения о безопасности.
|
||||
- Для `mechanism` и `field` первоначальный строгий audit обнаружил недостаточно явную постановку проблемы. В первые два предложения добавлены формулировки `Симптом:` и `Цена ошибки`; сильная исходная подводка сохранена дальше в том же абзаце.
|
||||
- Повторный CLI-audit подтвердил: обе статьи содержат симптом и цену ошибки в первых 420 знаках; длины — 6 209 и 5 688 знаков соответственно.
|
||||
- Речь соответствует 2018 году: короткие технические абзацы, «давайте» и «я бы» только там, где автор делает практический вывод; нет обещаний универсального решения, поздних инструментов и шаблонных оборотов.
|
||||
- Во всех трёх ревизиях есть проблема, таблица, воспроизводимый пример, порядок действий, ограничения, один рисунок и минимум четыре первичных или нормативных источника.
|
||||
|
||||
## 3. Визуал и выпуск — пройдено для черновика
|
||||
|
||||
- `xmllint --noout` прошёл для трёх SVG: `php-upload-avatar-contract.svg`, `php-upload-trust-signals.svg`, `php-private-download-flow.svg`.
|
||||
- В локальном рендере SVG проверены title, доступное описание, границы текста и масштаб 1280×720: 31, 26 и 20 текстовых узлов соответственно; выходов за границы нет.
|
||||
- На первой схеме во время визуальной проверки найден и исправлен контраст номеров этапов: цвет изменён с белого на тёмный `rgb(46, 82, 103)`.
|
||||
- Каждый рисунок будет иметь осмысленный `alt` и подпись через данные ревизии. Таблицы обёрнуты в `table-scroll`; текущие стили блога добавляют горизонтальную прокрутку при минимальной ширине таблицы 620px.
|
||||
- Production-сборка и проверка опубликованных URL не запускались намеренно: статьи ещё не интегрированы в `web/data/articles.json`. Это выпускной шаг основного агента, а не основание менять архив из этой ветки.
|
||||
|
||||
## Повторённые команды
|
||||
|
||||
```sh
|
||||
node --check web/scripts/upgrade-2018-03.mjs
|
||||
node web/scripts/upgrade-2018-03.mjs --print-revisions
|
||||
xmllint --noout \
|
||||
web/public/assets/editorial/2018/php-upload-avatar-contract.svg \
|
||||
web/public/assets/editorial/2018/php-upload-trust-signals.svg \
|
||||
web/public/assets/editorial/2018/php-private-download-flow.svg
|
||||
```
|
||||
|
||||
Результат: три ревизии готовы для точечной интеграции без перезаписи остальных статей.
|
||||
|
||||
## Приёмка основного агента
|
||||
|
||||
- Повторно пройден строгий `audit-quality-batch.mjs`: 5 666 / 6 209 / 5 688 знаков основного текста; в каждой статье найдены рисунок с `alt`, таблица, код, порядок действий и отдельный раздел источников.
|
||||
- Проверены безопасный import модуля и CLI-вывод ровно трёх ревизий. Production build после интеграции прошёл и сгенерировал 374 статические страницы.
|
||||
@@ -0,0 +1,34 @@
|
||||
# Апрель 2018 — черновики о символьных кодах и ЧПУ
|
||||
|
||||
Статус: готово к интеграции основным агентом. Этот черновик не изменяет web/data/articles.json.
|
||||
|
||||
| Слаг | Главный вопрос | Основной текст |
|
||||
| --- | --- | ---: |
|
||||
| editorial-2018-04-practice-bitrix-slugs | Как получить читаемый CODE и не принять совпадение за успех? | 6 049 знаков |
|
||||
| editorial-2018-04-mechanism-bitrix-slugs | Что должно совпасть, чтобы адрес стал ELEMENT_CODE? | 6 354 знака |
|
||||
| editorial-2018-04-field-bitrix-slugs | Как доказать конфликт CODE или широкий фильтр до изменения данных? | 7 111 знаков |
|
||||
|
||||
## Ревью 1. Факты и техника — пройдено
|
||||
|
||||
- Практическая статья опирается на [CUtil::translit](https://dev.1c-bitrix.ru/api_help/main/reference/cutil/translit.php), [CIBlockElement::GetList](https://dev.1c-bitrix.ru/api_help/iblock/classes/ciblockelement/getlist.php?print=Y) и [CIBlockElement::Add](https://dev.1c-bitrix.ru/api_help/iblock/classes/ciblockelement/add.php?print=Y). Сверены параметры транслитерации, фильтры выборки, поле CODE, возврат ID и LAST_ERROR.
|
||||
- Статья о механизме ЧПУ опирается на [CComponentEngine::ParseComponentPath](https://dev.1c-bitrix.ru/api_help/main/reference/ccomponentengine/parsecomponentpath.php), [CComponentEngine::MakePathFromTemplate](https://dev.1c-bitrix.ru/api_help/main/reference/ccomponentengine/makepathfromtemplate.php) и [CIBlockElement::GetList](https://dev.1c-bitrix.ru/api_help/iblock/classes/ciblockelement/getlist.php?print=Y). В тексте не приписывается Bitrix автоматическая уникальность URL: маршрут, переменные и выборка показаны как отдельные уровни.
|
||||
- Диагностическая статья опирается на [CIBlockElement::GetList](https://dev.1c-bitrix.ru/api_help/iblock/classes/ciblockelement/getlist.php?print=Y), [CComponentEngine::ParseComponentPath](https://dev.1c-bitrix.ru/api_help/main/reference/ccomponentengine/parsecomponentpath.php) и [CIBlockElement::Update](https://dev.1c-bitrix.ru/api_help/iblock/classes/ciblockelement/update.php?print=Y). Сортировка в примере названа средством повторяемого вывода, а не способом выбрать правильный товар.
|
||||
- Версионная граница названа явно: использованы старые API, документация которых указывает доступность методов до 2018 года. Конкретные шаблоны компонента, инфоблок и параллельный импорт оставлены проектными условиями.
|
||||
- Проверены отрицательные сценарии: пустой код, два совпадения, отсутствие совпадений, нераспознанный URL и ошибка обновления.
|
||||
|
||||
## Ревью 2. Редактура и голос 2018 года — пройдено
|
||||
|
||||
- В первом абзаце каждой статьи поставлены наблюдаемый симптом и один вопрос. Три текста не повторяют друг друга: первый о построении кода, второй о превращении пути в переменную, третий о диагностике неверной карточки.
|
||||
- Основной текст укладывается в требуемые 5 000–15 000 знаков. Объём набран контрактом данных, воспроизводимыми PHP-примерами, таблицами, контрпримерами и ограничениями, а не повтором вывода.
|
||||
- Речь намеренно короткая и прикладная: «проверяем», «сверяем», «сохраняем», «не меняем до доказательства». Нет лозунгов, обещаний универсального решения и поздних для автора 2018 года практик.
|
||||
- Тон оставлен близким ранним заметкам автора: спокойное «давайте разберём», конкретный код Bitrix и оговорка там, где правило зависит от каталога.
|
||||
- После вычитки удалены общие фразы о важности темы. Термины CODE, ЧПУ, ELEMENT_CODE и GetList раскрываются в контексте первого использования.
|
||||
|
||||
## Ревью 3. Визуал и выпуск — пройдено для черновика
|
||||
|
||||
- Добавлены и XML-проверены три самостоятельные SVG-схемы: bitrix-slug-build-2018.svg, bitrix-slug-route-2018.svg и bitrix-slug-conflict-2018.svg.
|
||||
- Все SVG прошли xmllint --noout. Схемы отрендерены в PNG и просмотрены вручную в масштабе 1600 px. Во время просмотра исправлены обрезанная подпись фильтра в первой схеме и пересечение нижней ветки с подписью в третьей.
|
||||
- В каждом черновике есть figure с alt и подписью, таблица внутри table-scroll, не менее одного блока кода и нумерованная последовательность действий.
|
||||
- node --check web/scripts/upgrade-2018-04.mjs завершился без ошибок. node web/scripts/upgrade-2018-04.mjs --check подтвердил объём, три источника, таблицу, фигуру и код для каждой ревизии.
|
||||
- node web/scripts/upgrade-2018-04.mjs --print-revisions выдаёт валидный JSON-массив ровно из трёх ревизий. В каждом тексте ровно один обязательный заголовок Проверяемые источники.
|
||||
- Окончательную проверку мобильной вёрстки и production-сборку выполняет основной агент после интеграции в архив.
|
||||
@@ -0,0 +1,62 @@
|
||||
# Черновое ревью — май 2018: legacy jQuery
|
||||
|
||||
Статус: принято в публикационный слой 31 июля 2026 после независимого audit. Партия намеренно не перезаписывает `web/data/articles.json`: `web/data/editorial-revisions.mjs` накладывает ревизии только по стабильным slug.
|
||||
|
||||
## Область партии
|
||||
|
||||
| Slug | Главный вопрос | Основной текст, знаков |
|
||||
| --- | --- | ---: |
|
||||
| editorial-2018-05-practice-legacy-jquery | Как повторно вызвать mount и оставить один обработчик? | 7 718 |
|
||||
| editorial-2018-05-mechanism-legacy-jquery | Почему прямой click пропадает после .html()? | 8 088 |
|
||||
| editorial-2018-05-field-legacy-jquery | Как держать один активный Ajax-запрос формы? | 8 729 |
|
||||
|
||||
Размеры посчитаны без списка источников и HTML-разметки. Каждый текст отвечает на один вопрос, начинает с наблюдаемого сбоя и заканчивается последовательностью действий с ограничениями.
|
||||
|
||||
## Исследование
|
||||
|
||||
Все ссылки — первичная официальная документация jQuery; материалы сверены 31 июля 2026 года.
|
||||
|
||||
| Статья | Источники |
|
||||
| --- | --- |
|
||||
| Повторный mount | [.on()](https://api.jquery.com/on/), [.off()](https://api.jquery.com/off/) |
|
||||
| Замена DOM | [.html()](https://api.jquery.com/html/), [.on()](https://api.jquery.com/on/), [.off()](https://api.jquery.com/off/), [.data()](https://api.jquery.com/data/) |
|
||||
| Ajax-форма | [jQuery.ajax()](https://api.jquery.com/jQuery.ajax/), [.serialize()](https://api.jquery.com/serialize/), [.prop()](https://api.jquery.com/prop/), [.data()](https://api.jquery.com/data/), [.removeData()](https://api.jquery.com/removeData/), [deferred.always()](https://api.jquery.com/deferred.always/) |
|
||||
|
||||
## Ревью 1 — факты и техника
|
||||
|
||||
**Пройдено.**
|
||||
|
||||
- Для mount проверены: пространства имён событий, снятие обработчиков по namespace, различие прямой и делегированной привязки, а также версия .on()/.off() — jQuery 1.7+.
|
||||
- Для .html() проверено основное утверждение: jQuery удаляет данные и события дочерних узлов до замены содержимого. Ограничения делегирования для SVG и не всплывающих событий названы явно. Риск вставки непроверенной HTML-строки не выдан за проблему конкретного API — это предупреждение документации.
|
||||
- Для Ajax-формы проверены: состав .serialize(), динамическое свойство disabled через .prop(), хранение и удаление маркера через .data()/.removeData(), роли done, fail и always у jqXHR. always используется только для освобождения UI и не анализирует разнородные аргументы resolve/reject.
|
||||
- Серверные последствия не выдуманы: клиентский замок ограничен текущим DOM-экземпляром; при timeout текст не обещает, что операция не была выполнена.
|
||||
|
||||
## Ревью 2 — редактура и голос
|
||||
|
||||
**Пройдено.**
|
||||
|
||||
- Речь короткая и техническая: симптом → причина → проверка → действие. Нет обещаний «универсального» решения и абстрактных вступлений о важности темы.
|
||||
- Голос соответствует 2018 году: код на jQuery, IIFE, var, $.ajax; без искусственного переноса поздних фреймворков или роли техлида в раннюю заметку.
|
||||
- У каждой статьи свой сценарий, таблица, воспроизводимый код и порядок внедрения. Три текста не повторяют один и тот же вывод под разными заголовками.
|
||||
- Убрано неподтверждённое обобщение о распространённости конкретной версии jQuery в 2018 году; примеры лишь задают поддерживаемую версию.
|
||||
|
||||
## Ревью 3 — визуал и выпуск
|
||||
|
||||
**Пройдено для черновой партии; после интеграции нужен штатный общий выпускной прогон.**
|
||||
|
||||
- Три SVG валидированы командой xmllint --noout и открыты в локальном рендере. После финальной правки нет обрезанных заголовков, стрелок или кодовых строк.
|
||||
- У каждого будущего contentHtml есть один figure с осмысленными alt и подписью, одна таблица в обёртке div.table-scroll и три блока кода.
|
||||
- В существующих стилях .table-scroll имеет горизонтальную прокрутку, а таблица — min-width: 620px; это сохраняет читаемость на узком экране без сжатия ячеек.
|
||||
- Команда node --check web/scripts/upgrade-2018-05.mjs прошла. Команда node web/scripts/upgrade-2018-05.mjs --print-revisions печатает валидный JSON ровно трёх ревизий и не записывает архив.
|
||||
|
||||
## Перед интеграцией
|
||||
|
||||
1. Основной агент импортирует JSON из параметра --print-revisions и сопоставляет только три перечисленных slug.
|
||||
2. Запускаются общий аудит партии и production-сборка.
|
||||
3. На собранных страницах повторяется проверка таблиц в узком viewport, потому что эта ветка по задаче не изменяет articles.json.
|
||||
|
||||
## Приёмка основного агента
|
||||
|
||||
- Повторный quality-gate прошли все три статьи: 7 718 / 8 088 / 8 729 знаков основного текста, по одной схеме, таблице и трём блокам кода.
|
||||
- Независимо проверены первые абзацы, источник jQuery API для делегирования и namespace событий, а также граница клиентского замка Ajax-формы. Валидное `typeof value === 'undefined'` внутри примера кода не считается артефактом генерации.
|
||||
- Модуль экспортирует ровно три revision без побочного вывода при import; production build после интеграции прошёл.
|
||||
@@ -0,0 +1,58 @@
|
||||
# [Период] — ручное редакционное ревью
|
||||
|
||||
Партия:
|
||||
|
||||
- `[slug 1]`
|
||||
- `[slug 2]`
|
||||
- `[slug 3]`
|
||||
|
||||
Дата проверки: YYYY-MM-DD. Редактор: [имя или роль].
|
||||
|
||||
## 1. Факты и техника
|
||||
|
||||
Для каждой статьи:
|
||||
|
||||
| Статья | Главный тезис | Первичные источники | Версия / ограничение | Пример проверен |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| `[slug]` | | | | да / нет |
|
||||
|
||||
- [ ] Нет непроверенных цифр, фальшивого опыта и универсальных обещаний.
|
||||
- [ ] Код, команда, SQL или конфигурация соответствуют описанному сценарию.
|
||||
- [ ] Известные ограничения стоят рядом с решением, а не спрятаны в финале.
|
||||
|
||||
Вердикт: пройти / вернуть в доработку. Причины:
|
||||
|
||||
## 2. Редактура, голос и объём
|
||||
|
||||
Для каждой статьи:
|
||||
|
||||
| Статья | Знаки основного текста | Симптом в начале | Период голоса | Новое умение автора | Шаблонные фразы удалены |
|
||||
| --- | ---: | --- | --- | --- | --- |
|
||||
| `[slug]` | | да / нет | | | да / нет |
|
||||
|
||||
- [ ] Основной текст — от 5 000 до 15 000 знаков без источников.
|
||||
- [ ] Речь следует схеме «симптом → причина → проверка → действие».
|
||||
- [ ] Каждый абзац добавляет технический факт, решение, ограничение или следующий шаг.
|
||||
- [ ] Нет анахронизмов относительно `editorial/voice/author-trajectory-2017-2027.md`.
|
||||
|
||||
Вердикт: пройти / вернуть в доработку. Причины:
|
||||
|
||||
## 3. Визуал и выпуск
|
||||
|
||||
Для каждой статьи:
|
||||
|
||||
| Статья | Visual asset и назначение | `alt` и подпись | Таблица | Мобильная проверка | Сборка |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| `[slug]` | | да / нет | да / нет | 375px: да / нет | да / нет |
|
||||
|
||||
- [ ] Схема, иллюстрация или график объясняет часть материала, а не заполняет место.
|
||||
- [ ] Таблица остаётся читаемой или прокручивается внутри контейнера на узком экране.
|
||||
- [ ] Запущены `node --check`, XML-проверка SVG (если есть), `npm run audit:articles -- <slugs>` и `npm run build`.
|
||||
|
||||
Вердикт: пройти / вернуть в доработку. Причины:
|
||||
|
||||
## Итог
|
||||
|
||||
Статус: готово к интеграции / вернуть автору.
|
||||
|
||||
Изменения после ревью:
|
||||
@@ -0,0 +1,279 @@
|
||||
# Траектория голоса автора: 2017–2027
|
||||
|
||||
Это редакторская карта для продолжения архива. Она описывает не идеального
|
||||
«технического автора вообще», а наблюдаемую эволюцию DarkRiDDeR: от
|
||||
практика, который делится найденным решением, к инженеру, способному объяснить
|
||||
границы системы и выбор команды.
|
||||
|
||||
Основание карты — 13 исходных публикаций 2017–2019 годов: рецепты по
|
||||
Bitrix/PHP и Windows, заметки о D, а также материалы о Webpack и jQuery.
|
||||
Интервью, переводы и пересказы конференционных докладов важны для тематического
|
||||
круга автора, но не являются чистым образцом его фразировки. Голос автора в них
|
||||
лучше искать в заголовке, подводке, выборе примера, пояснениях и практическом
|
||||
выводе.
|
||||
|
||||
## 1. Исходный язык 2017 года
|
||||
|
||||
Автор начинает с предмета, а не с рассуждения о его важности. Заголовок обычно
|
||||
называет стек и операцию: «Bitrix API. Функция для генерации кода элемента…»,
|
||||
«Ошибка PHP. SSL certificate error…», «Компиляция 64-x разрядных программ…».
|
||||
Первый абзац быстро даёт знакомую ситуацию: «Часто в Bitrix необходимо…»,
|
||||
«Недавно столкнулся с такой проблемой…», «При выполнении… может возникнуть
|
||||
ошибка».
|
||||
|
||||
Базовая интонация — доброжелательный коллега рядом с рабочим столом. Он не
|
||||
строит безличную лекцию, а ведёт читателя по найденному пути: «Для начала
|
||||
нужно…», «Давайте…», «Создадим…», «Открываем командную строку, пишем…».
|
||||
После инструкции автор обычно называет ожидаемый результат: «После чего ошибка
|
||||
должна быть решена», «Если всё прошло удачно…», «В итоге у нас получается…».
|
||||
Финал осторожный и человеческий: «Возможно, в вашем случае…», «Надеюсь, что
|
||||
помог», «Поздравляю».
|
||||
|
||||
| Наблюдаемый паттерн | Зачем он нужен | Редакторская форма |
|
||||
| --- | --- | --- |
|
||||
| Стек + конкретная операция в заголовке | Сразу ограничивает задачу | <code>Bitrix API. Проверка символьного кода перед сохранением</code> |
|
||||
| Симптом до рецепта | Читатель узнаёт свой случай | <code>Форма возвращает ID, но изображение не привязывается к товару.</code> |
|
||||
| Последовательность «для начала → действие → результат» | Делает текст выполнимым | Один шаг, команда или фрагмент кода, затем ожидаемый эффект |
|
||||
| Термин и расшифровка в скобках | Автор не предполагает лишнего опыта | <code>entry-файл (точка входа сборки)</code> при первом упоминании |
|
||||
| Осторожный вывод | Не выдаёт локальную находку за закон | <code>Этот путь подходит, если проблема находится именно в…</code> |
|
||||
|
||||
Синтаксис исходного автора не академический. В нём есть длинные объяснения,
|
||||
скобки с расшифровками, разговорные переходы и иногда шероховатости. Их не надо
|
||||
копировать: орфографическая ошибка, калька, устаревшее техническое утверждение
|
||||
или лишняя эмоциональность не являются частью голоса. Сохраняется другое:
|
||||
близость к реальному действию, прямой порядок шагов и понятный критерий
|
||||
готовности.
|
||||
|
||||
Постоянная формула автора на всём промежутке:
|
||||
|
||||
> симптом → граница проблемы → проверка → действие → ожидаемый результат → ограничение
|
||||
|
||||
В 2017 году граница чаще всего локальна: конкретный API-вызов, настройка
|
||||
Windows, браузер, файл конфигурации или форма Bitrix. Позже формула остаётся,
|
||||
но граница постепенно расширяется до модуля, сервиса, потока данных и решения
|
||||
команды.
|
||||
|
||||
## 2. Развитие по периодам
|
||||
|
||||
### 2017–2018: практик интеграций и среды разработки
|
||||
|
||||
**T-shape.** Вертикаль — PHP/Bitrix: инфоблоки, свойства, файлы, торговые
|
||||
предложения, ошибки интеграции. Ширина — D, Windows-инструменты, браузер,
|
||||
базовый JavaScript и первая фронтенд-сборка. Автор уверенно показывает
|
||||
выполнимый фрагмент, но ещё не обобщает его до архитектурного правила.
|
||||
|
||||
**Допустимый словарь.** <code>инфоблок</code>, <code>торговое предложение</code>,
|
||||
<code>символьный код</code>, <code>cURL</code>, <code>CA bundle</code>,
|
||||
<code>timeout</code>, <code>SDK</code>, <code>linker</code>, <code>entry</code>,
|
||||
<code>bundle</code>, <code>jQuery</code>, «глобальная переменная». Английский
|
||||
термин поясняется, если он не виден из кода. Слова «контракт», «граница
|
||||
ответственности» и «жизненный цикл» возможны, когда они привязаны к конкретным
|
||||
полям или вызовам, а не заменяют объяснение.
|
||||
|
||||
**Синтаксис и тон.** Короткий симптом, затем нумерованный маршрут или код.
|
||||
Допустимы «давайте», «проверим», «в моём случае», но без заигрывания с
|
||||
читателем. Сначала действие, затем обоснование. Одно предложение не должно
|
||||
одновременно объяснять API, историю платформы и решение.
|
||||
|
||||
**Виды доказательств.** Воспроизводимый фрагмент кода, текст ошибки, снимок
|
||||
экрана, команда, файл конфигурации, ручная проверка результата, ссылка на
|
||||
документацию API. Достаточно локального случая, если автор явно называет его
|
||||
границы.
|
||||
|
||||
**Чего автор ещё не знает.** Он не пишет от лица человека, который строил
|
||||
SLO, проводил разборы крупных инцидентов, внедрял распределённую трассировку,
|
||||
проектировал организационные процессы или владеет экономикой платформы. Нельзя
|
||||
ретроспективно добавлять ему зрелую практику threat modeling, Kubernetes,
|
||||
feature flags и продуктовые метрики без отдельного, правдоподобного мостика.
|
||||
|
||||
### 2019–2021: инженер на стыке фронтенда, доставки и данных
|
||||
|
||||
**T-shape.** PHP/интеграции остаются вертикалью, но к ним добавляются
|
||||
модульный JavaScript, Webpack, HTTP, контейнеризация, SQL и первые
|
||||
воспроизводимые сценарии доставки. Автор уже видит, что ошибка рождается на
|
||||
границе модулей, конфигураций и окружений.
|
||||
|
||||
**Допустимый словарь.** <code>ES-модуль</code>, <code>dependency graph</code>,
|
||||
<code>source map</code>, «кеш-заголовок», <code>Dockerfile</code>, «образ»,
|
||||
«миграция», «индекс», <code>EXPLAIN</code>, <code>pipeline</code>,
|
||||
<code>rollback</code>. Термины <code>CI/CD</code> и «наблюдаемость» допустимы,
|
||||
но каждый раз должны быть разложены на конкретный запуск, лог, метрику или
|
||||
проверку.
|
||||
|
||||
**Синтаксис и тон.** Появляется спокойное разделение условий: «если плагин
|
||||
читает <code>window.jQuery</code>…», «если контейнер стартует от
|
||||
непривилегированного пользователя…». Автор всё ещё может говорить от первого
|
||||
лица, но реже использует ободряющие финалы и чаще фиксирует предпосылку, версию
|
||||
и побочный эффект.
|
||||
|
||||
**Виды доказательств.** Конфигурация до/после, размер bundle, сетевой запрос,
|
||||
вывод сборки, SQL-план, контейнерный лог, тестовый запрос, документированный
|
||||
rollback. Метрика допустима, когда известны источник, окно измерения и
|
||||
сравниваемый вариант.
|
||||
|
||||
**Чего автор ещё не знает.** Нельзя изображать опыт руководителя большой
|
||||
платформы, владельца многооблачных расходов или человека с многолетней
|
||||
практикой incident command. Сложные распределённые схемы допустимы как
|
||||
изучаемый предмет, но не как безапелляционный личный опыт.
|
||||
|
||||
### 2022–2024: системный практик
|
||||
|
||||
**T-shape.** Центр тяжести смещается от отдельного рецепта к надёжности
|
||||
изменения: производительность, доступность, безопасность, тестирование,
|
||||
релизы, данные и согласование ролей. Глубина остаётся технической — автор не
|
||||
уходит в абстрактное управление.
|
||||
|
||||
**Допустимый словарь.** <code>p95</code>, «бюджет ошибок», <code>trace</code>,
|
||||
<code>span</code>, «корреляционный идентификатор», <code>rate limit</code>,
|
||||
<code>threat model</code>, <code>CSP</code>, <code>WCAG</code>, «контракт API»,
|
||||
«идемпотентность», «канареечный релиз», «откат». Эти слова нельзя ставить
|
||||
списком: рядом нужны единица измерения, граница ответственности или конкретный
|
||||
сценарий отказа.
|
||||
|
||||
**Синтаксис и тон.** Автор пишет короче и точнее. Вместо «система стала
|
||||
быстрее» — «p95 ответа снизился с 1,8 до 0,7 с на тестовом наборе из N
|
||||
запросов». Вместо «следует учесть безопасность» — условие атаки, защитный
|
||||
контроль и способ проверки. Появляются таблицы вариантов и отдельные абзацы
|
||||
про цену решения.
|
||||
|
||||
**Виды доказательств.** Трасса, график, нагрузочный сценарий, результат
|
||||
автотеста, матрица прав, модель угроз, чек-лист релиза, план отката. Личный
|
||||
опыт отделяется от данных из внешней документации.
|
||||
|
||||
**Чего автор ещё не знает.** Он ещё не обязан писать стратегию компании,
|
||||
правила закупок или универсальную организационную модель. Не стоит приписывать
|
||||
ему неизмеренный опыт внедрения AI-практик на масштабе всей организации.
|
||||
|
||||
### 2025–2027: наставник и техлид
|
||||
|
||||
**T-shape.** Автор связывает глубину разработки с последствиями для команды:
|
||||
границы сервисов, владение, стоимость сопровождения, надёжная доставка,
|
||||
наблюдаемость и безопасное использование новых инструментов. Он объясняет не
|
||||
только «как исправить», но и почему выбран именно этот компромисс.
|
||||
|
||||
**Допустимый словарь.** <code>ADR</code>, <code>owner</code>, <code>SLO</code>,
|
||||
«стоимость владения», <code>blast radius</code>, «схема миграции», «контроль
|
||||
деградации», «eval-набор», <code>human review</code>, «политика данных».
|
||||
Термины из AI, платформенной инженерии и безопасности допустимы только при
|
||||
технической привязке: входные данные, риск, метрика, контроль и владелец.
|
||||
|
||||
**Синтаксис и тон.** Тон спокойный, наставнический и лишён позы. Статья
|
||||
сравнивает два-три варианта, называет цену каждого и оставляет короткий путь
|
||||
внедрения. Первое лицо используется для наблюдения из практики, а не как
|
||||
замена доказательству. Закрытие — не вдохновляющий манифест, а решение,
|
||||
ограничение и следующий проверяемый шаг.
|
||||
|
||||
**Виды доказательств.** Матрица выбора, архитектурная схема, измерение до/после,
|
||||
последствия инцидента без чувствительных деталей, прогон тестов, план
|
||||
мониторинга и отката, ADR или иной зафиксированный контекст решения. Если
|
||||
данные нельзя раскрыть, автор честно описывает метод и не придумывает цифры.
|
||||
|
||||
**Чего автор всё ещё не знает.** Десять лет публикаций не дают права
|
||||
утверждать, что его путь универсален. Автор не делает прогнозов за всю отрасль,
|
||||
не приписывает команде непроверенные результаты и не заменяет технический
|
||||
анализ модными словами.
|
||||
|
||||
## 3. Как звучит прагматичная техническая речь
|
||||
|
||||
Плохая фраза обычно скрывает объект, условие или проверку. Хорошая называет их
|
||||
прямо.
|
||||
|
||||
| Период | Плохо | Хорошо |
|
||||
| --- | --- | --- |
|
||||
| 2017–2018 | «Нужно грамотно создавать торговые предложения, иначе будут проблемы.» | «<code>CIBlockElement::Add</code> вернул ID, но предложение ещё не связано с товаром. После сохранения проверяем свойство связи и выборку каталога.» |
|
||||
| 2019–2021 | «Webpack магически подключает jQuery во всём проекте.» | «Старый плагин читает <code>window.jQuery</code>. Сначала кладём импорт в <code>window</code>, затем подключаем плагин; одного <code>ProvidePlugin</code> для этого случая недостаточно.» |
|
||||
| 2022–2024 | «Наблюдаемость помогла оптимизировать сервис.» | «Трасса показала 1,1 с ожидания в запросе к партнёру. Ограничили timeout и добавили отдельную метрику ошибок этого вызова.» |
|
||||
| 2025–2027 | «Надо внедрить AI и Kubernetes по современным стандартам.» | «Для автосуммаризации используем только обезличенный вход. До релиза сравниваем ответы на фиксированном eval-наборе, а спорные случаи оставляем на human review.» |
|
||||
|
||||
Короткая техническая речь не означает телеграфный стиль. Контекст нужен, если
|
||||
без него нельзя повторить решение. Лишним считается предложение, которое не
|
||||
добавляет симптом, причину, проверку, действие, ограничение или результат.
|
||||
|
||||
## 4. Непрерывность эволюции
|
||||
|
||||
Во все годы сохраняются пять признаков автора:
|
||||
|
||||
1. Тема начинается с конкретной инженерной работы, а не с тренда.
|
||||
2. Термин привязан к коду, конфигурации или наблюдаемому эффекту.
|
||||
3. Читателю дают выполнимый следующий шаг.
|
||||
4. Ограничение называют рядом с решением, а не мелким шрифтом в конце.
|
||||
5. Заключение возвращает к исходному симптому и критерию проверки.
|
||||
|
||||
Меняется глубина этого же движения:
|
||||
|
||||
| Этап | Что расширяется | Как это проявляется в тексте |
|
||||
| --- | --- | --- |
|
||||
| 2017–2018 | Локальная операция | Код, команда, настройка, ручная проверка |
|
||||
| 2019–2021 | Граница модулей и окружений | Конфигурация, порядок загрузки, сборка, данные |
|
||||
| 2022–2024 | Поведение системы после изменения | Метрики, тесты, риски, релиз и откат |
|
||||
| 2025–2027 | Последствия решения для команды | Варианты, стоимость, владелец, способ повторить решение |
|
||||
|
||||
Новая компетенция должна появляться как ответ на предыдущую проблему. Например,
|
||||
после заметок о timeout естественна статья о границах ожидания между браузером,
|
||||
прокси и сервисом; после сборки фронтенда — материал о размере bundle или
|
||||
кешировании; после ручной диагностики — наблюдаемость и автоматическая
|
||||
проверка. Ненормален скачок от рецепта Bitrix сразу к «корпоративной AI-стратегии»
|
||||
без цепочки практических задач между ними.
|
||||
|
||||
## 5. Обязательные критерии редактора
|
||||
|
||||
Редактор считает текст эволюцией автора, а не внезапной статьёй автора 2027
|
||||
года, только если выполнены все условия ниже.
|
||||
|
||||
1. **Временная честность.** Словарь и уровень уверенности соответствуют году.
|
||||
В статье 2017 года нет нераскрытых <code>SLO</code>,
|
||||
<code>OpenTelemetry</code>, <code>Kubernetes</code>, <code>LLM eval</code>
|
||||
и других поздних рамок. В статье 2027 года они объяснены через технический
|
||||
сценарий, а не используются как декорация.
|
||||
2. **Преемственность темы.** Новая область вырастает из уже освоенной: CMS и
|
||||
PHP → фронтенд/сборка → доставка и данные → надёжность и архитектурные
|
||||
решения. Если мост не очевиден, его нужно назвать во вступлении.
|
||||
3. **Соразмерное доказательство.** Ранний локальный рецепт подтверждается
|
||||
кодом и ручной проверкой; поздний системный вывод — измерением, тестом,
|
||||
схемой, сравнением вариантов или документом решения.
|
||||
4. **Сохранённая оптика практики.** Даже поздний текст начинает с конкретного
|
||||
сбоя, ограничения или вопроса реализации. Статья, начинающаяся с
|
||||
«в современном мире» или с общего манифеста, не проходит.
|
||||
5. **Постепенное усложнение синтаксиса.** Ранний текст ведёт читателя шагами;
|
||||
поздний может сравнивать варианты, но не прячет действие за абстрактными
|
||||
существительными.
|
||||
6. **Ограниченная компетентность.** Автор называет неизвестное, зависимость от
|
||||
версии, нагрузки, прав, данных или команды. Уверенный тон не заменяет
|
||||
границы применимости.
|
||||
7. **Непридуманный опыт.** Число, инцидент, команда и результат либо имеют
|
||||
источник, либо описаны как учебный пример. Нельзя фабриковать
|
||||
«сэкономили 40%» или «внедрили во всей компании».
|
||||
8. **Практический артефакт.** Есть минимальный путь проверки: код, запрос,
|
||||
конфигурация, таблица симптомов, схема, тест или измерение. Совет без
|
||||
артефакта не соответствует исходной манере.
|
||||
9. **Проверяемый финал.** В конце есть ожидаемый эффект и следующий шаг, а не
|
||||
лозунг, рекламный призыв или универсальное обещание.
|
||||
|
||||
Статья не проходит редактуру, если содержит три или более признака
|
||||
«внезапного 2027 года»: непояснённый современный жаргон, абстрактный
|
||||
стратегический тон, метрики без метода, универсальные выводы, отсутствие
|
||||
выполнимого шага или компетенции, не связанные с предыдущими периодами.
|
||||
|
||||
## 6. Три прохода редактора голоса
|
||||
|
||||
Эта карта дополняет общий стандарт качества и не заменяет техническое,
|
||||
фактологическое и визуальное ревью.
|
||||
|
||||
1. **Временной проход.** Отметить год статьи, разрешённый словарь и одно новое
|
||||
умение. Проверить, что оно следует из предыдущей траектории.
|
||||
2. **Голосовой проход.** Найти симптом в начале, конкретный артефакт в середине
|
||||
и проверяемый финал. Убрать кальки, общие оценки и фразы, в которых
|
||||
существительные скрывают действие.
|
||||
3. **Прагматический проход.** Для каждого абзаца ответить: что читатель теперь
|
||||
может проверить или сделать? Если ответа нет, сократить, перенести или
|
||||
заменить абзац фактом.
|
||||
|
||||
Короткая карточка решения для редактора:
|
||||
|
||||
Год и период:
|
||||
Постоянные признаки голоса:
|
||||
Новое умение и мост к нему:
|
||||
Артефакт доказательства:
|
||||
Оговорка или граница:
|
||||
Анахронизмы, которые были удалены:
|
||||
Вердикт: соответствует / вернуть в доработку
|
||||
Reference in New Issue
Block a user