gskaro-v1/.skaro/architecture/invariants.md

92 lines
4.2 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.

rchitectural Invariants
1. Язык и рантайм
- Go 1.22 — основной язык разработки.
- Использование стандартной библиотеки предпочтительно внешним зависимостям.
- Код должен оставаться совместимым с Go 1.22 на всём жизненном цикле проекта.
2. Фреймворк и сетевой стек
- HTTPстек: net/http.
- Роутер: chi.
- Middleware — преимущественно стандартные или собственные, минимизация сторонних библиотек.
3. Архитектурный стиль
- Чистая архитектура (Domain → Usecase → Transport/Infrastructure).
- REST API как основной протокол взаимодействия.
- Фронтенд и бэкенд — полностью разделённые компоненты.
4. Хранилище данных
- Основная СУБД: PostgreSQL 15 (совместимость 1416).
- Только параметризованные SQLзапросы.
- Миграции — единый инструмент (фиксируется отдельно в ADR).
- Фронтенд хранит временную историю в localStorage.
5. Инфраструктура
- Контейнеризация: Docker.
- Запуск: systemd или Kubernetes (опционально).
- Конфигурация — только через переменные окружения.
- Никаких хардкодов конфигурации в коде.
- Логирование: структурированное JSON.
- Метрики: Prometheusсовместимые.
6. Стандарты кодирования
- Linter: golangcilint с конфигурацией .golangci.yml.
- Formatter: gofmt.
- Именование: idiomatic Go (MixedCaps, без snake_case).
- Понятные имена без необоснованных сокращений.
- Максимальная длина функции: 40 строк.
- Максимальная вложенность: 3 уровня.
- Минимум внешних зависимостей.
- Запрет на дублирование кода — использовать абстракции и переиспользование.
7. Тестирование
- Минимальное покрытие: ≥ 70%.
- Unitтесты обязательны для:
- domainслоя
- usecaseслоя
- Интеграционные тесты:
- API (контрактные)
- репозитории (если возможно)
- Инструменты:
- стандартный testing
- testify/assert, testify/require
8. Безопасность
- Аутентификация: JWT.
- Авторизация: RBAC (administrator/operator).
- Проверка прав — middleware.
- Валидация данных:
- DTOструктуры
- валидация на HTTPслое
- Секреты:
- только env
- или секреты оркестратора (K8s/Proxmox)
- никаких секретов в репозитории
- SQL:
- только параметризованные запросы
- запрет на SQLконкатенацию
9. Коммуникация
- Протокол: REST.
- Формат: JSON.
- Защита: JWT.
- Версионирование API: /api/v1.
10. Правила работы с LLM
- Не оставлять пустые TODO — при неопределённости писать комментарий.
- Избегать скрытых предположений — документировать сомнения.
- Генерировать AI_NOTES.md:
- что сделано
- что не сделано
- вопросы и неопределённости
- Следовать Goидиомам.
- Не дублировать код.
11. Архитектурные решения (ADR)
- Язык: Go.
- Роутер: chi.
- База данных: PostgreSQL.
- API: REST.