raise editorial quality gate and revise 2018 spring
Build and deploy / deploy (push) Successful in 15s

This commit is contained in:
2026-07-31 09:20:37 +03:00
parent 44c99a2640
commit 90692f0f16
33 changed files with 4563 additions and 52 deletions
+65
View File
@@ -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` и все координаты элементов лежат внутри полотна.