Files
h-school/.claude/skills/bug-work/SKILL.md
T

98 lines
6.0 KiB
Markdown
Raw 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.
---
name: bug-work
description: >-
Принимает баг в уже сделанном, при необходимости обсуждает путь и чинит.
Файлы в docs/bugs/, индекс отдельно от фаз. Используй при «баг», «почини»,
«регрессия», «сломалось», «fix the bug», «возьми баг N». Не для новой фичи
(/side-work), фазы среза (/phase-work), волны агентов (/phase-orch) и ревью
(/phase-review).
---
# Баги
Это не фаза и не срез. Сломалось то, что уже должно работать: принять, при
нужде согласовать путь, починить. Документы — `docs/bugs/`, индекс —
`docs/bugs/README.md`. В `docs/phases/` и «Вне очереди» не класть.
Один запуск — **один баг**. Код до записи в индекс не писать.
## Когда это, а когда нет
Прочитай `docs/bugs/README.md`, `docs/phases/README.md` и инварианты в
`AGENTS.md`.
- Уже стоит ⬜/🔄 в индексе багов — бери его, не заводи второй.
- Это ещё не сделанная фаза в `docs/phases/` — скажи и отдай `/phase-work`.
- Новая фича, склейка систем, DX — `/side-work`.
- Ревью среза — `/phase-review`.
- Волну фаз — `/phase-orch`.
Номер передали (`/bug-work 3`) — берёшь его. Нет — первая ⬜ в индексе, у
которой нет ветки `bug/<N>-*`. Нет свободных и пользователь только что описал
симптом — заводи новый.
## 1. Принять
Записать симптом так, чтобы следующий агент его узнал без этого чата: что
видит игрок / падающий тест / лог; чего ждали; как воспроизвести, если путь
не в одну строку.
Пользователь предложил фикс — проверь, что это причина, а не симптом. Лучший
путь рядом — назови его, не чини молча худший.
## 2. Обсудить, когда нужно
Путь один и не трогает протокол, сейв и инвариант — чинить, не спрашивать.
Два+ разумных пути **или** правка протокола / сейва / инварианта — два–три
варианта и **рекомендация**. Стоп, пока не сказали «ок», «делай», «как
рекомендуешь». Молчание — нет. Соседнее «заодно» в отчёт, не в объём.
## 3. Документ
`docs/bugs/<NN>-<slug>.md` и строка в индексе. Номер: максимум по папке и
индексу, плюс один, затем `git branch --list "bug/<N>-*"`. Занято — следующий.
Гонку ловят ветки, не индекс: у нового бага на `main` строки ещё нет.
Каркас короче фазы, не копия:
- **Симптом** — что сломано и как увидеть
- **Причина** — когда известна; иначе «ищу» и дописать тем же коммитом, что код
- **Путь** — выбранный фикс; отвергнутые — одной строкой, если обсуждали
- **Задачи** — чеклист
- **Тест, без которого не закрыт** — обычно один, по Testing policy в `AGENTS.md`
- **Стоп** — чего не трогать
Дизайн-док не писать. «Было / Стало» не нужно: это регрессия, не решение.
Индекс — новая строка, статус 🔄, если сразу чинишь; ⬜, если просили только
записать. Просил только документ — здесь конец.
## 4. Работа
Заявка `git branch bug/<N>-<slug>` **до** кода. Новые файлы и 🔄 живут на этой
ветке.
Дальше — как [phase-work](../phase-work/SKILL.md), с отличиями:
- префикс ветки `bug/`, не `phase/`; индекс — `docs/bugs/README.md`;
- worktree обязателен, только если основное дерево грязное или рядом идёт
другая ветка. Чистое `main` — можно в этом дереве;
- шаблон фазы не заполнять. Тест из файла бага — да, «Критерий готовности»
фазы — нет;
- тесты — только проект из Testing policy и `--filter` на новый тест. Полный
`dotnet test`, клиентский Vitest без правок клиента и повтор после слияния
статус-строки **не** наследовать из `/phase-work`;
- ✅ в индексе — последним коммитом ветки, в нём только строка статуса.
Слияние и замок `merge/lock` — как у `/phase-work`. Замок общий с фазами и ревью:
чужой не снимать и не воровать. Основное дерево не на `main` — не `checkout`. Не пушь.
Не смог закрыть тест — оставь ⬜ и напиши почему. Полработы с честной пометкой
лучше, чем ✅ с дырой.
## Отчёт
Симптом одной строкой; путь, если выбирали; баг и ветка; какой тест добавлен;
что прогнал; что осталось ⬜; слита ли ветка в `main`.