docs: обновить документацию для V2 системы
Обновления: - CLAUDE.md - обновлены правила взаимодействия с акцентом на модульную архитектуру - docs/development/MODULAR_ARCHITECTURE_PATTERN.md - обновлена документация паттерна модульной архитектуры 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
181
CLAUDE.md
181
CLAUDE.md
@ -7,6 +7,7 @@
|
|||||||
## 1. ЦЕЛЬ И ПРИНЦИПЫ
|
## 1. ЦЕЛЬ И ПРИНЦИПЫ
|
||||||
|
|
||||||
### 🎯 ЦЕЛЬ ПРАВИЛ:
|
### 🎯 ЦЕЛЬ ПРАВИЛ:
|
||||||
|
|
||||||
- ✅ **Честность и прозрачность** в общении
|
- ✅ **Честность и прозрачность** в общении
|
||||||
- ✅ **Неизменность согласованных планов**
|
- ✅ **Неизменность согласованных планов**
|
||||||
- ✅ **Качественное выполнение задач**
|
- ✅ **Качественное выполнение задач**
|
||||||
@ -15,6 +16,7 @@
|
|||||||
- ✅ **БЕЗОПАСНОСТЬ ИЗМЕНЕНИЙ** - защита от рискованных модификаций
|
- ✅ **БЕЗОПАСНОСТЬ ИЗМЕНЕНИЙ** - защита от рискованных модификаций
|
||||||
|
|
||||||
### ⚡ ПРИНЦИПЫ КАЧЕСТВА КОДА:
|
### ⚡ ПРИНЦИПЫ КАЧЕСТВА КОДА:
|
||||||
|
|
||||||
- ✅ **Качество кода важнее скорости** - лучше потратить время на правильное решение
|
- ✅ **Качество кода важнее скорости** - лучше потратить время на правильное решение
|
||||||
- ✅ **Pre-commit hooks существуют для защиты проекта** - никогда не обходить их
|
- ✅ **Pre-commit hooks существуют для защиты проекта** - никогда не обходить их
|
||||||
- ✅ **Исправлять ошибки, а не обходить их** - каждая ошибка ESLint должна быть исправлена
|
- ✅ **Исправлять ошибки, а не обходить их** - каждая ошибка ESLint должна быть исправлена
|
||||||
@ -27,23 +29,27 @@
|
|||||||
## 2. РЕЖИМЫ РАБОТЫ
|
## 2. РЕЖИМЫ РАБОТЫ
|
||||||
|
|
||||||
### [STRICT] - Режим точного выполнения
|
### [STRICT] - Режим точного выполнения
|
||||||
|
|
||||||
- Делать ТОЛЬКО что указано
|
- Делать ТОЛЬКО что указано
|
||||||
- БЕЗ предложений и улучшений
|
- БЕЗ предложений и улучшений
|
||||||
- Краткие ответы: "Готово", "Сделано"
|
- Краткие ответы: "Готово", "Сделано"
|
||||||
- Активация: "режим робот", "[STRICT]"
|
- Активация: "режим робот", "[STRICT]"
|
||||||
|
|
||||||
### [CREATIVE] - Режим с предложениями
|
### [CREATIVE] - Режим с предложениями
|
||||||
|
|
||||||
- Можно предлагать улучшения
|
- Можно предлагать улучшения
|
||||||
- Можно указывать на проблемы
|
- Можно указывать на проблемы
|
||||||
- Развернутые объяснения
|
- Развернутые объяснения
|
||||||
- По умолчанию активен
|
- По умолчанию активен
|
||||||
|
|
||||||
### [CHECK] - Режим проверки
|
### [CHECK] - Режим проверки
|
||||||
|
|
||||||
- Только анализ, БЕЗ изменений
|
- Только анализ, БЕЗ изменений
|
||||||
- Отчет о найденных проблемах
|
- Отчет о найденных проблемах
|
||||||
- Рекомендации без выполнения
|
- Рекомендации без выполнения
|
||||||
|
|
||||||
**ПРАВИЛО ПРЕДЛОЖЕНИЙ:**
|
**ПРАВИЛО ПРЕДЛОЖЕНИЙ:**
|
||||||
|
|
||||||
- **МОГУ**: Предлагать идеи, улучшения, оптимизации
|
- **МОГУ**: Предлагать идеи, улучшения, оптимизации
|
||||||
- **МОГУ**: Указывать на проблемы и риски
|
- **МОГУ**: Указывать на проблемы и риски
|
||||||
- **МОГУ**: Показывать альтернативные решения
|
- **МОГУ**: Показывать альтернативные решения
|
||||||
@ -57,12 +63,14 @@
|
|||||||
### ЕДИНСТВЕННАЯ ПРАВИЛЬНАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ:
|
### ЕДИНСТВЕННАЯ ПРАВИЛЬНАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ:
|
||||||
|
|
||||||
#### ЭТАП 1: ИНИЦИАЦИЯ
|
#### ЭТАП 1: ИНИЦИАЦИЯ
|
||||||
|
|
||||||
1. **ПОЛУЧИТЬ** задачу от пользователя
|
1. **ПОЛУЧИТЬ** задачу от пользователя
|
||||||
2. **ПРОЧИТАТЬ** - полностью, 3 раза
|
2. **ПРОЧИТАТЬ** - полностью, 3 раза
|
||||||
3. **НАЙТИ** - глаголы действия (создай, измени, удали)
|
3. **НАЙТИ** - глаголы действия (создай, измени, удали)
|
||||||
4. **ОПРЕДЕЛИТЬ** тип задачи и её сложность
|
4. **ОПРЕДЕЛИТЬ** тип задачи и её сложность
|
||||||
|
|
||||||
#### ЭТАП 2: ПЛАНИРОВАНИЕ
|
#### ЭТАП 2: ПЛАНИРОВАНИЕ
|
||||||
|
|
||||||
5. **🛑 ГЛУБОКИЙ АНАЛИЗ** (обязательные вопросы пользователю)
|
5. **🛑 ГЛУБОКИЙ АНАЛИЗ** (обязательные вопросы пользователю)
|
||||||
6. **🔍 ИССЛЕДОВАНИЕ** (изучение ВСЕХ связанных файлов)
|
6. **🔍 ИССЛЕДОВАНИЕ** (изучение ВСЕХ связанных файлов)
|
||||||
7. **📊 ДЕТАЛЬНЫЙ ПЛАН** (с промежуточными проверками и rollback точками)
|
7. **📊 ДЕТАЛЬНЫЙ ПЛАН** (с промежуточными проверками и rollback точками)
|
||||||
@ -71,6 +79,7 @@
|
|||||||
10. **ОСТАНОВИТЬСЯ И ЖДАТЬ ОДОБРЕНИЯ ПЛАНА**
|
10. **ОСТАНОВИТЬСЯ И ЖДАТЬ ОДОБРЕНИЯ ПЛАНА**
|
||||||
|
|
||||||
**Чек-лист планирования:**
|
**Чек-лист планирования:**
|
||||||
|
|
||||||
```
|
```
|
||||||
- ✅ Прочитал правила в docs/
|
- ✅ Прочитал правила в docs/
|
||||||
- ✅ Задача понята в контексте правил
|
- ✅ Задача понята в контексте правил
|
||||||
@ -81,12 +90,14 @@
|
|||||||
```
|
```
|
||||||
|
|
||||||
#### ЭТАП 3: ВЫПОЛНЕНИЕ
|
#### ЭТАП 3: ВЫПОЛНЕНИЕ
|
||||||
|
|
||||||
11. **ПОЛУЧИТЬ** одобрение плана от пользователя
|
11. **ПОЛУЧИТЬ** одобрение плана от пользователя
|
||||||
12. **ИССЛЕДОВАТЬ** - Read/Grep/Glob перед изменениями
|
12. **ИССЛЕДОВАТЬ** - Read/Grep/Glob перед изменениями
|
||||||
13. **ВЫПОЛНЯТЬ** строго по одобренному плану
|
13. **ВЫПОЛНЯТЬ** строго по одобренному плану
|
||||||
14. **ПРОВЕРИТЬ** - npm run typecheck, npm run lint
|
14. **ПРОВЕРИТЬ** - npm run typecheck, npm run lint
|
||||||
|
|
||||||
#### ЭТАП 4: КОНТРОЛЬ
|
#### ЭТАП 4: КОНТРОЛЬ
|
||||||
|
|
||||||
15. **ПРОВЕСТИ** финальную самопроверку
|
15. **ПРОВЕСТИ** финальную самопроверку
|
||||||
16. **ОТЧИТАТЬСЯ** - что сделано/не трогал/проблемы
|
16. **ОТЧИТАТЬСЯ** - что сделано/не трогал/проблемы
|
||||||
|
|
||||||
@ -97,12 +108,14 @@
|
|||||||
## 4. ЖЕЛЕЗНЫЕ ЗАПРЕТЫ
|
## 4. ЖЕЛЕЗНЫЕ ЗАПРЕТЫ
|
||||||
|
|
||||||
### АБСОЛЮТНЫЕ ПРАВИЛА:
|
### АБСОЛЮТНЫЕ ПРАВИЛА:
|
||||||
|
|
||||||
❌ **НИЧЕГО НЕ ДЕЛАТЬ БЕЗ ПЛАНА И БЕЗ РАЗРЕШЕНИЯ!**
|
❌ **НИЧЕГО НЕ ДЕЛАТЬ БЕЗ ПЛАНА И БЕЗ РАЗРЕШЕНИЯ!**
|
||||||
❌ **ВСЕГДА ЧИТАТЬ КОД!** - никаких предположений о структуре
|
❌ **ВСЕГДА ЧИТАТЬ КОД!** - никаких предположений о структуре
|
||||||
❌ **НИЧЕГО НЕ ДОДУМЫВАТЬ!** - сомневаешься = спроси пользователя
|
❌ **НИЧЕГО НЕ ДОДУМЫВАТЬ!** - сомневаешься = спроси пользователя
|
||||||
❌ **ЛУЧШЕ МЕДЛЕННЕЕ, НО ИДЕАЛЬНЫЙ ЧИСТЫЙ ЛОГИЧНЫЙ ЭФФЕКТИВНЫЙ КОД!**
|
❌ **ЛУЧШЕ МЕДЛЕННЕЕ, НО ИДЕАЛЬНЫЙ ЧИСТЫЙ ЛОГИЧНЫЙ ЭФФЕКТИВНЫЙ КОД!**
|
||||||
|
|
||||||
### ЗАПРЕТЫ НА ПРЕДПОЛОЖЕНИЯ:
|
### ЗАПРЕТЫ НА ПРЕДПОЛОЖЕНИЯ:
|
||||||
|
|
||||||
❌ НИКОГДА не предполагать/додумывать
|
❌ НИКОГДА не предполагать/додумывать
|
||||||
❌ НИКОГДА не улучшать без запроса
|
❌ НИКОГДА не улучшать без запроса
|
||||||
❌ НИКОГДА не рефакторить "заодно"
|
❌ НИКОГДА не рефакторить "заодно"
|
||||||
@ -111,6 +124,7 @@
|
|||||||
❌ НИКОГДА не реализовывать идеи без разрешения
|
❌ НИКОГДА не реализовывать идеи без разрешения
|
||||||
|
|
||||||
### ПРАВИЛА ИССЛЕДОВАНИЯ КОДА:
|
### ПРАВИЛА ИССЛЕДОВАНИЯ КОДА:
|
||||||
|
|
||||||
- ✅ **ОБЯЗАТЕЛЬНО использовать инструменты поиска** по кодовой базе
|
- ✅ **ОБЯЗАТЕЛЬНО использовать инструменты поиска** по кодовой базе
|
||||||
- ✅ **ОБЯЗАТЕЛЬНО читать исходный код** файлов
|
- ✅ **ОБЯЗАТЕЛЬНО читать исходный код** файлов
|
||||||
- ✅ **ОБЯЗАТЕЛЬНО читать архитектурные правила** ПЕРЕД любым созданием компонентов
|
- ✅ **ОБЯЗАТЕЛЬНО читать архитектурные правила** ПЕРЕД любым созданием компонентов
|
||||||
@ -119,6 +133,7 @@
|
|||||||
- ❌ **ЗАПРЕЩЕНО начинать код без понимания архитектуры**
|
- ❌ **ЗАПРЕЩЕНО начинать код без понимания архитектуры**
|
||||||
|
|
||||||
### РАБОТА С ПЛАНАМИ:
|
### РАБОТА С ПЛАНАМИ:
|
||||||
|
|
||||||
❌ НИКОГДА не изменять согласованные планы без явного решения
|
❌ НИКОГДА не изменять согласованные планы без явного решения
|
||||||
❌ НИКОГДА не менять последовательность задач молча
|
❌ НИКОГДА не менять последовательность задач молча
|
||||||
❌ НИКОГДА не добавлять новые пункты в план
|
❌ НИКОГДА не добавлять новые пункты в план
|
||||||
@ -128,6 +143,7 @@
|
|||||||
❌ НИКОГДА не делать вид что помню план, когда не помню
|
❌ НИКОГДА не делать вид что помню план, когда не помню
|
||||||
|
|
||||||
### ОБЯЗАТЕЛЬНЫЕ ДЕЙСТВИЯ:
|
### ОБЯЗАТЕЛЬНЫЕ ДЕЙСТВИЯ:
|
||||||
|
|
||||||
✅ ВСЕГДА спрашивать при сомнениях
|
✅ ВСЕГДА спрашивать при сомнениях
|
||||||
✅ ВСЕГДА читать код перед изменениями
|
✅ ВСЕГДА читать код перед изменениями
|
||||||
✅ ВСЕГДА проверять типы и линтер
|
✅ ВСЕГДА проверять типы и линтер
|
||||||
@ -139,7 +155,9 @@
|
|||||||
## 5. СИСТЕМЫ ПРОВЕРОК И КОНТРОЛЯ
|
## 5. СИСТЕМЫ ПРОВЕРОК И КОНТРОЛЯ
|
||||||
|
|
||||||
### СТОП-СИГНАЛЫ
|
### СТОП-СИГНАЛЫ
|
||||||
|
|
||||||
При этих словах → СТОП → уточнить:
|
При этих словах → СТОП → уточнить:
|
||||||
|
|
||||||
- "удали" → "Что именно удалить? Файл/функцию/строку?"
|
- "удали" → "Что именно удалить? Файл/функцию/строку?"
|
||||||
- "исправь" → "Какую конкретно ошибку?"
|
- "исправь" → "Какую конкретно ошибку?"
|
||||||
- "откати" → "На какой коммит/сколько действий?"
|
- "откати" → "На какой коммит/сколько действий?"
|
||||||
@ -147,12 +165,14 @@
|
|||||||
- "добавь" → "Куда именно добавить?"
|
- "добавь" → "Куда именно добавить?"
|
||||||
|
|
||||||
### ОБЯЗАТЕЛЬНЫЕ ФРАЗЫ при уточнении:
|
### ОБЯЗАТЕЛЬНЫЕ ФРАЗЫ при уточнении:
|
||||||
|
|
||||||
✅ "Не уверен. Уточните, пожалуйста:"
|
✅ "Не уверен. Уточните, пожалуйста:"
|
||||||
✅ "Какой именно файл/компонент?"
|
✅ "Какой именно файл/компонент?"
|
||||||
✅ "Вы имеете в виду X или Y?"
|
✅ "Вы имеете в виду X или Y?"
|
||||||
✅ "Правильно ли я понимаю, что..."
|
✅ "Правильно ли я понимаю, что..."
|
||||||
|
|
||||||
### ЗАПРЕЩЕННЫЕ ФРАЗЫ:
|
### ЗАПРЕЩЕННЫЕ ФРАЗЫ:
|
||||||
|
|
||||||
❌ "Возможно, вы имеете в виду..."
|
❌ "Возможно, вы имеете в виду..."
|
||||||
❌ "Скорее всего, нужно..."
|
❌ "Скорее всего, нужно..."
|
||||||
❌ "Попробую в этом файле..."
|
❌ "Попробую в этом файле..."
|
||||||
@ -161,24 +181,124 @@
|
|||||||
### АВТОМАТИЧЕСКИЕ ТРИГГЕРЫ:
|
### АВТОМАТИЧЕСКИЕ ТРИГГЕРЫ:
|
||||||
|
|
||||||
#### ТРИГГЕР #1: При упоминании компонентов
|
#### ТРИГГЕР #1: При упоминании компонентов
|
||||||
|
|
||||||
- Ключевые слова: "компонент", "файл", "содержание", "показывает"
|
- Ключевые слова: "компонент", "файл", "содержание", "показывает"
|
||||||
- Действие: ОБЯЗАТЕЛЬНО использовать инструменты анализа кода
|
- Действие: ОБЯЗАТЕЛЬНО использовать инструменты анализа кода
|
||||||
|
|
||||||
#### ТРИГГЕР #2: При неопределенности
|
#### ТРИГГЕР #2: При неопределенности
|
||||||
|
|
||||||
- Ключевые фразы: "возможно", "вероятно", "думаю", "предполагаю"
|
- Ключевые фразы: "возможно", "вероятно", "думаю", "предполагаю"
|
||||||
- Действие: СТОП + вопрос пользователю
|
- Действие: СТОП + вопрос пользователю
|
||||||
|
|
||||||
#### ТРИГГЕР #3: При работе с поставщиками
|
#### ТРИГГЕР #3: При работе с поставщиками
|
||||||
|
|
||||||
- Ключевые слова: "поставщик", "wholesale", "/warehouse", "/supplier-orders"
|
- Ключевые слова: "поставщик", "wholesale", "/warehouse", "/supplier-orders"
|
||||||
- Действие: ОБЯЗАТЕЛЬНО прочитать wholesale-cabinet-rules.md
|
- Действие: ОБЯЗАТЕЛЬНО прочитать wholesale-cabinet-rules.md
|
||||||
|
|
||||||
#### ТРИГГЕР #4: При создании компонентов
|
#### ТРИГГЕР #4: При создании компонентов
|
||||||
|
|
||||||
- Ключевые слова: "создай", "новый компонент", "добавь компонент", "создать компонент"
|
- Ключевые слова: "создай", "новый компонент", "добавь компонент", "создать компонент"
|
||||||
- Действие: ОБЯЗАТЕЛЬНО прочитать MODULAR_ARCHITECTURE_PATTERN.md + COMPONENT_ARCHITECTURE.md ПЕРЕД началом
|
- Действие: ОБЯЗАТЕЛЬНО прочитать MODULAR_ARCHITECTURE_PATTERN.md + COMPONENT_ARCHITECTURE.md ПЕРЕД началом
|
||||||
|
|
||||||
|
#### ТРИГГЕР #5: Модульная архитектура по умолчанию
|
||||||
|
|
||||||
|
- Ключевые слова: "страница", "page", "форма", "таблица", "dashboard", "management"
|
||||||
|
- Действие: АВТОМАТИЧЕСКИ применять модульную архитектуру
|
||||||
|
|
||||||
|
### МОДУЛЬНАЯ АРХИТЕКТУРА ПО УМОЛЧАНИЮ В SFERA
|
||||||
|
|
||||||
|
#### 🎯 КЛЮЧЕВОЕ ПРАВИЛО:
|
||||||
|
|
||||||
|
> "Если сомневаешься - делай модульным. Лучше иметь избыточную структуру папок, чем 2000-строчный спагетти-код через месяц."
|
||||||
|
|
||||||
|
#### ✅ ВСЕГДА МОДУЛЬНАЯ АРХИТЕКТУРА (без исключений):
|
||||||
|
|
||||||
|
**1. Страницы и основные разделы:**
|
||||||
|
|
||||||
|
- ВСЕ файлы `page.tsx` в `/app/**/`
|
||||||
|
- ВСЕ дашборды любых типов
|
||||||
|
- ВСЕ разделы управления (supplies, employees, products, settings)
|
||||||
|
- ВСЕ wizard/multi-step компоненты
|
||||||
|
|
||||||
|
**2. Формы (даже простые!):**
|
||||||
|
|
||||||
|
- ЛЮБАЯ форма создания/редактирования сущности
|
||||||
|
- Формы с >3 полей
|
||||||
|
- Многошаговые формы
|
||||||
|
- Формы с динамическими полями
|
||||||
|
- _Почему: формы ВСЕГДА разрастаются (валидация, автозаполнение, зависимые поля)_
|
||||||
|
|
||||||
|
**3. Таблицы и списки:**
|
||||||
|
|
||||||
|
- ЛЮБАЯ таблица с данными из БД
|
||||||
|
- Таблицы с фильтрацией/сортировкой
|
||||||
|
- Таблицы с inline-редактированием
|
||||||
|
- Списки с действиями (approve/reject/delete)
|
||||||
|
- _Почему: всегда добавятся фильтры, сортировка, экспорт, bulk-операции_
|
||||||
|
|
||||||
|
**4. Комплексные компоненты:**
|
||||||
|
|
||||||
|
- Чаты/мессенджеры
|
||||||
|
- Календари/планировщики
|
||||||
|
- Графики/аналитика
|
||||||
|
- Файловые менеджеры
|
||||||
|
- Корзины/калькуляторы
|
||||||
|
|
||||||
|
#### ❌ ИСКЛЮЧЕНИЯ (только эти остаются простыми):
|
||||||
|
|
||||||
|
1. **Чистые UI из Radix/shadcn** - уже оптимизированы
|
||||||
|
2. **Stateless компоненты** < 50 строк без логики
|
||||||
|
3. **Чистые Layout** компоненты (Header/Footer)
|
||||||
|
4. **Utility компоненты** (ErrorBoundary, LoadingState)
|
||||||
|
5. **Простые модалки** подтверждения (Да/Нет)
|
||||||
|
|
||||||
|
#### 📏 КРИТЕРИИ ПРИНЯТИЯ РЕШЕНИЯ:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
// Псевдокод для принятия решения
|
||||||
|
function shouldUseModularArchitecture(component) {
|
||||||
|
// Автоматически ДА
|
||||||
|
if (
|
||||||
|
component.type === 'page' ||
|
||||||
|
component.type === 'dashboard' ||
|
||||||
|
component.type === 'form' ||
|
||||||
|
component.type === 'table' ||
|
||||||
|
component.expectedSize > 300
|
||||||
|
) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// Проверяем сложность
|
||||||
|
const complexityScore =
|
||||||
|
component.stateVariables + // количество useState
|
||||||
|
component.apiCalls * 2 + // API вызовы весят больше
|
||||||
|
component.formFields + // поля форм
|
||||||
|
(component.hasBusinessLogic ? 3 : 0) // бизнес-логика
|
||||||
|
|
||||||
|
return complexityScore >= 5
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 🎯 ПРАКТИЧЕСКИЕ ПРИМЕРЫ:
|
||||||
|
|
||||||
|
**Модульные:**
|
||||||
|
|
||||||
|
- `/app/suppliers/create/page.tsx` → CreateSupplierPage/
|
||||||
|
- `EmployeeManagementTable` → EmployeeManagement/
|
||||||
|
- `SupplyOrderForm` → SupplyOrderForm/
|
||||||
|
- `ProductCatalog` → ProductCatalog/
|
||||||
|
|
||||||
|
**Простые:**
|
||||||
|
|
||||||
|
- `Logo.tsx`
|
||||||
|
- `LoadingDots.tsx`
|
||||||
|
- `ConfirmDialog.tsx`
|
||||||
|
- `PriceDisplay.tsx`
|
||||||
|
|
||||||
### ПРАВИЛО ПОСЛЕДОВАТЕЛЬНОСТИ ВЫПОЛНЕНИЯ:
|
### ПРАВИЛО ПОСЛЕДОВАТЕЛЬНОСТИ ВЫПОЛНЕНИЯ:
|
||||||
|
|
||||||
**ОБЯЗАТЕЛЬНО:**
|
**ОБЯЗАТЕЛЬНО:**
|
||||||
|
|
||||||
- Выполнять задачи в согласованной последовательности
|
- Выполнять задачи в согласованной последовательности
|
||||||
- Завершать текущую задачу перед переходом к следующей
|
- Завершать текущую задачу перед переходом к следующей
|
||||||
- Отмечать статус выполнения каждой задачи в TodoWrite
|
- Отмечать статус выполнения каждой задачи в TodoWrite
|
||||||
@ -186,6 +306,7 @@
|
|||||||
- Обновлять статус задач в реальном времени
|
- Обновлять статус задач в реальном времени
|
||||||
|
|
||||||
**ЗАПРЕЩЕНО:**
|
**ЗАПРЕЩЕНО:**
|
||||||
|
|
||||||
- Перепрыгивать между задачами без разрешения
|
- Перепрыгивать между задачами без разрешения
|
||||||
- Объединять задачи самовольно
|
- Объединять задачи самовольно
|
||||||
- Менять приоритеты без согласования
|
- Менять приоритеты без согласования
|
||||||
@ -194,6 +315,7 @@
|
|||||||
### СИСТЕМА САМОПРОВЕРКИ:
|
### СИСТЕМА САМОПРОВЕРКИ:
|
||||||
|
|
||||||
**ПРОВЕРКА #1: АНАЛИЗ КОДА**
|
**ПРОВЕРКА #1: АНАЛИЗ КОДА**
|
||||||
|
|
||||||
```
|
```
|
||||||
□ Использовал ли поиск по кодовой базе?
|
□ Использовал ли поиск по кодовой базе?
|
||||||
□ Прочитал ли исходный код?
|
□ Прочитал ли исходный код?
|
||||||
@ -201,6 +323,7 @@
|
|||||||
```
|
```
|
||||||
|
|
||||||
**ПРОВЕРКА #2: СОБЛЮДЕНИЕ ПРОТОКОЛОВ**
|
**ПРОВЕРКА #2: СОБЛЮДЕНИЕ ПРОТОКОЛОВ**
|
||||||
|
|
||||||
```
|
```
|
||||||
□ Определил ли сложность задачи?
|
□ Определил ли сложность задачи?
|
||||||
□ Применил ли соответствующий протокол?
|
□ Применил ли соответствующий протокол?
|
||||||
@ -211,6 +334,7 @@
|
|||||||
### ИЗМЕРИМЫЕ МЕТРИКИ УСПЕХА:
|
### ИЗМЕРИМЫЕ МЕТРИКИ УСПЕХА:
|
||||||
|
|
||||||
**КОНКРЕТНЫЕ МЕТРИКИ:**
|
**КОНКРЕТНЫЕ МЕТРИКИ:**
|
||||||
|
|
||||||
- ✅ Минимум 2 уточняющих вопроса при неопределенности
|
- ✅ Минимум 2 уточняющих вопроса при неопределенности
|
||||||
- ✅ 100% файлов из списка зависимостей компонента изучены
|
- ✅ 100% файлов из списка зависимостей компонента изучены
|
||||||
- ✅ Все пункты протокола сложности выполнены
|
- ✅ Все пункты протокола сложности выполнены
|
||||||
@ -218,6 +342,7 @@
|
|||||||
- ✅ План одобрен пользователем до начала выполнения
|
- ✅ План одобрен пользователем до начала выполнения
|
||||||
|
|
||||||
**5 ВОПРОСОВ ПОСЛЕ КАЖДОЙ ЗАДАЧИ:**
|
**5 ВОПРОСОВ ПОСЛЕ КАЖДОЙ ЗАДАЧИ:**
|
||||||
|
|
||||||
1. Прочитал ли все необходимые файлы правил?
|
1. Прочитал ли все необходимые файлы правил?
|
||||||
2. Применил ли соответствующий протокол сложности?
|
2. Применил ли соответствующий протокол сложности?
|
||||||
3. Получил ли одобрение плана перед выполнением?
|
3. Получил ли одобрение плана перед выполнением?
|
||||||
@ -227,6 +352,7 @@
|
|||||||
**ЦЕЛЬ: 5/5 ответов "ДА" для каждой задачи**
|
**ЦЕЛЬ: 5/5 ответов "ДА" для каждой задачи**
|
||||||
|
|
||||||
**ФИНАЛЬНАЯ МЕГА-ПРОВЕРКА**
|
**ФИНАЛЬНАЯ МЕГА-ПРОВЕРКА**
|
||||||
|
|
||||||
```
|
```
|
||||||
МЕГА-ВОПРОС К СЕБЕ:
|
МЕГА-ВОПРОС К СЕБЕ:
|
||||||
"Применил ли я правильный протокол, проверил ли все правила,
|
"Применил ли я правильный протокол, проверил ли все правила,
|
||||||
@ -242,11 +368,13 @@
|
|||||||
### ПРАВИЛО ЧЕСТНОГО ПРИЗНАНИЯ ОГРАНИЧЕНИЙ
|
### ПРАВИЛО ЧЕСТНОГО ПРИЗНАНИЯ ОГРАНИЧЕНИЙ
|
||||||
|
|
||||||
#### При потере информации:
|
#### При потере информации:
|
||||||
|
|
||||||
- ✅ **ЧЕСТНО** сказать: "Не помню/не нашел"
|
- ✅ **ЧЕСТНО** сказать: "Не помню/не нашел"
|
||||||
- ✅ **ПОПРОСИТЬ** помощи у пользователя
|
- ✅ **ПОПРОСИТЬ** помощи у пользователя
|
||||||
- ❌ **НЕ ПРИДУМЫВАТЬ** информацию
|
- ❌ **НЕ ПРИДУМЫВАТЬ** информацию
|
||||||
|
|
||||||
**Формат при потере контекста плана:**
|
**Формат при потере контекста плана:**
|
||||||
|
|
||||||
```
|
```
|
||||||
🔍 НЕ МОГУ НАЙТИ: мои изначальные предложения по задаче X
|
🔍 НЕ МОГУ НАЙТИ: мои изначальные предложения по задаче X
|
||||||
🆘 НУЖНА ПОМОЩЬ: напомните что я предлагал или дайте новые инструкции
|
🆘 НУЖНА ПОМОЩЬ: напомните что я предлагал или дайте новые инструкции
|
||||||
@ -254,11 +382,13 @@
|
|||||||
```
|
```
|
||||||
|
|
||||||
#### При неопределенности:
|
#### При неопределенности:
|
||||||
|
|
||||||
- ✅ **ОСТАНОВИТЬСЯ** и спросить
|
- ✅ **ОСТАНОВИТЬСЯ** и спросить
|
||||||
- ✅ **ОПИСАТЬ** варианты действий
|
- ✅ **ОПИСАТЬ** варианты действий
|
||||||
- ❌ **НЕ ДЕЙСТВОВАТЬ** наугад
|
- ❌ **НЕ ДЕЙСТВОВАТЬ** наугад
|
||||||
|
|
||||||
**Формат при неопределенности:**
|
**Формат при неопределенности:**
|
||||||
|
|
||||||
```
|
```
|
||||||
🤔 НЕОПРЕДЕЛЕННОСТЬ: [описание проблемы]
|
🤔 НЕОПРЕДЕЛЕННОСТЬ: [описание проблемы]
|
||||||
❓ НУЖНО УТОЧНИТЬ: [конкретный вопрос]
|
❓ НУЖНО УТОЧНИТЬ: [конкретный вопрос]
|
||||||
@ -269,6 +399,7 @@
|
|||||||
### ПРАВИЛО ПРОЗРАЧНОСТИ ДЕЙСТВИЙ
|
### ПРАВИЛО ПРОЗРАЧНОСТИ ДЕЙСТВИЙ
|
||||||
|
|
||||||
#### ОБЯЗАТЕЛЬНО СООБЩАТЬ:
|
#### ОБЯЗАТЕЛЬНО СООБЩАТЬ:
|
||||||
|
|
||||||
- Когда не уверен в правильности действий
|
- Когда не уверен в правильности действий
|
||||||
- Когда обнаружил противоречия в правилах
|
- Когда обнаружил противоречия в правилах
|
||||||
- Когда нужны уточнения для продолжения
|
- Когда нужны уточнения для продолжения
|
||||||
@ -276,6 +407,7 @@
|
|||||||
- О всех критических проблемах в плане
|
- О всех критических проблемах в плане
|
||||||
|
|
||||||
#### При необходимости изменить план:
|
#### При необходимости изменить план:
|
||||||
|
|
||||||
```
|
```
|
||||||
⚠️ ПРЕДЛОЖЕНИЕ ОБ ИЗМЕНЕНИИ ПЛАНА:
|
⚠️ ПРЕДЛОЖЕНИЕ ОБ ИЗМЕНЕНИИ ПЛАНА:
|
||||||
- ТЕКУЩИЙ ПЛАН: [что согласовано]
|
- ТЕКУЩИЙ ПЛАН: [что согласовано]
|
||||||
@ -285,6 +417,7 @@
|
|||||||
```
|
```
|
||||||
|
|
||||||
#### При обнаружении ошибок в плане:
|
#### При обнаружении ошибок в плане:
|
||||||
|
|
||||||
```
|
```
|
||||||
🚨 ОБНАРУЖЕНА ПРОБЛЕМА В ПЛАНЕ:
|
🚨 ОБНАРУЖЕНА ПРОБЛЕМА В ПЛАНЕ:
|
||||||
- ЗАДАЧА: [какая именно]
|
- ЗАДАЧА: [какая именно]
|
||||||
@ -295,15 +428,18 @@
|
|||||||
### ЭКСТРЕННАЯ ОСТАНОВКА И УТОЧНЕНИЯ
|
### ЭКСТРЕННАЯ ОСТАНОВКА И УТОЧНЕНИЯ
|
||||||
|
|
||||||
#### Команда остановки:
|
#### Команда остановки:
|
||||||
|
|
||||||
**"СТОП - ЧИТАЙ ПРАВИЛА"** - немедленно останавливает любую работу
|
**"СТОП - ЧИТАЙ ПРАВИЛА"** - немедленно останавливает любую работу
|
||||||
|
|
||||||
#### Обязательные остановки при:
|
#### Обязательные остановки при:
|
||||||
|
|
||||||
- Неопределенности или сомнениях
|
- Неопределенности или сомнениях
|
||||||
- Средних/сложных задачах без протокола
|
- Средних/сложных задачах без протокола
|
||||||
- Противоречиях в правилах
|
- Противоречиях в правилах
|
||||||
- Анализе компонентов без использования инструментов
|
- Анализе компонентов без использования инструментов
|
||||||
|
|
||||||
#### Формат уточняющих вопросов:
|
#### Формат уточняющих вопросов:
|
||||||
|
|
||||||
```
|
```
|
||||||
🎯 КОНТЕКСТ: Что именно я делаю
|
🎯 КОНТЕКСТ: Что именно я делаю
|
||||||
❓ ВОПРОС: Что конкретно неясно
|
❓ ВОПРОС: Что конкретно неясно
|
||||||
@ -317,12 +453,14 @@
|
|||||||
## 7. СПЕЦИФИКА ПРОЕКТА SFERA
|
## 7. СПЕЦИФИКА ПРОЕКТА SFERA
|
||||||
|
|
||||||
### ТЕХНОЛОГИИ:
|
### ТЕХНОЛОГИИ:
|
||||||
|
|
||||||
- Next.js 15 + TypeScript (строгая типизация)
|
- Next.js 15 + TypeScript (строгая типизация)
|
||||||
- GraphQL (не менять схемы без запроса)
|
- GraphQL (не менять схемы без запроса)
|
||||||
- Prisma (миграции только по команде)
|
- Prisma (миграции только по команде)
|
||||||
- Git (коммиты только когда попросят)
|
- Git (коммиты только когда попросят)
|
||||||
|
|
||||||
### СТРУКТУРА:
|
### СТРУКТУРА:
|
||||||
|
|
||||||
- /src/app - страницы Next.js
|
- /src/app - страницы Next.js
|
||||||
- /src/components - React компоненты
|
- /src/components - React компоненты
|
||||||
- /src/graphql - API слой
|
- /src/graphql - API слой
|
||||||
@ -335,6 +473,7 @@
|
|||||||
- /legacy-rules - архив правил (не трогать)
|
- /legacy-rules - архив правил (не трогать)
|
||||||
|
|
||||||
### КОМАНДЫ:
|
### КОМАНДЫ:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npm run dev # Разработка
|
npm run dev # Разработка
|
||||||
npm run build # Сборка production
|
npm run build # Сборка production
|
||||||
@ -348,6 +487,7 @@ npx prisma studio # GUI для базы данных
|
|||||||
```
|
```
|
||||||
|
|
||||||
### API ИНТЕГРАЦИИ:
|
### API ИНТЕГРАЦИИ:
|
||||||
|
|
||||||
- **Wildberries/Ozon** - маркетплейсы
|
- **Wildberries/Ozon** - маркетплейсы
|
||||||
- **DaData** - валидация ИНН и реквизитов
|
- **DaData** - валидация ИНН и реквизитов
|
||||||
- **SMS Aero** - отправка SMS для авторизации
|
- **SMS Aero** - отправка SMS для авторизации
|
||||||
@ -358,47 +498,57 @@ npx prisma studio # GUI для базы данных
|
|||||||
#### СТРУКТУРА ДОКУМЕНТАЦИИ СИСТЕМЫ:
|
#### СТРУКТУРА ДОКУМЕНТАЦИИ СИСТЕМЫ:
|
||||||
|
|
||||||
**🎯 CORE - Ядро системы**
|
**🎯 CORE - Ядро системы**
|
||||||
|
|
||||||
- **DOMAIN_MODEL.md** - 4 типа организаций, основные сущности
|
- **DOMAIN_MODEL.md** - 4 типа организаций, основные сущности
|
||||||
- **BUSINESS_RULES_CORE.md** - Ключевые бизнес-правила: доступ, партнерство, расходники
|
- **BUSINESS_RULES_CORE.md** - Ключевые бизнес-правила: доступ, партнерство, расходники
|
||||||
|
|
||||||
**🔌 API_LAYER - Уровень API**
|
**🔌 API_LAYER - Уровень API**
|
||||||
|
|
||||||
- **GRAPHQL_SCHEMA_RULES.md** - Правила GraphQL схемы: типы, enums, безопасность
|
- **GRAPHQL_SCHEMA_RULES.md** - Правила GraphQL схемы: типы, enums, безопасность
|
||||||
|
|
||||||
**💾 DATA_LAYER - Уровень данных**
|
**💾 DATA_LAYER - Уровень данных**
|
||||||
|
|
||||||
- **PRISMA_MODEL_RULES.md** - Правила Prisma моделей: структуры, связи, миграции
|
- **PRISMA_MODEL_RULES.md** - Правила Prisma моделей: структуры, связи, миграции
|
||||||
|
|
||||||
**🎨 PRESENTATION_LAYER - Уровень представления**
|
**🎨 PRESENTATION_LAYER - Уровень представления**
|
||||||
|
|
||||||
- **COMPONENT_ARCHITECTURE.md** - Архитектура React компонентов: модульность, hooks, patterns
|
- **COMPONENT_ARCHITECTURE.md** - Архитектура React компонентов: модульность, hooks, patterns
|
||||||
|
|
||||||
**🏢 ORGANIZATION_TYPES - Домены по типам организаций**
|
**🏢 ORGANIZATION_TYPES - Домены по типам организаций**
|
||||||
|
|
||||||
- **FULFILLMENT_DOMAIN.md** - Домен фулфилмента: двойная система расходников, workflow
|
- **FULFILLMENT_DOMAIN.md** - Домен фулфилмента: двойная система расходников, workflow
|
||||||
- **SELLER_DOMAIN.md** - Домен селлеров: маркетплейсы, рецептуры, изоляция данных
|
- **SELLER_DOMAIN.md** - Домен селлеров: маркетплейсы, рецептуры, изоляция данных
|
||||||
- **WHOLESALE_DOMAIN.md** - Домен поставщиков: каталог, входящие заказы, координация
|
- **WHOLESALE_DOMAIN.md** - Домен поставщиков: каталог, входящие заказы, координация
|
||||||
- **LOGIST_DOMAIN.md** - Домен логистики: маршруты, ценообразование по объему
|
- **LOGIST_DOMAIN.md** - Домен логистики: маршруты, ценообразование по объему
|
||||||
|
|
||||||
**🔄 BUSINESS_PROCESSES - Бизнес-процессы**
|
**🔄 BUSINESS_PROCESSES - Бизнес-процессы**
|
||||||
|
|
||||||
- **SUPPLY_CHAIN_WORKFLOW.md** - Цепочка поставок: 8 статусов, роли, переходы
|
- **SUPPLY_CHAIN_WORKFLOW.md** - Цепочка поставок: 8 статусов, роли, переходы
|
||||||
- **PARTNERSHIP_SYSTEM.md** - Система партнерства: заявки, автопартнерство, бонусы
|
- **PARTNERSHIP_SYSTEM.md** - Система партнерства: заявки, автопартнерство, бонусы
|
||||||
|
|
||||||
#### АЛГОРИТМ ВЫБОРА ДОКУМЕНТАЦИИ:
|
#### АЛГОРИТМ ВЫБОРА ДОКУМЕНТАЦИИ:
|
||||||
|
|
||||||
**ПРИ СОЗДАНИИ НОВЫХ КОМПОНЕНТОВ:**
|
**ПРИ СОЗДАНИИ НОВЫХ КОМПОНЕНТОВ:**
|
||||||
|
|
||||||
1. **MODULAR_ARCHITECTURE_PATTERN.md** - Архитектурные требования (СНАЧАЛА)
|
1. **MODULAR_ARCHITECTURE_PATTERN.md** - Архитектурные требования (СНАЧАЛА)
|
||||||
2. **COMPONENT_ARCHITECTURE.md** - Паттерны реализации React компонентов
|
2. **COMPONENT_ARCHITECTURE.md** - Паттерны реализации React компонентов
|
||||||
3. **DOMAIN_MODEL.md** - Понимание доменных сущностей
|
3. **DOMAIN_MODEL.md** - Понимание доменных сущностей
|
||||||
4. Соответствующий **organization-types/*.md** - Специфика типа организации
|
4. Соответствующий **organization-types/\*.md** - Специфика типа организации
|
||||||
|
|
||||||
**ПРИ РАБОТЕ С API:**
|
**ПРИ РАБОТЕ С API:**
|
||||||
|
|
||||||
1. **GRAPHQL_SCHEMA_RULES.md** - Правила схемы
|
1. **GRAPHQL_SCHEMA_RULES.md** - Правила схемы
|
||||||
2. **BUSINESS_RULES_CORE.md** - Бизнес-логика
|
2. **BUSINESS_RULES_CORE.md** - Бизнес-логика
|
||||||
3. **PRISMA_MODEL_RULES.md** - Модели данных
|
3. **PRISMA_MODEL_RULES.md** - Модели данных
|
||||||
|
|
||||||
**ПРИ WORKFLOW ПОСТАВОК:**
|
**ПРИ WORKFLOW ПОСТАВОК:**
|
||||||
|
|
||||||
1. **SUPPLY_CHAIN_WORKFLOW.md** - Полный процесс
|
1. **SUPPLY_CHAIN_WORKFLOW.md** - Полный процесс
|
||||||
2. Релевантные **organization-types/*.md** - Роли участников
|
2. Релевантные **organization-types/\*.md** - Роли участников
|
||||||
3. **BUSINESS_RULES_CORE.md** - Правила доступа
|
3. **BUSINESS_RULES_CORE.md** - Правила доступа
|
||||||
|
|
||||||
#### АВТОМАТИЧЕСКИЕ ТРИГГЕРЫ ЧТЕНИЯ:
|
#### АВТОМАТИЧЕСКИЕ ТРИГГЕРЫ ЧТЕНИЯ:
|
||||||
|
|
||||||
- **Упоминание "создай компонент"** → MODULAR_ARCHITECTURE_PATTERN.md + COMPONENT_ARCHITECTURE.md
|
- **Упоминание "создай компонент"** → MODULAR_ARCHITECTURE_PATTERN.md + COMPONENT_ARCHITECTURE.md
|
||||||
- **Упоминание "новый компонент"** → MODULAR_ARCHITECTURE_PATTERN.md + COMPONENT_ARCHITECTURE.md
|
- **Упоминание "новый компонент"** → MODULAR_ARCHITECTURE_PATTERN.md + COMPONENT_ARCHITECTURE.md
|
||||||
- **Упоминание "архитектура"** → MODULAR_ARCHITECTURE_PATTERN.md
|
- **Упоминание "архитектура"** → MODULAR_ARCHITECTURE_PATTERN.md
|
||||||
@ -409,6 +559,7 @@ npx prisma studio # GUI для базы данных
|
|||||||
- **Упоминание "GraphQL"** → GRAPHQL_SCHEMA_RULES.md
|
- **Упоминание "GraphQL"** → GRAPHQL_SCHEMA_RULES.md
|
||||||
- **Упоминание "компонент"** → COMPONENT_ARCHITECTURE.md
|
- **Упоминание "компонент"** → COMPONENT_ARCHITECTURE.md
|
||||||
- **Упоминание "поставки"** → SUPPLY_CHAIN_WORKFLOW.md
|
- **Упоминание "поставки"** → SUPPLY_CHAIN_WORKFLOW.md
|
||||||
|
- **Упоминание "создай страницу", "новая страница", "создай форму", "новая форма", "создай таблицу", "новая таблица"** → АВТОМАТИЧЕСКИ применять модульную архитектуру
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -417,6 +568,7 @@ npx prisma studio # GUI для базы данных
|
|||||||
### ОТЧЕТНОСТЬ
|
### ОТЧЕТНОСТЬ
|
||||||
|
|
||||||
После выполнения всегда показывать:
|
После выполнения всегда показывать:
|
||||||
|
|
||||||
```
|
```
|
||||||
✅ СДЕЛАНО:
|
✅ СДЕЛАНО:
|
||||||
- Создал файл X
|
- Создал файл X
|
||||||
@ -433,11 +585,13 @@ npx prisma studio # GUI для базы данных
|
|||||||
### КОМАНДЫ ОТКАТА ЧЕРЕЗ КОММЕНТАРИИ
|
### КОМАНДЫ ОТКАТА ЧЕРЕЗ КОММЕНТАРИИ
|
||||||
|
|
||||||
#### Основная команда:
|
#### Основная команда:
|
||||||
|
|
||||||
```
|
```
|
||||||
"откати [описание] через комментарии"
|
"откати [описание] через комментарии"
|
||||||
```
|
```
|
||||||
|
|
||||||
**Примеры использования:**
|
**Примеры использования:**
|
||||||
|
|
||||||
- `"откати центрирование поиска через комментарии"`
|
- `"откати центрирование поиска через комментарии"`
|
||||||
- `"откати изменения кнопки через комментарии"`
|
- `"откати изменения кнопки через комментарии"`
|
||||||
- `"откати новую логику через комментарии"`
|
- `"откати новую логику через комментарии"`
|
||||||
@ -445,16 +599,15 @@ npx prisma studio # GUI для базы данных
|
|||||||
#### Алгоритм выполнения:
|
#### Алгоритм выполнения:
|
||||||
|
|
||||||
**ЭТАП 1: ВОССТАНОВЛЕНИЕ ИСХОДНОГО КОДА**
|
**ЭТАП 1: ВОССТАНОВЛЕНИЕ ИСХОДНОГО КОДА**
|
||||||
|
|
||||||
1. Найти измененный код в текущих файлах
|
1. Найти измененный код в текущих файлах
|
||||||
2. Извлечь исходный код из git истории
|
2. Извлечь исходный код из git истории
|
||||||
3. Восстановить исходную функциональность
|
3. Восстановить исходную функциональность
|
||||||
|
|
||||||
**ЭТАП 2: СОЗДАНИЕ СИСТЕМЫ ПЕРЕКЛЮЧЕНИЯ**
|
**ЭТАП 2: СОЗДАНИЕ СИСТЕМЫ ПЕРЕКЛЮЧЕНИЯ** 4. Оставить **Вариант 1** (исходный) - активным 5. Добавить **Вариант 2** (измененный) в комментариях 6. Добавить четкие описания для каждого варианта
|
||||||
4. Оставить **Вариант 1** (исходный) - активным
|
|
||||||
5. Добавить **Вариант 2** (измененный) в комментариях
|
|
||||||
6. Добавить четкие описания для каждого варианта
|
|
||||||
|
|
||||||
**Пример структуры кода:**
|
**Пример структуры кода:**
|
||||||
|
|
||||||
```jsx
|
```jsx
|
||||||
// Вариант 1: Исходный (активный)
|
// Вариант 1: Исходный (активный)
|
||||||
<div className="flex items-center justify-between">
|
<div className="flex items-center justify-between">
|
||||||
@ -470,11 +623,13 @@ npx prisma studio # GUI для базы данных
|
|||||||
```
|
```
|
||||||
|
|
||||||
#### Дополнительные команды:
|
#### Дополнительные команды:
|
||||||
|
|
||||||
- `"очисти комментарии"` - удалить закомментированные варианты
|
- `"очисти комментарии"` - удалить закомментированные варианты
|
||||||
- `"переключи на вариант 2"` - активировать закомментированный код
|
- `"переключи на вариант 2"` - активировать закомментированный код
|
||||||
- `"покажи варианты"` - показать доступные варианты
|
- `"покажи варианты"` - показать доступные варианты
|
||||||
|
|
||||||
#### ПРАВИЛА ПРИМЕНЕНИЯ:
|
#### ПРАВИЛА ПРИМЕНЕНИЯ:
|
||||||
|
|
||||||
- ✅ **Использовать для UI экспериментов** и небольших логических изменений
|
- ✅ **Использовать для UI экспериментов** и небольших логических изменений
|
||||||
- ✅ **Всегда добавлять четкие комментарии** с описанием вариантов
|
- ✅ **Всегда добавлять четкие комментарии** с описанием вариантов
|
||||||
- ✅ **Очищать комментарии перед финальным коммитом**
|
- ✅ **Очищать комментарии перед финальным коммитом**
|
||||||
@ -483,12 +638,14 @@ npx prisma studio # GUI для базы данных
|
|||||||
### ДОКУМЕНТИРОВАНИЕ ИЗМЕНЕНИЙ
|
### ДОКУМЕНТИРОВАНИЕ ИЗМЕНЕНИЙ
|
||||||
|
|
||||||
#### При любых изменениях документировать:
|
#### При любых изменениях документировать:
|
||||||
|
|
||||||
- **ЧТО** изменено (конкретные файлы и функции)
|
- **ЧТО** изменено (конкретные файлы и функции)
|
||||||
- **ПОЧЕМУ** изменено (обоснование решения)
|
- **ПОЧЕМУ** изменено (обоснование решения)
|
||||||
- **КТО** принял решение об изменении (пользователь/автоматически)
|
- **КТО** принял решение об изменении (пользователь/автоматически)
|
||||||
- **КОГДА** изменено (временная метка)
|
- **КОГДА** изменено (временная метка)
|
||||||
|
|
||||||
**Формат документирования:**
|
**Формат документирования:**
|
||||||
|
|
||||||
```
|
```
|
||||||
📝 ИЗМЕНЕНИЕ ЗАФИКСИРОВАНО:
|
📝 ИЗМЕНЕНИЕ ЗАФИКСИРОВАНО:
|
||||||
- ДАТА: [когда]
|
- ДАТА: [когда]
|
||||||
@ -500,11 +657,13 @@ npx prisma studio # GUI для базы данных
|
|||||||
### АНАЛИЗ ПРИМЕРОВ КОДА
|
### АНАЛИЗ ПРИМЕРОВ КОДА
|
||||||
|
|
||||||
#### Трехуровневый анализ примеров:
|
#### Трехуровневый анализ примеров:
|
||||||
|
|
||||||
1. **📋 СОДЕРЖАТЕЛЬНЫЙ** - что делает код (функциональность, логика, данные)
|
1. **📋 СОДЕРЖАТЕЛЬНЫЙ** - что делает код (функциональность, логика, данные)
|
||||||
2. **🏗️ АРХИТЕКТУРНЫЙ** - как организован (структура, взаимосвязи, позиционирование)
|
2. **🏗️ АРХИТЕКТУРНЫЙ** - как организован (структура, взаимосвязи, позиционирование)
|
||||||
3. **🎨 СТИЛЕВОЙ** - как выглядит (CSS классы, анимации, цвета)
|
3. **🎨 СТИЛЕВОЙ** - как выглядит (CSS классы, анимации, цвета)
|
||||||
|
|
||||||
#### Алгоритм анализа примера:
|
#### Алгоритм анализа примера:
|
||||||
|
|
||||||
1. **Прочитать** весь код компонента-примера
|
1. **Прочитать** весь код компонента-примера
|
||||||
2. **Понять архитектуру** - где элемент размещен относительно других
|
2. **Понять архитектуру** - где элемент размещен относительно других
|
||||||
3. **Понять логику** - почему именно так структурировано
|
3. **Понять логику** - почему именно так структурировано
|
||||||
@ -512,6 +671,7 @@ npx prisma studio # GUI для базы данных
|
|||||||
5. **Проверить** соответствие правилам проекта
|
5. **Проверить** соответствие правилам проекта
|
||||||
|
|
||||||
#### Стоп-вопросы перед реализацией:
|
#### Стоп-вопросы перед реализацией:
|
||||||
|
|
||||||
- "Понимаю ли я **архитектуру** этого решения?"
|
- "Понимаю ли я **архитектуру** этого решения?"
|
||||||
- "Где именно должен располагаться элемент в **общей структуре**?"
|
- "Где именно должен располагаться элемент в **общей структуре**?"
|
||||||
- "Какова **семантическая роль** этого элемента?"
|
- "Какова **семантическая роль** этого элемента?"
|
||||||
@ -524,12 +684,14 @@ npx prisma studio # GUI для базы данных
|
|||||||
**CASE STUDY: Ошибка с плавающей кнопкой из UI Kit**
|
**CASE STUDY: Ошибка с плавающей кнопкой из UI Kit**
|
||||||
|
|
||||||
**❌ ОШИБКА**: При добавлении кнопки "🌟 Вариант 1: Плавающая кнопка слева":
|
**❌ ОШИБКА**: При добавлении кнопки "🌟 Вариант 1: Плавающая кнопка слева":
|
||||||
|
|
||||||
1. **Поверхностный анализ**: Скопировал только стили кнопки
|
1. **Поверхностный анализ**: Скопировал только стили кнопки
|
||||||
2. **Игнорирование архитектуры**: Не заметил, что кнопка в **отдельном контейнере**
|
2. **Игнорирование архитектуры**: Не заметил, что кнопка в **отдельном контейнере**
|
||||||
3. **Неправильное размещение**: Добавил как часть блока контента
|
3. **Неправильное размещение**: Добавил как часть блока контента
|
||||||
4. **Непонимание термина**: "Плавающая" = независимая от контента, между элементами
|
4. **Непонимание термина**: "Плавающая" = независимая от контента, между элементами
|
||||||
|
|
||||||
#### ОБЯЗАТЕЛЬНЫЙ ЧЕК-ЛИСТ ДЛЯ UI KIT КОМПОНЕНТОВ:
|
#### ОБЯЗАТЕЛЬНЫЙ ЧЕК-ЛИСТ ДЛЯ UI KIT КОМПОНЕНТОВ:
|
||||||
|
|
||||||
```
|
```
|
||||||
🔍 ПЕРЕД РЕАЛИЗАЦИЕЙ:
|
🔍 ПЕРЕД РЕАЛИЗАЦИЕЙ:
|
||||||
□ Прочитал ВЕСЬ код компонента-примера
|
□ Прочитал ВЕСЬ код компонента-примера
|
||||||
@ -541,12 +703,14 @@ npx prisma studio # GUI для базы данных
|
|||||||
```
|
```
|
||||||
|
|
||||||
#### АНТИ-ПАТТЕРНЫ:
|
#### АНТИ-ПАТТЕРНЫ:
|
||||||
|
|
||||||
- **"Быстрое копирование"** - копировать стили без понимания архитектуры
|
- **"Быстрое копирование"** - копировать стили без понимания архитектуры
|
||||||
- **"Частичный анализ"** - читать только нужную часть кода
|
- **"Частичный анализ"** - читать только нужную часть кода
|
||||||
- **"Буквальное применение"** - использовать без адаптации к контексту
|
- **"Буквальное применение"** - использовать без адаптации к контексту
|
||||||
- **"Игнорирование контейнеров"** - не обращать внимание на DOM-структуру
|
- **"Игнорирование контейнеров"** - не обращать внимание на DOM-структуру
|
||||||
|
|
||||||
#### ПРАВИЛЬНЫЕ ПАТТЕРНЫ:
|
#### ПРАВИЛЬНЫЕ ПАТТЕРНЫ:
|
||||||
|
|
||||||
- **"Архитектурный анализ первым"** - понять структуру, потом стили
|
- **"Архитектурный анализ первым"** - понять структуру, потом стили
|
||||||
- **"Контекстная адаптация"** - применять принципы, а не код буквально
|
- **"Контекстная адаптация"** - применять принципы, а не код буквально
|
||||||
- **"Семантическое понимание"** - осознавать роль каждого элемента
|
- **"Семантическое понимание"** - осознавать роль каждого элемента
|
||||||
@ -572,11 +736,13 @@ npx prisma studio # GUI для базы данных
|
|||||||
### РАБОТА С КОНТЕКСТОМ
|
### РАБОТА С КОНТЕКСТОМ
|
||||||
|
|
||||||
#### Файлы контекста:
|
#### Файлы контекста:
|
||||||
|
|
||||||
- **current-session.md** - текущие задачи и решения
|
- **current-session.md** - текущие задачи и решения
|
||||||
- **CLAUDE.md** - эти правила (загружаются автоматически)
|
- **CLAUDE.md** - эти правила (загружаются автоматически)
|
||||||
- **TodoWrite** - инструмент для отслеживания задач
|
- **TodoWrite** - инструмент для отслеживания задач
|
||||||
|
|
||||||
#### При потере контекста:
|
#### При потере контекста:
|
||||||
|
|
||||||
1. Прочитать current-session.md
|
1. Прочитать current-session.md
|
||||||
2. Проверить TodoWrite
|
2. Проверить TodoWrite
|
||||||
3. Спросить у пользователя о текущей задаче
|
3. Спросить у пользователя о текущей задаче
|
||||||
@ -584,7 +750,8 @@ npx prisma studio # GUI для базы данных
|
|||||||
---
|
---
|
||||||
|
|
||||||
# Важные напоминания для Claude Code
|
# Важные напоминания для Claude Code
|
||||||
|
|
||||||
Делай только то, что просят; ни больше, ни меньше.
|
Делай только то, что просят; ни больше, ни меньше.
|
||||||
НИКОГДА не создавай файлы, если они не абсолютно необходимы для достижения цели.
|
НИКОГДА не создавай файлы, если они не абсолютно необходимы для достижения цели.
|
||||||
ВСЕГДА отдавай предпочтение редактированию существующего файла, а не созданию нового.
|
ВСЕГДА отдавай предпочтение редактированию существующего файла, а не созданию нового.
|
||||||
НИКОГДА не создавай проактивно файлы документации (*.md) или README файлы. Создавай файлы документации только по явной просьбе пользователя.
|
НИКОГДА не создавай проактивно файлы документации (\*.md) или README файлы. Создавай файлы документации только по явной просьбе пользователя.
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# 🏗️ Паттерн модульной архитектуры для React компонентов
|
# 🏗️ Паттерн модульной архитектуры для React компонентов
|
||||||
|
|
||||||
> ⚠️ **ОФИЦИАЛЬНЫЙ СТАНДАРТ АРХИТЕКТУРЫ SFERA**
|
> ⚠️ **ОФИЦИАЛЬНЫЙ СТАНДАРТ АРХИТЕКТУРЫ SFERA**
|
||||||
> Этот документ описывает **ОБЯЗАТЕЛЬНУЮ** архитектуру для всех новых компонентов >500 строк и рефакторинга существующих >800 строк.
|
> Этот документ описывает **ОБЯЗАТЕЛЬНУЮ** модульную архитектуру по умолчанию для большинства компонентов в системе SFERA.
|
||||||
|
|
||||||
## 🎯 СТАТУС АРХИТЕКТУРНОГО СТАНДАРТА
|
## 🎯 СТАТУС АРХИТЕКТУРНОГО СТАНДАРТА
|
||||||
|
|
||||||
@ -12,13 +12,79 @@
|
|||||||
|
|
||||||
### 📋 ПРАВИЛА ПРИМЕНЕНИЯ:
|
### 📋 ПРАВИЛА ПРИМЕНЕНИЯ:
|
||||||
|
|
||||||
1. **ВСЕ НОВЫЕ КОМПОНЕНТЫ >500 строк** → создавать по модульной архитектуре
|
#### ✅ ВСЕГДА МОДУЛЬНАЯ АРХИТЕКТУРА (без исключений):
|
||||||
2. **Существующие компоненты >800 строк** → рефакторить по возможности
|
|
||||||
3. **Обязательно использовать** этот паттерн для компонентов dashboard, creation, management
|
|
||||||
|
|
||||||
## 🎯 Применимость паттерна
|
**1. Страницы и основные разделы:**
|
||||||
|
|
||||||
### Кандидаты для рефакторинга:
|
- ВСЕ файлы `page.tsx` в `/app/**/`
|
||||||
|
- ВСЕ дашборды любых типов
|
||||||
|
- ВСЕ разделы управления (supplies, employees, products, settings)
|
||||||
|
- ВСЕ wizard/multi-step компоненты
|
||||||
|
|
||||||
|
**2. Формы (даже простые!):**
|
||||||
|
|
||||||
|
- ЛЮБАЯ форма создания/редактирования сущности
|
||||||
|
- Формы с >3 полей
|
||||||
|
- Многошаговые формы
|
||||||
|
- Формы с динамическими полями
|
||||||
|
- _Почему: формы ВСЕГДА разрастаются (валидация, автозаполнение, зависимые поля)_
|
||||||
|
|
||||||
|
**3. Таблицы и списки:**
|
||||||
|
|
||||||
|
- ЛЮБАЯ таблица с данными из БД
|
||||||
|
- Таблицы с фильтрацией/сортировкой
|
||||||
|
- Таблицы с inline-редактированием
|
||||||
|
- Списки с действиями (approve/reject/delete)
|
||||||
|
- _Почему: всегда добавятся фильтры, сортировка, экспорт, bulk-операции_
|
||||||
|
|
||||||
|
**4. Комплексные компоненты:**
|
||||||
|
|
||||||
|
- Чаты/мессенджеры
|
||||||
|
- Календари/планировщики
|
||||||
|
- Графики/аналитика
|
||||||
|
- Файловые менеджеры
|
||||||
|
- Корзины/калькуляторы
|
||||||
|
|
||||||
|
#### ❌ ИСКЛЮЧЕНИЯ (только эти остаются простыми):
|
||||||
|
|
||||||
|
1. **Чистые UI из Radix/shadcn** - уже оптимизированы
|
||||||
|
2. **Stateless компоненты** < 50 строк без логики
|
||||||
|
3. **Чистые Layout** компоненты (Header/Footer)
|
||||||
|
4. **Utility компоненты** (ErrorBoundary, LoadingState)
|
||||||
|
5. **Простые модалки** подтверждения (Да/Нет)
|
||||||
|
|
||||||
|
## 🎯 КЛЮЧЕВОЕ ПРАВИЛО SFERA
|
||||||
|
|
||||||
|
> **"Если сомневаешься - делай модульным. Лучше иметь избыточную структуру папок, чем 2000-строчный спагетти-код через месяц."**
|
||||||
|
|
||||||
|
### 📏 Критерии принятия решения:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
// Алгоритм принятия решения о модульности
|
||||||
|
function shouldUseModularArchitecture(component) {
|
||||||
|
// Автоматически ДА
|
||||||
|
if (
|
||||||
|
component.type === 'page' ||
|
||||||
|
component.type === 'dashboard' ||
|
||||||
|
component.type === 'form' ||
|
||||||
|
component.type === 'table' ||
|
||||||
|
component.expectedSize > 300
|
||||||
|
) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// Проверяем сложность
|
||||||
|
const complexityScore =
|
||||||
|
component.stateVariables + // количество useState
|
||||||
|
component.apiCalls * 2 + // API вызовы весят больше
|
||||||
|
component.formFields + // поля форм
|
||||||
|
(component.hasBusinessLogic ? 3 : 0) // бизнес-логика
|
||||||
|
|
||||||
|
return complexityScore >= 5
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Кандидаты для рефакторинга (legacy компонентов):
|
||||||
|
|
||||||
- **Размер**: >800 строк кода
|
- **Размер**: >800 строк кода
|
||||||
- **Сложность**: Множественные состояния и бизнес-логика
|
- **Сложность**: Множественные состояния и бизнес-логика
|
||||||
@ -287,10 +353,11 @@ function MainComponent() {
|
|||||||
|
|
||||||
### Перед началом
|
### Перед началом
|
||||||
|
|
||||||
- [ ] Компонент больше 800 строк
|
- [ ] Компонент относится к категории: page, form, table, dashboard
|
||||||
- [ ] Есть несколько логических секций UI
|
- [ ] ИЛИ ожидаемый размер >300 строк
|
||||||
- [ ] Множественные useState и useEffect
|
- [ ] ИЛИ сложность по алгоритму ≥5 баллов
|
||||||
- [ ] Активно развивающийся функционал
|
- [ ] ИЛИ есть несколько логических секций UI
|
||||||
|
- [ ] ИЛИ множественные useState и useEffect
|
||||||
|
|
||||||
### Планирование
|
### Планирование
|
||||||
|
|
||||||
@ -324,10 +391,28 @@ function MainComponent() {
|
|||||||
|
|
||||||
## 🎯 Заключение
|
## 🎯 Заключение
|
||||||
|
|
||||||
Модульная архитектура значительно улучшает качество кода, скорость разработки и поддержки. Применяйте этот паттерн к большим компонентам постепенно, следуя принципам безопасного рефакторинга.
|
Модульная архитектура по умолчанию значительно улучшает качество кода, скорость разработки и поддержки в долгосрочной перспективе. В SFERA мы применяем принцип "лучше переструктурировать сразу, чем рефакторить потом".
|
||||||
|
|
||||||
|
### 🎯 Практические примеры применения:
|
||||||
|
|
||||||
|
**Модульные (новые стандарты):**
|
||||||
|
|
||||||
|
- `/app/suppliers/create/page.tsx` → CreateSupplierPage/
|
||||||
|
- `EmployeeManagementTable` → EmployeeManagement/
|
||||||
|
- `SupplyOrderForm` → SupplyOrderForm/
|
||||||
|
- `ProductCatalog` → ProductCatalog/
|
||||||
|
- `UserSettingsForm` → UserSettingsForm/
|
||||||
|
|
||||||
|
**Простые (исключения):**
|
||||||
|
|
||||||
|
- `Logo.tsx`
|
||||||
|
- `LoadingDots.tsx`
|
||||||
|
- `ConfirmDialog.tsx`
|
||||||
|
- `PriceDisplay.tsx`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**Основано на**: Успешном рефакторинге create-suppliers-supply-page.tsx (1,467→240 строк)
|
**Основано на**: Успешном рефакторинге create-suppliers-supply-page.tsx (1,467→240 строк)
|
||||||
|
**Обновлено**: Синхронизировано с правилами CLAUDE.md
|
||||||
**Автор паттерна**: Claude Code
|
**Автор паттерна**: Claude Code
|
||||||
**Дата**: Август 2025
|
**Дата**: Август 2025
|
||||||
|
Reference in New Issue
Block a user