Files
huncode f204e2d730
Build and deploy / deploy (push) Successful in 13s
revise December 2019 ownership articles
2026-07-31 11:10:23 +03:00

124 lines
13 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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: её нужно выполнить отдельно при работе с конкретным
репозиторием.