# conventions ## Стиль / кодстайл - Стандартный Go-стиль; гофм `gofmt`/`go fmt ./...`. Документация-комментарии и package-doc на русском языке (в START-комментариях файлов и doc-комментариях). - Типизация: строгие типы, интерфейсы для абстракций (Decider, LiveProber). - Свой тип `config.Duration` для времени (YAML-строки "5s"/"10m"), метод `.Duration()`. ## Обработка ошибок - Ошибки классифицируются по идентификаторам классов в исходниках (см. ниже). - Ошибка-обёртка: `fmt.Errorf("%w: %v", ErrXxx, err)`. - `errors.Join` для склейки нескольких ошибок валидации (config.Validate). ## Классы ошибок (маркируются в коде, документированы в README) | Блок | Коды | Где | |---|---|---| | C | C1–C4 | internal/config | | A | A1–A4 | internal/analyst | | M | M1–M5 | internal/chat | | O | O1–O4 | 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; подсистемы собираются там, лимиты Core (MaxTurns=15, MaxConfirmCycles=3, MaxQuestionsPerTurn=5) в core.New. - **Агенты** (analyst.md/dev.md/reviewer.md) — markdown-промпты, встроены через go:embed (internal/agents/*.md + embed.go), распаковываются в config_dir. Вердикт — строгий JSON. - Репо-клонирование/воркеры — через gitops; ветки задач `feat/` (см. mem:core). - Обратная совместимость: поле `Repo` (одиночный) и `Repos` (список); EffectiveRepos/ SetReposFromDB/ReposJoined в storage/models.go. ## Версии - `app.Version` — семантическая major.minor.patch (ручной инкремент: patch=фиксы, minor=новая обратно-совместимая функциональность, major=несовместимые изменения). - `main.version` (ldflag) — build-идентификатор `commit-`, отдельно от app.Version.