Сохраняем онбоардинг-память проекта (core, tech_stack, conventions, suggested_commands, task_completion) в .serena и коммитим служебную директорию, чтобы она была доступна на сервере. Директория НЕ исключена в .gitignore (локально исключаются только cache и project.local.yml).
2.5 KiB
2.5 KiB
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/<taskTag>(см. mem:core). - Обратная совместимость: поле
Repo(одиночный) иRepos(список); EffectiveRepos/ SetReposFromDB/ReposJoined в storage/models.go.
Версии
app.Version— семантическая major.minor.patch (ручной инкремент: patch=фиксы, minor=новая обратно-совместимая функциональность, major=несовместимые изменения).main.version(ldflag) — build-идентификаторcommit-<sha7>, отдельно от app.Version.