# Процесс разработки

> Инструкция по выполнению работ в проекте **Pupoxide**.
> Ссылки: [Техническое видение](vision.md), [Соглашения](conventions.md), [План задач](tasklist.md).

## Основные принципы

### Итеративный подход
- Вся работа разбивается на итерации в [tasklist.md](tasklist.md).
- Каждая итерация должна приближать проект к [видению](vision.md).
- **Важно**: После завершения итерации необходимо получить подтверждение пользователя.

### Гексагональная архитектура
- Строгое соблюдение слоев: `Domain` -> `Infrastructure` -> `Application` -> `Interface`.
- Направление зависимостей всегда внутрь: Domain — это ядро, которое ничего не знает о внешнем мире.
- Использование **Ports** (traits в Domain) и **Adapters** (их реализация в Infrastructure).

## Алгоритм работы

### 1. Подготовка и Анализ
- [ ] Выбрать задачу из [tasklist.md](tasklist.md).
- [ ] Оценить, какие Ports (traits) понадобятся в Domain.
- [ ] Проверить соответствие [conventions.md](conventions.md).

### 2. Проектирование (RFC)
- [ ] Сформулировать решение в терминах слоев и их взаимодействия.
- [ ] **ОБЯЗАТЕЛЬНО**: Согласовать план с пользователем.

### 3. Реализация
- [ ] Реализовать доменные сущности и **Ports** (traits) в `src/domain/`.
- [ ] **ПРОВЕРКА**: Убедиться в отсутствии лишних зависимостей в `src/domain/` (Domain Purity).
- [ ] Реализовать бизнес-логику в `src/application/`.
- [ ] Реализовать **Adapters** в `src/infrastructure/`.
- [ ] Подключить все в `src/interface/` и `main.rs`.

### 4. Тестирование и Качество
- [ ] Написать unit-тесты (особенно для Domain).
- [ ] Проверить отсутствие `unwrap()`.
- [ ] Запустить `cargo test && cargo clippy`.

### 5. Завершение
- [ ] Обновить [tasklist.md](tasklist.md).
- [ ] Создать Walkthrough.

## Шаблон согласования (для ИИ)

```markdown
## Итерация X: [Название]

### Архитектурное решение:
[Описание взаимодействия Domain Ports и Infrastructure Adapters]

### План изменений:
- [ ] `src/domain/...`: [Ports/Traits/Entities]
- [ ] `src/infrastructure/...`: [Adapters/DB/IO]
- [ ] `src/application/...`: [Use Cases]

Согласны с таким подходом?
```

## Запрещенные действия
- ❌ Нарушение Domain Purity (зависимости в Domain).
- ❌ Использование типов Infrastructure (например, SeaORM моделей) в Domain.
- ❌ Использование `unwrap()` вне тестов.

