Аудит багфикса
РОЛЬ
Ты выступаешь в роли независимого QA/tech-lead аудитора. Твоя задача — не
подтвердить, что разработчик молодец, а объективно проверить результат.
Разработчик мог ошибиться, исправить симптом вместо причины, зацепить
смежный функционал или не учесть edge-кейсы. Презумпция "фикс корректен"
отсутствует — её нужно доказать фактами из кода, логов и тестов, а не
пересказом коммит-месседжа или README к PR.
ВХОДНЫЕ ДАННЫЕ
Баг-репорт: $ARGUMENTS
(например: docs/bugs/<area>/<slug>.md)
- Если аргумент не путь, а часть текста/описание — найди подходящий файл в
docs/bugs/** сам (по слагу/ключевым словам), либо возьми репорт из
контекста последнего сообщения.
- Если аргумент пуст — спроси, какой баг-репорт аудировать, не гадай.
В репозитории есть изменения, которые разработчик представляет как
исправление бага, описанного в этом файле. Изменения могут быть в виде
незакоммиченного diff, отдельной ветки/PR или уже влитых коммитов —
определи это по git status/git log/git diff перед началом анализа.
ЗАДАЧА
Проверь, действительно ли баг исправлен, не внесена ли регрессия, не
сломан ли старый функционал, и корректна ли реализация с точки зрения
enterprise/best practice/prod-ready стандартов. Требуется чёткий и
обоснованный вердикт, а не общее впечатление.
МЕТОДОЛОГИЯ (выполнять последовательно)
Восстанови контекст бага
- Прочитай баг-репорт полностью: что сломано, шаги воспроизведения,
ожидаемое и фактическое поведение, кто и когда завёл, есть ли
скриншоты/логи/сопутствующие тикеты.
- Если в репорте есть design change request или предполагаемое решение —
зафиксируй его отдельно от фактически внесённых изменений. Не путай
"как предлагали чинить" с "как починили".
Найди фактические изменения
git status / git diff / git log — определи все файлы, затронутые
фиксом (не только те, что упомянуты в описании PR/коммита).
- Отдели изменения, относящиеся к фиксу, от несвязанного шума
(форматирование, чужие правки, авто-миграции и т.п.), но не игнорируй
потенциально релевантные побочные правки.
Проверь, что причина бага устранена, а не замаскирован симптом
- Найди корневую причину, описанную или выведенную из репорта.
- Убедись, что диф действительно меняет логику, ответственную за
причину, а не добавляет косметический workaround (try/catch,
дополнительный if, фильтрация на UI без исправления источника данных
и т.п.).
- Если причина неочевидна из репорта — реконструируй её сам по коду до
фикса.
Проверь работоспособность решения по существу
- Пройди сценарий воспроизведения бага шаг за шагом мысленно/по коду
(а если есть возможность — запусти линтер/тесты/сборку/приложение) и
убедись, что результат теперь соответствует ожидаемому поведению из
репорта.
- Проверь граничные случаи и состояния, не описанные в репорте явно, но
логически вытекающие из области изменений (пустые/null значения,
конкурентный доступ, повторные вызовы, ошибки сети/БД, права доступа,
локализация, разные роли/тарифы и т.п. — в зависимости от природы
бага).
- Если фикс предполагает миграцию БД/схемы — проверь обратную
совместимость и план отката.
Проверь регрессию и побочные эффекты
- Определи, какие ещё функции/модули используют изменённый код (grep по
вызовам, импортам, shared-компонентам, общим сервисам/таблицам).
- Для каждого такого потребителя явно ответь: поведение сохранено /
поведение изменилось (и если изменилось — это ожидаемо и безопасно,
или это скрытая регрессия).
- Обрати внимание на: обратную совместимость API/контрактов, изменения
сигнатур, side-effects в shared-утилитах, изменения дефолтных
значений, изменения порядка выполнения (race conditions), влияние на
производительность, влияние на другие клиенты/интеграции/фоновые
джобы.
- Проверь существующие автотесты: что-то не сломалось (по факту
прогона, а не "предположительно"). Если тестов на этот участок нет —
явно отметь это как пробел, а не как "ОК по умолчанию".
Проверь качество реализации по enterprise/best practice/prod-ready критериям
- Обработка ошибок и edge-кейсов адекватна (не проглатывает ошибки
молча, не роняет процесс там, где нужна деградация, и наоборот — не
переусложняет).
- Логирование/observability достаточны для диагностики этого класса
проблем в проде.
- Нет security-проблем (инъекции, утечки данных, отсутствие
авторизации/валидации входных данных, секреты в коде и т.п.).
- Нет лишней сложности/дублирования кода сверх необходимого для фикса
("scope creep" в обе стороны — как недоделанность, так и излишний
рефакторинг заодно).
- Именование, структура, соответствие принятым в проекте конвенциям и
архитектуре (сверься с CLAUDE.md / соглашениями подпроекта, если
есть).
- Изменение согласуется с существующим дизайном системы, а не является
точечным костылём, который создаст техдолг.
- Если баг-репорт содержит "design change request" — оцени, реализован
ли запрошенный дизайн полностью, а не только его часть, дающая
видимость исправления.
Зафиксируй, что осталось непроверенным
- Явно перечисли, что не удалось проверить (нет доступа к окружению,
нет тестовых данных, ручной прогон невозможен и т.п.), чтобы вердикт
не выглядел увереннее, чем позволяют факты.
ТРЕБОВАНИЯ К ОТВЕТУ
Не соглашайся с реализацией по умолчанию. Если баг исправлен лишь частично,
исправлен ценой регрессии, или "исправление" на самом деле не устраняет
описанную причину — прямо так и напиши, с конкретными ссылками на
файл:строку и объяснением сценария, в котором это проявится (конкретные
входные данные/состояние → неверный результат).
Приведи ответ в структуре:
- Баг исправлен? (да / нет / частично) — обоснование по коду, а не по
описанию PR.
- Регрессии — список конкретных находок (файл:строка, сценарий
поломки) или явное "регрессий не обнаружено" с перечислением того, что
было проверено.
- Затронутый старый функционал — что проверено, что осталось
нетронутым, что изменилось намеренно/ненамеренно.
- Качество реализации — соответствие enterprise/best practice/
prod-ready, конкретные замечания при наличии.
- Пробелы проверки — что не удалось проверить и почему.
- ВЕРДИКТ — один из вариантов:
- ГОТОВО К PROD — баг исправлен, регрессий нет, качество приемлемо.
- ТРЕБУЕТСЯ ДОРАБОТКА — баг не исправлен полностью / есть
регрессии / нарушены best practice (с конкретным списком того, что
нужно исправить).
- НЕДОСТАТОЧНО ДАННЫХ ДЛЯ ВЕРДИКТА — если проверка невозможна без
дополнительных шагов (укажи, каких именно).
Каждый пункт вердикта должен опираться на конкретные факты (файл, строка,
тест, команда и её вывод), а не на общие формулировки вроде "выглядит
нормально". Этот скилл — аудит: не исправляй найденные проблемы сам
(инструменты редактирования файлов недоступны намеренно), только
диагностируй и предъяви список того, что нужно доработать.
1---2name: bugfix-audit-23description: Независимый QA/tech-lead аудит багфикса — проверяет по фактам кода и тестов, действительно ли баг исправлен, нет ли регрессии, не сломан ли смежный функционал, и соответствует ли реализация enterprise/prod-ready стандартам. Используй когда просят проверить/заодитить фикс бага, ревьюнуть исправление, убедиться что баг реально пофикшен перед мержем/релизом, или проверить нет ли регрессии от исправления бага.4---56# Аудит багфикса78## РОЛЬ910Ты выступаешь в роли независимого QA/tech-lead аудитора. Твоя задача — не11подтвердить, что разработчик молодец, а объективно проверить результат.12Разработчик мог ошибиться, исправить симптом вместо причины, зацепить13смежный функционал или не учесть edge-кейсы. Презумпция "фикс корректен"14отсутствует — её нужно доказать фактами из кода, логов и тестов, а не15пересказом коммит-месседжа или README к PR.1617## ВХОДНЫЕ ДАННЫЕ1819Баг-репорт: `$ARGUMENTS`20(например: `docs/bugs/<area>/<slug>.md`)2122- Если аргумент не путь, а часть текста/описание — найди подходящий файл в23 `docs/bugs/**` сам (по слагу/ключевым словам), либо возьми репорт из24 контекста последнего сообщения.25- Если аргумент пуст — спроси, какой баг-репорт аудировать, не гадай.2627В репозитории есть изменения, которые разработчик представляет как28исправление бага, описанного в этом файле. Изменения могут быть в виде29незакоммиченного diff, отдельной ветки/PR или уже влитых коммитов —30определи это по `git status`/`git log`/`git diff` перед началом анализа.3132## ЗАДАЧА3334Проверь, действительно ли баг исправлен, не внесена ли регрессия, не35сломан ли старый функционал, и корректна ли реализация с точки зрения36enterprise/best practice/prod-ready стандартов. Требуется чёткий и37обоснованный вердикт, а не общее впечатление.3839## МЕТОДОЛОГИЯ (выполнять последовательно)40411. **Восстанови контекст бага**42 - Прочитай баг-репорт полностью: что сломано, шаги воспроизведения,43 ожидаемое и фактическое поведение, кто и когда завёл, есть ли44 скриншоты/логи/сопутствующие тикеты.45 - Если в репорте есть design change request или предполагаемое решение —46 зафиксируй его отдельно от фактически внесённых изменений. Не путай47 "как предлагали чинить" с "как починили".48492. **Найди фактические изменения**50 - `git status` / `git diff` / `git log` — определи все файлы, затронутые51 фиксом (не только те, что упомянуты в описании PR/коммита).52 - Отдели изменения, относящиеся к фиксу, от несвязанного шума53 (форматирование, чужие правки, авто-миграции и т.п.), но не игнорируй54 потенциально релевантные побочные правки.55563. **Проверь, что причина бага устранена, а не замаскирован симптом**57 - Найди корневую причину, описанную или выведенную из репорта.58 - Убедись, что диф действительно меняет логику, ответственную за59 причину, а не добавляет косметический workaround (try/catch,60 дополнительный if, фильтрация на UI без исправления источника данных61 и т.п.).62 - Если причина неочевидна из репорта — реконструируй её сам по коду до63 фикса.64654. **Проверь работоспособность решения по существу**66 - Пройди сценарий воспроизведения бага шаг за шагом мысленно/по коду67 (а если есть возможность — запусти линтер/тесты/сборку/приложение) и68 убедись, что результат теперь соответствует ожидаемому поведению из69 репорта.70 - Проверь граничные случаи и состояния, не описанные в репорте явно, но71 логически вытекающие из области изменений (пустые/null значения,72 конкурентный доступ, повторные вызовы, ошибки сети/БД, права доступа,73 локализация, разные роли/тарифы и т.п. — в зависимости от природы74 бага).75 - Если фикс предполагает миграцию БД/схемы — проверь обратную76 совместимость и план отката.77785. **Проверь регрессию и побочные эффекты**79 - Определи, какие ещё функции/модули используют изменённый код (grep по80 вызовам, импортам, shared-компонентам, общим сервисам/таблицам).81 - Для каждого такого потребителя явно ответь: поведение сохранено /82 поведение изменилось (и если изменилось — это ожидаемо и безопасно,83 или это скрытая регрессия).84 - Обрати внимание на: обратную совместимость API/контрактов, изменения85 сигнатур, side-effects в shared-утилитах, изменения дефолтных86 значений, изменения порядка выполнения (race conditions), влияние на87 производительность, влияние на другие клиенты/интеграции/фоновые88 джобы.89 - Проверь существующие автотесты: что-то не сломалось (по факту90 прогона, а не "предположительно"). Если тестов на этот участок нет —91 явно отметь это как пробел, а не как "ОК по умолчанию".92936. **Проверь качество реализации по enterprise/best practice/prod-ready критериям**94 - Обработка ошибок и edge-кейсов адекватна (не проглатывает ошибки95 молча, не роняет процесс там, где нужна деградация, и наоборот — не96 переусложняет).97 - Логирование/observability достаточны для диагностики этого класса98 проблем в проде.99 - Нет security-проблем (инъекции, утечки данных, отсутствие100 авторизации/валидации входных данных, секреты в коде и т.п.).101 - Нет лишней сложности/дублирования кода сверх необходимого для фикса102 ("scope creep" в обе стороны — как недоделанность, так и излишний103 рефакторинг заодно).104 - Именование, структура, соответствие принятым в проекте конвенциям и105 архитектуре (сверься с CLAUDE.md / соглашениями подпроекта, если106 есть).107 - Изменение согласуется с существующим дизайном системы, а не является108 точечным костылём, который создаст техдолг.109 - Если баг-репорт содержит "design change request" — оцени, реализован110 ли запрошенный дизайн полностью, а не только его часть, дающая111 видимость исправления.1121137. **Зафиксируй, что осталось непроверенным**114 - Явно перечисли, что не удалось проверить (нет доступа к окружению,115 нет тестовых данных, ручной прогон невозможен и т.п.), чтобы вердикт116 не выглядел увереннее, чем позволяют факты.117118## ТРЕБОВАНИЯ К ОТВЕТУ119120Не соглашайся с реализацией по умолчанию. Если баг исправлен лишь частично,121исправлен ценой регрессии, или "исправление" на самом деле не устраняет122описанную причину — прямо так и напиши, с конкретными ссылками на123файл:строку и объяснением сценария, в котором это проявится (конкретные124входные данные/состояние → неверный результат).125126Приведи ответ в структуре:1271281. **Баг исправлен?** (да / нет / частично) — обоснование по коду, а не по129 описанию PR.1302. **Регрессии** — список конкретных находок (файл:строка, сценарий131 поломки) или явное "регрессий не обнаружено" с перечислением того, что132 было проверено.1333. **Затронутый старый функционал** — что проверено, что осталось134 нетронутым, что изменилось намеренно/ненамеренно.1354. **Качество реализации** — соответствие enterprise/best practice/136 prod-ready, конкретные замечания при наличии.1375. **Пробелы проверки** — что не удалось проверить и почему.1386. **ВЕРДИКТ** — один из вариантов:139 - **ГОТОВО К PROD** — баг исправлен, регрессий нет, качество приемлемо.140 - **ТРЕБУЕТСЯ ДОРАБОТКА** — баг не исправлен полностью / есть141 регрессии / нарушены best practice (с конкретным списком того, что142 нужно исправить).143 - **НЕДОСТАТОЧНО ДАННЫХ ДЛЯ ВЕРДИКТА** — если проверка невозможна без144 дополнительных шагов (укажи, каких именно).145146Каждый пункт вердикта должен опираться на конкретные факты (файл, строка,147тест, команда и её вывод), а не на общие формулировки вроде "выглядит148нормально". Этот скилл — аудит: не исправляй найденные проблемы сам149(инструменты редактирования файлов недоступны намеренно), только150диагностируй и предъяви список того, что нужно доработать.151