Перейти к содержанию

Участие в разработке

Agate — это рабочее пространство Rust, следующее Domain-Driven Design и Clean Architecture. Полный контракт для участников — человека или агента — находится в AGENTS.md в корне репозитория. Эта страница резюмирует основное и ссылается на Руководство по документации.

Соглашения

  • Conventional Commits для сообщений коммитов и заголовков PR: feat:, fix:, refactor:, test:, docs:, chore:, ci:.
  • Код и идентификаторы — на английском. Содержимое документации — двуязычное (английский — основной, русский — вторичный) — см. Руководство по документации.
  • Слой домена остаётся чистым (без async, без I/O, без фреймворков); публичные типы конструируются через свои фабрики; правило зависимостей соблюдается.

Локальный гейт качества

CI и git-хуки вызывают одни и те же рецепты just (единый источник истины):

just            # список рецептов
just fmt        # форматирование (rustfmt)
just lint       # строгий clippy (-D warnings)
just test-all   # тесты со всеми фичами
just deny       # аудит cargo-deny
just doc        # сборка rustdoc (падает на битых док-ссылках)
just ci         # полный локальный гейт: хуки (fmt, clippy, deny, typos, гигиена, секреты) + тесты

Включите хуки один раз:

prek install && prek install --hook-type commit-msg

Definition of Done

Изменение завершено, когда just ci зелёный; новое поведение имеет тесты (юнит + proptest для инвариантов, сценарные тесты для межслойных потоков); слой домена остаётся чистым; публичные типы конструируются через свои фабрики; правило зависимостей соблюдается; и изменение задокументировано (см. Руководство по документации).

Правила тестирования (основное)

  • Юнит-тесты живут в файле в #[cfg(test)] mod tests.
  • Интеграционные / сценарные тесты живут в <crate>/tests/ и используют только публичный API.
  • Покрывайте доменные инварианты proptest.
  • Держите тесты детерминированными и изолированными от сети/IO — внедряйте временные метки и фиксированные сиды ключей; никогда не вызывайте настенные часы или ГСЧ напрямую.

См. AGENTS.md за полными правилами.