This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# Производство редакционных партий
|
||||
|
||||
На 31 июля 2026 года строгий аудит проходит 67 из 358 созданных материалов. Остальные 291 не считаются «почти готовыми»: их нужно заменить, а не косметически удлинить.
|
||||
На 31 июля 2026 года строгий аудит проходит 70 из 358 созданных материалов. Остальные 288 не считаются «почти готовыми»: их нужно заменить, а не косметически удлинить.
|
||||
|
||||
## Одна партия
|
||||
|
||||
|
||||
@@ -0,0 +1,123 @@
|
||||
# P22 — декабрь 2019: ответственность за код
|
||||
|
||||
Статус: **принят в publication registry 31 июля 2026 года**. Три revision
|
||||
применяются по стабильным slug и сохраняют дату и автора базового архива:
|
||||
|
||||
- `editorial-2019-12-practice-code-ownership`;
|
||||
- `editorial-2019-12-mechanism-code-ownership`;
|
||||
- `editorial-2019-12-field-code-ownership`.
|
||||
|
||||
Модуль экспортирует ровно три revision без полей `date` и `author`. При
|
||||
прямом запуске с `--print-revisions` stdout содержит только JSON, совпадающий
|
||||
с import-safe export. Все псевдонимы `@example`, issue `SIM-2019-12-17` и
|
||||
события полевого разбора — учебная симуляция; они не описывают частный
|
||||
репозиторий, команду, пользователей или реальный инцидент.
|
||||
|
||||
## Проход 1. Факты и техника — пройдено
|
||||
|
||||
| Утверждение или решение | Официальный источник | Проверенная граница |
|
||||
| --- | --- | --- |
|
||||
| `git blame` показывает revision и автора, последними изменивших каждую строку | [Git: git-blame](https://git-scm.com/docs/git-blame) | Историческая атрибуция не выдана за назначение текущего владельца решения; в статьях сначала исследуется context, затем роль фиксируется отдельно |
|
||||
| `git log` нужен для истории узких путей и связанных commits | [Git: git-log](https://git-scm.com/docs/git-log) | История файла не названа полной картой внешних зависимостей; в поле зрения остаются контракт и соседние modules |
|
||||
| `CODEOWNERS` определяет людей или teams для путей, а review request берётся по правилам base branch pull request | [GitHub Docs: About code owners](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners) | Механизм назван возможностью GitHub, а не частью стандарта Git; feature branch не объявлена источником route для собственного merge |
|
||||
| В GitHub последнее совпадающее CODEOWNERS-правило имеет приоритет, а `!` и диапазоны `[]` не работают как в `.gitignore` | [GitHub Docs: About code owners](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners) | Пример использует общий и более узкий path без ложного «исключения»; отдельной строкой закрыт сам `.github/CODEOWNERS` |
|
||||
| Pull request review имеет решения Comment, Approve и Request changes; защита ветки может требовать approval | [GitHub Docs: Pull request reviews](https://docs.github.com/en/pull-requests/reference/pull-request-reviews) | Автоматический request reviewer не назван выполненным review, а approval не подменяет проверку результата после merge |
|
||||
|
||||
### Честная граница исследования
|
||||
|
||||
Пакет использует публичную официальную документацию Git и GitHub. В нём нет
|
||||
выводов о реальной конфигурации GitHub, branch protection, составе teams или
|
||||
истории какого-либо закрытого репозитория. `CODEOWNERS` в примерах —
|
||||
псевдоконфигурация с `@example`; она показывает порядок и границы механизма,
|
||||
но не была отправлена в хостинг для проверки actual reviewer request.
|
||||
|
||||
Технический принцип в трёх статьях сознательно уже: история Git — источник
|
||||
факта, CODEOWNERS — маршрут запроса review, итог review — решение по diff,
|
||||
follow-up — самостоятельное действие после merge. Инструменты не объединены в
|
||||
фиктивного «единственного владельца».
|
||||
|
||||
Вердикт прохода: **пройден**. Нормативные свойства привязаны к первичным
|
||||
документам, а зависящие от конкретного хостинга и команды результаты помечены
|
||||
как будущая проверка интеграционного этапа.
|
||||
|
||||
## Проход 2. Редактура и голос M2 / 2019 — пройдено
|
||||
|
||||
| Ревизия | Симптом и цена в начале | Главный технический вопрос | Артефакт и ограничение |
|
||||
| --- | --- | --- | --- |
|
||||
| Практика | Дефект стоит на месте, потому что автор строки, владелец решения и reviewer смешаны; цена — повторный bug и задержка изменения | Как разложить ownership одного change на решение, путь кода, review и follow-up | Таблица ролей, пример CODEOWNERS, маршрут из шести шагов; платформа не заявлена настроенной |
|
||||
| Механизм | `git blame` уже назвал автора, но смысл статуса всё ещё не решён; цена — ложный выбор ответственного | Где заканчивается история Git, что именно делает CODEOWNERS и что остаётся после review | Сопоставление следов, команды Git и схема потока; нет утверждения о правах или policy конкретного репозитория |
|
||||
| Полевой разбор | Неизвестный gateway status превращён в success, а дефект пересекает два module; цена — неверное действие на экране | Как провести issue/review timeline без легенды о реальном инциденте | Анонимизированная fixture `SIM-2019-12-17`, таблица фактов и route; симуляция не выдана за production-проверку |
|
||||
|
||||
- Основной текст: практика — **7 118** знаков, механизм — **8 118**,
|
||||
полевой разбор — **8 616**. Все значения в коридоре 5 000–15 000 и
|
||||
рассчитаны gate без раздела источников.
|
||||
- Во всех статьях есть ранние «симптом», «ошибка» или конкретный сбой с ценой;
|
||||
далее выдержана цепочка: симптом → причина смешения ролей → проверка →
|
||||
действие → граница знания.
|
||||
- Голос соответствует M2 / 2019: автор говорит о Git, путях, тесте,
|
||||
контракте, pull request и review предметно. Он не приписывает себе SLO,
|
||||
организационные метрики, приватные процессы или поздний управленческий
|
||||
манифест.
|
||||
- У каждой revision не менее пяти смысловых разделов, доступная таблица с
|
||||
`caption` и `thead`, figure с развёрнутым alt и подписью, кодовый пример,
|
||||
упорядоченный маршрут и как минимум четыре официальных ссылки.
|
||||
- Из текста удалены шаблонные обещания и подмена факта словом «владелец»;
|
||||
`git blame`, CODEOWNERS, review и follow-up описаны разными глаголами.
|
||||
|
||||
Вердикт прохода: **пройден**. Тексты стали практичными без перехода к
|
||||
поздней менеджерской риторике: каждый раздел ведёт к проверяемому действию.
|
||||
|
||||
## Проход 3. Визуал и выпуск — пройдено в пределах автономного пакета
|
||||
|
||||
- `code-ownership-three-surfaces-2019.svg` сначала был слишком широк для
|
||||
мобильного чтения. После отдельного визуального просмотра он переделан в
|
||||
узкую вертикальную схему: symptom, решение, путь кода, review, follow-up и
|
||||
Git history читаются последовательно.
|
||||
- `code-ownership-resolution-2019.svg` показывает не «органиграмму», а
|
||||
маршрут артефактов: наблюдаемый сбой → исторический факт → route review →
|
||||
решение reviewer → проверка после merge.
|
||||
- `code-ownership-simulated-timeline-2019.svg` крупно помечает simulation и
|
||||
не содержит намёков на настоящую команду. Шкала отделяет поиск context от
|
||||
назначения ролей.
|
||||
- Все три SVG содержат `title`, `desc`, `role="img"` и `aria-labelledby`.
|
||||
В них нет JavaScript, `foreignObject`, внешних URL или растровых data URI.
|
||||
У figure в статьях есть отдельные alt-тексты и captions.
|
||||
- SVG были отрендерены локально через Sharp в исходном размере и при ширине
|
||||
**375 px**. После перестройки узкой композиции нет обрезания текста или
|
||||
горизонтального выхода за границы. Это проверка самих диаграмм, не
|
||||
браузерный e2e-прогон опубликованной страницы.
|
||||
- Основной редактор независимо просмотрел финальные три растеризованных
|
||||
схемы на 375 px; вывод подтверждён: текст не обрезан, последовательность
|
||||
артефактов читается. Статьи не выдают это за проверку интерактивного
|
||||
поведения хостинга или реального review-flow.
|
||||
- После подключения registry strict audit и production build пройдены;
|
||||
ручной browser-review остаётся отдельной проверкой и не заявлен как
|
||||
выполненный.
|
||||
|
||||
### Фактические проверки
|
||||
|
||||
```text
|
||||
node --check web/scripts/upgrade-2019-12.mjs
|
||||
cd web && npm run audit:draft -- scripts/upgrade-2019-12.mjs
|
||||
xmllint --noout \
|
||||
web/public/assets/editorial/2019/code-ownership-three-surfaces-2019.svg \
|
||||
web/public/assets/editorial/2019/code-ownership-resolution-2019.svg \
|
||||
web/public/assets/editorial/2019/code-ownership-simulated-timeline-2019.svg
|
||||
```
|
||||
|
||||
| Проверка | Фактический результат |
|
||||
| --- | --- |
|
||||
| `node --check` | PASS, код 0 |
|
||||
| `--print-revisions` и import-safe export | PASS внутри `audit:draft`: stdout JSON-only и ровно три revision |
|
||||
| `npm run audit:draft -- scripts/upgrade-2019-12.mjs` | PASS: 7 118 / 8 118 / 8 616 знаков, структура и локальные assets найдены |
|
||||
| `xmllint --noout` для трёх SVG | PASS, код 0 |
|
||||
| Локальный visual review | PASS: исходный размер и 375 px, после перестройки нет clipping или horizontal overflow внутри SVG |
|
||||
| Strict audit после подключения registry | PASS: 7 118 / 8 118 / 8 616 знаков; по одному figure и table, 1 / 2 / 1 code example |
|
||||
| `npm run build` | PASS, code 0, 374 статические страницы |
|
||||
| Scope/self-review | PASS: в revision нет `date`/`author`, а `articles.json` не перезаписан |
|
||||
|
||||
Выпусковой вердикт: **тройное ревью пройдено, пакет принят к публикации**.
|
||||
Registry заменяет только редакционные поля по stable slug. Production build и
|
||||
visual preflight не подменяют реальную проверку поведения на выбранной
|
||||
платформе review: её нужно выполнить отдельно при работе с конкретным
|
||||
репозиторием.
|
||||
Reference in New Issue
Block a user