Structured bug fixing workflow with hypothesis tracking and documentation in bugfix/ folders. Use when fixing bugs that require investigation and iterative testing.
Сессии багфикса — в bugfix/. Каждая сессия — папка ДД.ММ.ГГ_<имя-сессии> (имя — латиница через дефис).
Файлы внутри (имя сессии дублируется для поиска в IDE):
dashboard_<имя>.md — сводная таблица багов и статусовreport_<имя>.md — отчёт: симптомы, причины, связиcheck_<имя>.md — гипотезы, попытки фиксов, инвариантыarchive_<имя>.md — (опционально) завершённые баги при >5 в checkЕсли при вызове передан текст (/bugfix факелы рисуются за стеной), использовать как описание бага — пропустить запрос на шаге 2.
Через AskUserQuestion предложить:
bugfix/*/ через Glob, показать существующие папкиНовый баг в активной сессии: НЕ создавать новую сессию — добавить раздел в report/check, строку в dashboard. В check вставлять ПЕРЕД ## Инварианты.
Приоритизация: если несколько багов без указания порядка — выбрать самостоятельно (блокирующие → связанные → простые), сообщить пользователю.
ОТВЕРГНУТА и причиной[Quick-fix] в заголовке AttemptConsole.WriteLine логи ДО фикса. Тег: [КраткоеИмя:HN]**План воспроизведения:**
1. `dotnet run` (логи уже добавлены)
2. <конкретные шаги в игре>
3. Скопируйте вывод консоли или напишите `готово`
Frame N: System1.Tick() → читает X → System2.Tick() → пишет X
Фикс вступает в силу: System2, виден в том же кадре
dotnet buildФИКС НУЖДАЕТСЯ В ПРОВЕРКЕ**Тест-план:**
1. <действие> → <ожидаемый результат>
**Проверка регрессий:** <что ещё проверить>
ПОФИКШЕН, показать dashboard## Инварианты check-файла: категория, правило, ссылка на баг, объяснениеПеренести все ПОФИКШЕН баги в archive-файл. Инварианты ВСЕГДА остаются в check-файле.
Контекст: ВСЕГДА держать полное содержимое всех файлов сессии. При потере контекста — перечитать.
Инварианты: перед любой гипотезой/фиксом проверить ## Инварианты в check-файле. Явно записать результат проверки.
Обновление заметок: любое изменение состояния бага отражать в файлах сразу (dashboard, report, check).
Без запроса не фиксить: фиксы только по "применяй"/"фикси". Перед фиксом кратко описать что будет сделано.
Dashboard: показывать в консоли при: подключении к сессии, завершении бага, завершении сессии.
Подсказка следующего шага: после каждого шага показать контекстный блок:
> **Следующий шаг:** что дальше
> **Что от вас нужно:** действие пользователя
> **Примеры промтов:** `пример 1` · `пример 2`
Связи между багами: при обнаружении связи записать в report: → причина / → следствие / → общая причина / → затрагивает. После фикса — напомнить проверить связанные.
Производительность: рабочий фикс > быстрый. Оценку стоимости записывать в Attempt.
# Dashboard: Название сессии
| # | Баг | Статус | Гипотез | Попыток | Связи |
|---|-----|--------|---------|---------|-------|
| 1 | Имя | ИССЛЕДОВАНИЕ / ПРИЧИНА НАЙДЕНА / ПОФИКШЕН | 2 (1 отвергнута) | 3 | → следствие: #3 |
**Итого:** X пофикшено / Y в работе / Z всего
**Изменённые файлы:** список файлов
# Bug Report: Название сессии
## Имя бага
**Статус: ИССЛЕДОВАНИЕ / ПРИЧИНА НАЙДЕНА / ПОФИКШЕН**
**Связан с:** Другой баг `→ тип_связи` (если есть)
### Симптомы
- Что наблюдает пользователь
### Причины
Выжимка из Summary гипотез в check-файле.
Нумерация гипотез сбрасывается для каждого бага. ## Инварианты — ВСЕГДА последний раздел.
# Bug Check: Название сессии
## Имя бага
### Hypothesis 1: Описание
**Что предполагаем:** Что менять. **Почему:** Обоснование.
**Проверка инвариантов:** Инвариант N: не нарушен / нарушает → ОТКЛОНЕНА
**Если не поможет:** Причина неудачи.
#### Attempt 1: Что пробовали
**Трассировка:** System1.Tick() → System2.Tick() ...
**Затронутые пути:** | Тип | Влияние | Риск |
**Затронутые системы:** Какие системы читают/пишут те же данные.
**Описание:** Что поменяли.
**Результат:** Что увидел пользователь.
**Статус:** ФИКС НУЖДАЕТСЯ В ПРОВЕРКЕ / ФИКС ПРИМЕНЕН / ЧАСТИЧНО ПРИМЕНЕН / ПРИМЕНЕН С ПОБОЧНЫМ ЭФФЕКТОМ / ФИКС ОТКАЧЕН
**Стоимость:** Оценка.
**Изменения:** Код: `File.cs` — метод: описание. Конфиг: параметр: описание.
#### Summary
Итог гипотезы.
### Hypothesis 2: Описание (ОТВЕРГНУТА)
**Причина отклонения:** Почему.
---
## Инварианты
### Категория: Подсистема
1. **Правило** (из бага "Имя"): Почему нарушение ломает.
Та же структура что check, но без ## Инварианты. Содержит полные разделы завершённых багов.