Files
main/.ai/conventions/code-health.md
T
ksv741 93dd5539ad
Workspace security / security (push) Successful in 7s
Workspace verify / verify (push) Successful in 20s
Workspace security / security (pull_request) Successful in 6s
Workspace verify / verify (pull_request) Successful in 20s
Conventional commits / commits (pull_request) Successful in 10s
docs: establish workspace engineering conventions
2026-09-15 05:42:02 +03:00

4.9 KiB
Raw Blame History

Code health и границы изменения

Search → reuse → converge

Перед utility, hook, wrapper, dependency или новым technical pattern:

  1. Проследи поведение, инварианты и callers у ответственного owner.
  2. Ищи аналоги по имени и реализации (rg по imports, API, выражению).
  3. Расширь подходящий owner/helper/pattern; выбирай минимальное решение, полностью закрывающее текущую задачу. Новый файл сам по себе не улучшение.

Уменьшай количество способов решать одну техническую задачу. Во frontend сравни query keys, formatters, class composition; в backend — pagination, error mapping, repositories и обращения к одному provider. Сходный синтаксис без общей ответственности не требует DRY. Критерий dependency — в dependencies.

Change scope

Consistency с подходящим project pattern предпочтительнее универсальности. Новые layers, wrappers, generic helpers, factories, schemas, validators, scripts и дополнительные проверки требуют текущей ответственности или риска. Сначала используй native API/установленный stack; не строй на гипотетических consumers и будущих requirements.

Backend: CQRS, Event Sourcing, Domain Events, Unit of Work, Command Bus, generic repositories, abstract factories, custom DI и elaborate domain layers не вводятся только ради «best practice». Frontend: wrapper над Mantine, global store и дополнительная OpenAPI hash/schema система не создаются автоматически. Trust-boundary validation, authorization, atomicity, accessibility и необходимая regression proof остаются частью полного решения.

Boy Scout review

После изменения проверь affected area: новое дублирование, пропущенный helper, competing patterns, небольшие связанные legacy issues и conventions. Исправляй в рамках задачи только непосредственно связанные, небольшие, low-risk, behavior-preserving проблемы, которые легко проверить. Более широкие находки сохраняй для отдельной migration; массовый cleanup не является условием завершения текущей задачи.

Persist decisions и ratchet

Устойчивый pattern должен находиться через код и manifest. Добавляй convention, только если следующей сессии всё ещё нужно явное project decision rule. У каждого правила один owner; AGENTS содержит trigger и ссылку. Mental model живёт в .ai/architecture.md, intent — в specs, системные знания — в docs. Audit/backlog не помещай в conventions.

Legacy фиксируется отдельно; новый diff не добавляет нарушений. При migration закрывай подтверждённые baseline findings с evidence, сохраняя область проверки. Зелёный lint не доказывает отсутствие semantic debt. Работа с baseline начинается с migration plan, только когда задача затрагивает migration или найденный там owner.

Domain values

Finite business vocabulary (status, error code, operation kind, role) принадлежит domain/module/entity owner. Перед определением найди существующие types/values; в comparisons используй символ владельца, без конкурирующих словарей. Для нового project-owned vocabulary без аналога: as const + derived union. Сохраняй wire values; generated/external enums не переписывай.

Numeric policy называй по смыслу и единицам (TIMEOUT_MS, PAGE_SIZE). Индексы, index + 1, Math.max(value, 0) и обычные labels/log messages не выноси в constants без semantic benefit. Локальный lint/i18n profile всё равно применим. Не создавай tests существования констант или custom magic-string analyzer. Различия TS/генератора принадлежат local conventions frontend/backend.