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

4.2 KiB
Raw Blame History

rchitectural Invariants

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