# Django

### DJA-001: Файлы Poetry
`pyproject.toml` и `poetry.lock` НЕ ДОЛЖНЫ создаваться или редактироваться вручную; они ДОЛЖНЫ появляться и обновляться только через команды Poetry.

### DJA-002: Добавление зависимостей
Зависимости ДОЛЖНЫ добавляться только командой: `poetry add <package>`. Ручное редактирование `pyproject.toml` и `poetry.lock` запрещено.

### DJA-003: Создание миграций
Миграции ДОЛЖНЫ создаваться командой: `poetry run python manage.py makemigrations`. Локально применять при необходимости командой: `poetry run python manage.py migrate`. Ручное создание файлов миграций запрещено. Применение миграций выполняется на стенде Dokploy при старте контейнера.

### DJA-004: Сборка и запуск
Сборка ДОЛЖНА выполняться через Nixpacks на Dokploy. Старт-команда в `nixpacks.toml` ДОЛЖНА включать автоматическое применение миграций (`python manage.py migrate && gunicorn...`).


---

# Nuxt

### NXT-001: Добавление модулей
Nuxt модули ДОЛЖНЫ добавляться командой `npx nuxi module add <module>`. Пример: `npx nuxi module add @nuxtjs/eslint-module`.

### NXT-002: Запрет редактирования package.json
ИИ НЕ ДОЛЖЕН редактировать `package.json`, `package-lock.json`.

### NXT-003: Использование сгенерированной схемы
Сгенерированная схема (`composables/graphql/generated.ts`) ДОЛЖНА использоваться для всех GraphQL операций.

### NXT-004: Storybook для компонентов
Все компоненты ДОЛЖНЫ быть зарегистрированы в Storybook.

### NXT-005: Использование @nuxt/eslint
Все Nuxt проекты ДОЛЖНЫ использовать модуль `@nuxt/eslint` для проверки кода.

### NXT-006: GraphQL документы
Все GraphQL операции (queries, mutations) ДОЛЖНЫ храниться в `.graphql` файлах и подключаться как документы, а не через импорт схемы в код.

### NXT-007: Codegen из удалённой схемы
GraphQL codegen ДОЛЖЕН выполняться командой `npm run codegen`, брать СХЕМУ ТОЛЬКО УДАЛЁННУЮ для hot-gen (локальную схему НЕ берём) и использовать локальные `.graphql` документы (`graphql/operations/**/*.graphql`, компоненты/компосеблы); сгенерированные файлы ДОЛЖНЫ коммититься для повторного использования другими фронтами.

### NXT-008: Один документ — один файл
Каждый GraphQL документ (query/mutation/subscription/fragment) ДОЛЖЕН храниться в отдельном `.graphql` файле; НЕ СКЛАДЫВАТЬ несколько документов в один файл.

### NXT-009: Использование документов в коде
В коде ДОЛЖНЫ использоваться документы из `.graphql` файлов и их сгенерированные TypedDocumentNode/хелперы (а не строковые запросы); импортируем только готовые операции из `graphql/operations`.

### NXT-010: Apollo + codegen
Фронт ДОЛЖЕН использовать Apollo Client/`@vue/apollo-composable`, а codegen ДОЛЖЕН быть настроен под Apollo (typed-document-node) и опираться на `.graphql` документы.


---

# Odoo

### ODO-001: Установка модулей

Установка Odoo модулей ДОЛЖНА выполняться через playbook `odoo_install_modules.yml`

### ODO-002: Обновление модулей

Обновление Odoo модулей ДОЛЖНО выполняться через playbook `odoo_update_modules.yml`


---

# Внешние API

### API-001: Коллекции в Bruno

Коллекции внешних API ДОЛЖНЫ быть созданы и протестированы в Bruno перед интеграцией

### API-002: Артефакты ответов

Примеры ответов API ДОЛЖНЫ быть сохранены для генерации типов данных

---

# Инфраструктура

### INF-001: Демонстрационный стенд Dokploy
Проект НЕ разворачивается локально; полностью работоспособный стенд (включая домены) ДОЛЖЕН работать на Dokploy, сборка и публикация выполняются только через Dokploy Nixpacks.

### INF-002: Git push после каждой задачи
После завершения задачи ДОЛЖЕН выполняться `git push`; Dokploy ДОЛЖЕН забирать изменения по webhook и запускать сборку.

### INF-003: Nixpacks + webhook
Приложения ДОЛЖНЫ собираться через Nixpacks на Dokploy и слушать webhook репозитория.

### INF-005: Ansible inventory
В inventory ДОЛЖНЫ храниться названия Docker контейнеров для доступа к базе и ресурсам.

### INF-006: Мониторинг ошибок
Все проекты ДОЛЖНЫ быть подключены к GlitchTip (bugs.dsrptlab.com); проверка ошибок через playbook `glitchtip_check_errors.yml`.

### INF-009: Локальные команды через nix develop
Локальные операции для Django выполняются в venv Poetry через `poetry run <cmd>` (или `poetry add` для зависимостей). Для других стеков см. их разделы.
