diff --git a/.claude/skills/bug-work/SKILL.md b/.claude/skills/bug-work/SKILL.md new file mode 100644 index 0000000..0732c2e --- /dev/null +++ b/.claude/skills/bug-work/SKILL.md @@ -0,0 +1,91 @@ +--- +name: bug-work +description: >- + Принимает баг в уже сделанном, при необходимости обсуждает путь и чинит. + Файлы в docs/bugs/, индекс отдельно от фаз. Используй при «баг», «почини», + «регрессия», «сломалось», «fix the bug», «возьми баг N». Не для новой фичи + (/side-work), фазы среза (/phase-work) и ревью (/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`. + +Номер передали (`/bug-work 3`) — берёшь его. Нет — первая ⬜ в индексе, у +которой нет ветки `bug/-*`. Нет свободных и пользователь только что описал +симптом — заводи новый. + +## 1. Принять + +Записать симптом так, чтобы следующий агент его узнал без этого чата: что +видит игрок / падающий тест / лог; чего ждали; как воспроизвести, если путь +не в одну строку. + +Пользователь предложил фикс — проверь, что это причина, а не симптом. Лучший +путь рядом — назови его, не чини молча худший. + +## 2. Обсудить, когда нужно + +Путь один и не трогает протокол, сейв и инвариант — чинить, не спрашивать. + +Два+ разумных пути **или** правка протокола / сейва / инварианта — два–три +варианта и **рекомендация**. Стоп, пока не сказали «ок», «делай», «как +рекомендуешь». Молчание — нет. Соседнее «заодно» в отчёт, не в объём. + +## 3. Документ + +`docs/bugs/-.md` и строка в индексе. Номер: максимум по папке и +индексу, плюс один, затем `git branch --list "bug/-*"`. Занято — следующий. +Гонку ловят ветки, не индекс: у нового бага на `main` строки ещё нет. + +Каркас короче фазы, не копия: + +- **Симптом** — что сломано и как увидеть +- **Причина** — когда известна; иначе «ищу» и дописать тем же коммитом, что код +- **Путь** — выбранный фикс; отвергнутые — одной строкой, если обсуждали +- **Задачи** — чеклист +- **Тест, без которого не закрыт** — обычно один, по Testing policy в `AGENTS.md` +- **Стоп** — чего не трогать + +Дизайн-док не писать. «Было / Стало» не нужно: это регрессия, не решение. + +Индекс — новая строка, статус 🔄, если сразу чинишь; ⬜, если просили только +записать. Просил только документ — здесь конец. + +## 4. Работа + +Заявка `git branch bug/-` **до** кода. Новые файлы и 🔄 живут на этой +ветке. + +Дальше — как [phase-work](../phase-work/SKILL.md), с отличиями: + +- префикс ветки `bug/`, не `phase/`; индекс — `docs/bugs/README.md`; +- worktree обязателен, только если основное дерево грязное или рядом идёт + другая ветка. Чистое `main` — можно в этом дереве; +- шаблон фазы не заполнять. Тест из файла бага — да, «Критерий готовности» + фазы — нет; +- ✅ в индексе — последним коммитом ветки, в нём только строка статуса. + +Слияние и замок `merge/lock` — как у `/phase-work`. Не пушь. + +Не смог закрыть тест — оставь ⬜ и напиши почему. Полработы с честной пометкой +лучше, чем ✅ с дырой. + +## Отчёт + +Симптом одной строкой; путь, если выбирали; баг и ветка; какой тест добавлен; +что прогнал; что осталось ⬜; слита ли ветка в `main`. diff --git a/.claude/skills/phase-work/SKILL.md b/.claude/skills/phase-work/SKILL.md index 9039ddc..b029ad1 100644 --- a/.claude/skills/phase-work/SKILL.md +++ b/.claude/skills/phase-work/SKILL.md @@ -1,6 +1,6 @@ --- name: phase-work -description: Берёт ровно одну фазу из среза в docs/phases/ и доводит её до конца — в своём git worktree и на своей ветке, чтобы над одним срезом можно было запустить несколько агентов параллельно. Используй, когда просят «сделай фазу 25», «возьми фазу», «реализуй фазу», «начни срез», «раздели срез между агентами», «work on the phase». Не для ревью уже написанного — там /phase-review, и не для правки одного файла по просьбе. +description: Берёт ровно одну фазу из среза в docs/phases/ и доводит её до конца — в своём git worktree и на своей ветке, чтобы над одним срезом можно было запустить несколько агентов параллельно. Используй, когда просят «сделай фазу 25», «возьми фазу», «реализуй фазу», «начни срез», «раздели срез между агентами», «work on the phase». Не для ревью уже написанного — там /phase-review, не для бага — /bug-work, и не для правки одного файла по просьбе. --- # Работа над фазой diff --git a/.claude/skills/side-work/SKILL.md b/.claude/skills/side-work/SKILL.md index 76a1026..0c2a629 100644 --- a/.claude/skills/side-work/SKILL.md +++ b/.claude/skills/side-work/SKILL.md @@ -3,8 +3,8 @@ name: side-work description: >- Обсуждает задачу вне запланированных срезов, пишет под неё фазы и делает на отдельной ветке. Используй при «сделай отдельно», «вне среза», «отдельная - задача», «не из фаз», «side-work», «обсуди и сделай». Не для «сделай фазу N» - (/phase-work) и не для ревью (/phase-review). + задача», «не из фаз», «side-work», «обсуди и сделай». Не для бага + (/bug-work), «сделай фазу N» (/phase-work) и ревью (/phase-review). --- # Отдельная задача вне среза @@ -18,8 +18,9 @@ description: >- ## 1. Обсуждение -Прочитай `docs/phases/README.md`, инварианты в `AGENTS.md` и затронутые -дизайн-доки. Это уже чья-то фаза в индексе — скажи и отдай `/phase-work`. +Прочитай `docs/phases/README.md`, `docs/bugs/README.md`, инварианты в +`AGENTS.md` и затронутые дизайн-доки. Это уже чья-то фаза в индексе — скажи +и отдай `/phase-work`. Регрессия уже сделанного — `/bug-work`. Два–пять вопросов, два–три варианта, **рекомендация обязательна**. Спросить только форму: что увидит игрок; протокол / HTTP / сейв; какой инвариант; одна @@ -30,7 +31,9 @@ description: >- ## 2. Куда класть -**Мелкое** (баг, дырка, одна кнопка) — фаза в секции **«Вне очереди»** в конце +**Баг / регрессия** — не этот скилл, [bug-work](../bug-work/SKILL.md). + +**Мелкое** (дырка, одна кнопка, DX) — фаза в секции **«Вне очереди»** в конце индекса. Это срез без номера, чтобы не спорить со срезом 10. Дизайн — `##` в `docs/design/off-queue.md`; файла нет — заведи с заголовком, зачем он. diff --git a/AGENTS.md b/AGENTS.md index 43dc77e..b372645 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -25,6 +25,7 @@ way; this file is *how to work in them*. | clock speed buttons and high-speed stride | `src/HSchool.Simulation/ClockSpeed.cs` **and** [`docs/design/session.md`](docs/design/session.md) — phase 40 | | talks, opinions, fights, romance pack | [`docs/design/social.md`](docs/design/social.md) — slice 9, phases 41–47 | | lesson consequences (teacher present, skill, warmth, textbook, weather commute) | [`docs/design/off-queue.md`](docs/design/off-queue.md) — phases 48, 50–53 | +| a bug in already-shipped behaviour | `.claude/skills/bug-work` — document in `docs/bugs/`, discuss only if the fix has a fork, then patch | | a task that is not in any slice | `.claude/skills/side-work` — discuss, document in «Вне очереди» or a new named slice, then implement | ## Commands diff --git a/docs/bugs/README.md b/docs/bugs/README.md new file mode 100644 index 0000000..f51d2b3 --- /dev/null +++ b/docs/bugs/README.md @@ -0,0 +1,13 @@ +# Баги + +Индекс регрессий в уже сделанном. Статус: ⬜ не начат, 🔄 в работе, ✅ готов. + +Это не фазы: номера не спорят со срезами, в `docs/phases/` не дублировать. +Новая фича и склейка систем — [«Вне очереди»](../phases/README.md#вне-очереди) +или отдельный срез, скилл `/side-work`. Как работать с багом — +[`.claude/skills/bug-work`](../../.claude/skills/bug-work/SKILL.md). + +| Баг | Статус | Симптом | +| --- | --- | --- | + +Пока пусто. Первую строку пишет `/bug-work`. diff --git a/docs/phases/README.md b/docs/phases/README.md index 63d92eb..6a8d5b3 100644 --- a/docs/phases/README.md +++ b/docs/phases/README.md @@ -2,6 +2,8 @@ Индекс. Статус: ⬜ не начата, 🔄 в работе, ✅ готова. +Регрессии уже сделанного — [`../bugs/README.md`](../bugs/README.md), не сюда. + ## Срез 1. Оболочка и карта Дизайн закрыт: [`../design/near-term.md`](../design/near-term.md), @@ -229,7 +231,7 @@ Склейка уже живых систем и мелкий DX, не новый кусок игры. Номера не спорят со срезом 10. После каждой игровой фазы школа целая. 50–52 стоят на 48; 53 — на 18 и 32, можно параллельно -с 48. 49 от них не зависит. +с 48. 49 от них не зависит. Баг в уже сделанном — [`../bugs/README.md`](../bugs/README.md). | Фаза | Статус | Зачем | | --- | --- | --- |