Files
MES_Core/.trae/rules/main.md
2026-04-23 08:49:26 +03:00

72 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AI_RULES — MES_Core
Роль: Senior Django Backend Developer.
Контекст: miniMES / оперативное управление производством для металлообработки. Приложения: warehouse, manufacturing, shiftflow.
## MUST — правила, которые нельзя нарушать
### Коммуникация
- Писать по‑русски.
### Workflow изменений
- Сначала читать целевой файл, затем предлагать правки.
- Сложная логика живёт в services (service layer), views остаются тонкими.
- Для правок существующих файлов: всегда показывать diffпревью и ждать принятия.
### Новые файлы
- Для новых файлов всегда давать: полное имя + абсолютный путь + полный контент одним блоком.
### Безопасность
- Никогда не логировать/не печатать: SECRET_KEY, пароли БД, токены.
- В logs — только тех. сообщения/ошибки/диагностика без секретов.
- Для важных справочников/истории в models использовать on_delete=models.PROTECT.
### Транзакции и гонки (warehouse/shiftflow)
- Любые операции списания/начисления/перемещений — в transaction.atomic().
- Изменяемые складские остатки блокировать через select_for_update().
- Избегать N+1: select_related/prefetch_related, bulk операции — только где безопасно.
### Роли и доступ
- Роли приложения — Django Groups (мульти‑роли). Имена групп совпадают с кодами ролей: operator/master/technologist/clerk/supply/prod_head/director/observer/admin.
- Проверка доступа во вьюхах: has_any_role(roles, [...]). primary_role — только для UI.
- На этапе миграции допускается fallback на EmployeeProfile.role, но новые правки ориентировать на группы.
### Логи
- Для внутренних функций/сервисов: logger = logging.getLogger('mes').
- Перед выполнением: logger.info('fn:start ...').
- После успеха: logger.info('fn:done ...').
- Ошибки: logger.exception('fn:error ...') и пробрасывать дальше.
### Release discipline (версия и changelog)
- После каждого принятого набора правок:
- Обновить CHANGELOG.md в секции [Unreleased] (Added/Changed/Fixed).
- В конце ответа всегда писать: “Нужно ли поднять версию? Рекомендация: …”.
- Правило bump (SemVer):
- UI/шаблоны/стили/тексты → PATCH (x.y.Z).
- Логика/вьюхи/сервисы/модели/миграции/доступы → MINOR (x.Y.0).
- Изменения данных/совместимости → обсудить MAJOR (X.0.0), даже если проект ещё в 0.x.
## SHOULD — правила, которые желательно соблюдать
### Комментарии
- Python/бекенд: добавлять поясняющие комментариии там, где они нужны, без личных формулировок.
- Везде добавлять докстринги (docstrings) для функций, классов, модулей, и т.д.
- Везде добавлять комментарии к коду, где они нужны, без личных формулировок.
- Django HTMLшаблоны: не добавлять templateкомментарии ({# ... #}).
### Стиль и конвенции
- Держаться стиля соседних файлов (структура, именование, импорты, форматирование).
- Не добавлять новые библиотеки/фреймворки, пока не подтверждено, что они уже используются.
### UI
- Если добавляется новая UIтаблица — по умолчанию делать сортируемой (если это не мешает UX).
### Назначение станков и цехов пользователю
- Привязка через профиль сотрудника:
- Machines: закреплённые станки (для операторов).
- Allowed workshops: доступные цеха (ограничение видимости/действий).
- Is readonly: режим “только просмотр”.