Загрузка данных


01-agent-workflow.mdc
---
description: Процесс работы агента: уточнения, планирование, выполнение
alwaysApply: true
---
# ПРОЦЕСС РАБОТЫ АГЕНТА

## Этап 0: Анализ запроса (ОБЯЗАТЕЛЕН)

Прежде чем писать ЛЮБОЙ код, проведи анализ:

### Если запрос неоднозначный или общий:
Задай уточняющие вопросы. Не стесняйся быть дотошным. Лучше задать 10 вопросов сейчас, чем переписывать код 3 раза потом.

**Обязательные уточнения (если не указаны):**

1. **Цель:** Что именно должен делать этот код? Какую бизнес-задачу решает?
2. **Границы:** Что код НЕ должен делать? Какие сценарии вне scope?
3. **Входные данные:** Какие данные приходят? В каком формате? Есть ли пример?
4. **Выходные данные:** Что должен вернуть/сделать код? Какой формат ответа?
5. **Интеграция:** Как этот код будет использоваться? Кто его вызывает? Куда встраивается?
6. **Ограничения:** Есть ли ограничения по производительности, памяти, времени?
7. **Обработка ошибок:** Что делать при невалидных данных? Как обрабатывать исключения?
8. **Зависимости:** Можно ли использовать сторонние библиотеки? Какие уже есть в проекте?
9. **Совместимость:** С какими версиями языка/фреймворка должен работать код?
10. **Тестирование:** Нужны ли тесты? (По умолчанию — НЕТ, только если явно попросили)

### Если запрос уже детальный:
Проверь, всё ли учтено. Если видишь потенциальные проблемы — укажи на них ДО написания кода.

## Этап 1: План реализации (ОБЯЗАТЕЛЕН)

После уточнений составь план:
ПЛАН:

Изменить файл X — причина, что именно меняем

Создать файл Y — назначение, ключевые функции

Обновить файл Z — интеграция с существующим кодом
...
Потенциальные риски:

Риск 1 — как митигируем

Риск 2 — как митигируем


**Покажи план пользователю и дождись подтверждения** (если пользователь не сказал "делай сразу без плана").

## Этап 2: Реализация

- Следуй плану
- Если в процессе находишь проблему с планом — остановись и сообщи
- Не делай "заодно" дополнительных изменений, которых нет в плане. Исключение: необоснованное дублирование кода

## Этап 3: Саморевью (ОБЯЗАТЕЛЕН)

После написания кода проведи ревью:

### Проверь функциональность:
- [ ] Код делает ровно то, что просили (не больше, не меньше)
- [ ] Все ветвления логики обработаны
- [ ] Нет очевидных багов (off-by-one, null reference, неправильные условия)
- [ ] Обработка ошибок присутствует там, где нужна

### Проверь интеграцию:
- [ ] Импорты корректны и существуют
- [ ] Сигнатуры функций совместимы с вызывающим кодом
- [ ] Нет конфликтов имён
- [ ] Типы данных совместимы

### Проверь чистоту:
- [ ] Нет мёртвого кода
- [ ] Нет закомментированных блоков
- [ ] Нет дублирования (если есть — вынеси в функцию)
- [ ] Нет лишних зависимостей

### Если находишь проблему:
НЕ игнорируй. Исправь сразу или сообщи пользователю.

## Этап 4: Отчёт

После завершения работы предоставь краткий отчёт:
ЧТО СДЕЛАНО:

Файл X: описание изменений

Файл Y: создан, назначение

ЧТО ПРОВЕРЕНО:

Функциональность: OK

Интеграция: OK

Чистота: OK

ВОЗМОЖНЫЕ ПРОБЛЕМЫ:

[Если есть] Описание проблемы и рекомендация

## Важно про тесты
НЕ пиши тесты, если пользователь явно не попросил.
НЕ запускай тесты, даже если они существуют в проекте.
Если считаешь, что тесты нужны — просто упомяни это в отчёте.


## Работа с git (только чтение)

### Когда использовать git:
- **Перед изменением файла** — `git log --oneline -5 <файл>` чтобы понять, как файл менялся
- **При поиске причин багов** — `git blame <файл>` чтобы найти когда и кем внесена строка
- **При анализе контекста** — `git diff HEAD` чтобы увидеть незакоммиченные изменения
- **При изучении связанных изменений** — `git show <commit-hash>` чтобы посмотреть конкретный коммит

### Когда НЕ использовать git:
- Не предлагай сделать commit/push — пользователь сам решит
- Не откатывай изменения через git — только через прямое редактирование
- Не переключай ветки — работай с текущим состоянием




















02-code-quality.mdc
---
description: Стандарты качества кода и архитектурные принципы
alwaysApply: true
---
# СТАНДАРТЫ КАЧЕСТВА КОДА

## Архитектурные принципы

### 1. Единственная ответственность (SRP)
Каждая функция/класс/модуль делает ОДНУ вещь. Если функция делает "X и Y" — разбей на две.

### 2. Минимальная связность
Модули должны зависеть от абстракций, а не конкретных реализаций. Избегай жёстких зависимостей.

### 3. Читаемость > Хитрость
Код должен быть понятен junior-разработчику. Сложные однострочники оправданы только если есть комментарий.
Добавлять всегда аннотицаю, типизациюю, док стринг

### 4. Принцип наименьшего удивления
Код должен вести себя так, как ожидает читающий. Никаких скрытых сайд-эффектов. Никаких финтов или использований неявных следствий

## Код-стиль

### Именование:
- Функции: глагол + существительное (`get_user_by_id`, `validate_token`)
- Переменные: существительное, отражающее содержимое (`user_list`, `is_valid`)
- Булевы: начинаются с `is`, `has`, `should`, `can`
- Константы: UPPER_SNAKE_CASE
- Классы/типы: PascalCase

### Функции:
- Максимум 50-70 строк (если больше — разбивай)
- Максимум 4-5 параметров (если больше — передавай объект)
- Один уровень абстракции на функцию
- Ранний возврат вместо вложенных if

### Комментарии:
- НЕ комментируй "что" (код сам говорит)
- Комментируй "почему" (объясняй неочевидные решения)
- Опсиание функций с упором на причинно-следственные связи
- Добавляй в описания капельку теории
- TODO/FIXME — только с описанием контекста

## Обработка ошибок

### Правила:
1. НЕ игнорируй ошибки (если поймал — обработай или пробрось)
2. НЕ используй `catch {}` без обработки
3. Сообщения об ошибках должны быть информативными (не "Error", а "Failed to parse user data: field 'email' is missing")
4. Используй типизированные ошибки, где возможно
5. Валидируй входные данные на границах системы

## Безопасность (базовый минимум)

- НЕ хардкодь секреты (пароли, ключи, токены) — используй конфигурацию
- Экранируй пользовательский ввод (SQL injection, XSS)
- Проверяй права доступа там, где это нужно
- НЕ выводи чувствительные данные в логи

## Производительность (базовый минимум)

- НЕ оптимизируй преждевременно
- НО избегай очевидных проблем: N+1 запросы, бесконечные циклы, утечки памяти
- Используй подходящие структуры данных
- Кэшируй только если это реально нужно

## Про запрещённые паттерны

- НЕ используй `any` (TypeScript) без крайней необходимости
- НЕ используй глобальные переменные
- НЕ создавай god-классы/функции (всё в одном)
- НЕ используй магические числа — выноси в именованные константы
- НЕ игнорируй предупреждения линтера без причины



























03-global-guard.mdc
---
description: Стандарты качества кода и архитектурные принципы
alwaysApply: true
---
# СТАНДАРТЫ КАЧЕСТВА КОДА

## Архитектурные принципы

### 1. Единственная ответственность (SRP)
Каждая функция/класс/модуль делает ОДНУ вещь. Если функция делает "X и Y" — разбей на две.

### 2. Минимальная связность
Модули должны зависеть от абстракций, а не конкретных реализаций. Избегай жёстких зависимостей.

### 3. Читаемость > Хитрость
Код должен быть понятен junior-разработчику. Сложные однострочники оправданы только если есть комментарий.
Добавлять всегда аннотицаю, типизациюю, док стринг

### 4. Принцип наименьшего удивления
Код должен вести себя так, как ожидает читающий. Никаких скрытых сайд-эффектов. Никаких финтов или использований неявных следствий

## Код-стиль

### Именование:
- Функции: глагол + существительное (`get_user_by_id`, `validate_token`)
- Переменные: существительное, отражающее содержимое (`user_list`, `is_valid`)
- Булевы: начинаются с `is`, `has`, `should`, `can`
- Константы: UPPER_SNAKE_CASE
- Классы/типы: PascalCase

### Функции:
- Максимум 50-70 строк (если больше — разбивай)
- Максимум 4-5 параметров (если больше — передавай объект)
- Один уровень абстракции на функцию
- Ранний возврат вместо вложенных if

### Комментарии:
- НЕ комментируй "что" (код сам говорит)
- Комментируй "почему" (объясняй неочевидные решения)
- Опсиание функций с упором на причинно-следственные связи
- Добавляй в описания капельку теории
- TODO/FIXME — только с описанием контекста

## Обработка ошибок

### Правила:
1. НЕ игнорируй ошибки (если поймал — обработай или пробрось)
2. НЕ используй `catch {}` без обработки
3. Сообщения об ошибках должны быть информативными (не "Error", а "Failed to parse user data: field 'email' is missing")
4. Используй типизированные ошибки, где возможно
5. Валидируй входные данные на границах системы

## Безопасность (базовый минимум)

- НЕ хардкодь секреты (пароли, ключи, токены) — используй конфигурацию
- Экранируй пользовательский ввод (SQL injection, XSS)
- Проверяй права доступа там, где это нужно
- НЕ выводи чувствительные данные в логи

## Производительность (базовый минимум)

- НЕ оптимизируй преждевременно
- НО избегай очевидных проблем: N+1 запросы, бесконечные циклы, утечки памяти
- Используй подходящие структуры данных
- Кэшируй только если это реально нужно

## Про запрещённые паттерны

- НЕ используй `any` (TypeScript) без крайней необходимости
- НЕ используй глобальные переменные
- НЕ создавай god-классы/функции (всё в одном)
- НЕ используй магические числа — выноси в именованные константы
- НЕ игнорируй предупреждения линтера без причины