3.0 KiB
3.0 KiB
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 | C1–C4 | internal/config |
| A | A1–A4 | internal/analyst; A (app): A1–A4 в internal/app |
| M | M1–M5 | internal/chat |
| D | D1–D5 | internal/core (ErrDecideFailed, ErrMaxTurns, ErrCommandUnknown…) |
| O | O1–O5 | internal/opencode |
| S | S1–S5 | internal/storage |
| W | W1–W5 | internal/worker |
| E | E1–E4 | internal/worker (репозитории) |
| R | R1–R6 | internal/worker/review_errors.go |
| U | U1–U6 | 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.