Files
ratatoskr-go/.serena/memories/conventions.md
ki.sagidullin 5c82229a00
Some checks failed
CI / test (pull_request) Failing after 1m13s
CI / build-and-package (amd64, linux) (pull_request) Failing after 1m2s
CI / build-and-package (amd64, windows) (pull_request) Successful in 28s
chore(serena): обновить память проекта (onboarding)
2026-08-21 00:08:45 +05:00

3.0 KiB
Raw Permalink Blame History

conventions

Стиль / кодстайл

  • Стандартный Go-стиль; gofmt/go fmt ./.... Документация-комментарии и package-doc на русском языке.
  • Типизация: строгие типы, интерфейсы для абстракций (Decider, ui.Store, events.Event, chat.Channel).
  • Свой тип config.Duration для времени (YAML-строки "5s"/"10m"), метод .Duration().
  • UI: uni-directional data flow — UI читает снапшоты (копии, ui.Store), не мутирует storage/core. Ядро публикует события в events.Bus, UI подписывается events.Hub → колбэки в UI-поток через fyne.Do.

Обработка ошибок

  • Ошибки классифицируются по идентификаторам классов в исходниках (см. ниже).
  • Ошибка-обёртка: fmt.Errorf("%w: %v", ErrXxx, err).
  • errors.Join для склейки нескольких ошибок валидации (config.Validate).

Классы ошибок (маркируются в коде, документированы в README)

Блок Коды Где
C C1C4 internal/config
A A1A4 internal/analyst; A (app): A1A4 в internal/app
M M1M5 internal/chat
D D1D5 internal/core (ErrDecideFailed, ErrMaxTurns, ErrCommandUnknown…)
O O1O5 internal/opencode
S S1S5 internal/storage
W W1W5 internal/worker
E E1E4 internal/worker (репозитории)
R R1R6 internal/worker/review_errors.go
U U1U6 internal/update

Архитектурные конвенции

  • Composition root — internal/app; подсистемы собираются там. UI-окно создаётся через newUIWindow(store) (build-tag: cgo → desktop.New, !cgo → nil/headless). Флаг --noui выключает окно.
  • Слои: model (домен) ← storage/events/UI зависят только от model; core не знает про UI.
  • Агенты (analyst.md/dev.md/reviewer.md) — markdown-промпты, go:embed, распаковка в config_dir. Вердикт — строгий JSON.
  • Репо-клонирование/воркеры — через gitops; ветки задач feat/<taskTag> (см. mem:core).
  • Обратная совместимость: поле Repo (одиночный) и Repos (список); EffectiveRepos/ SetReposFromDB/ReposJoined в storage/models.go.

Версии

  • app.Version — семантическая major.minor.patch (ручной инкремент: patch=фиксы, minor=новая обратно-совместимая функциональность, major=несовместимые изменения). Сейчас 0.2.2.
  • main.version (ldflag) — build-идентификатор commit-<sha7>, отдельно от app.Version.