Use owner enums for error and T-Bank protocol values with ESLint regression checks. Preserve open wire fallbacks and keep protocol imports independent of DI and Prisma. Verified npm ci, verify, 226 unit tests, 262 isolated e2e tests and unchanged OpenAPI.
5.9 KiB
Работа в репозитории
Граница и порядок работы
Репозиторий сам содержит инструкции, исходники, конфигурацию и входы своих проверок. Сборка, CI и обязательный маршрут чтения работают без соседних checkout. Внешний API задаётся предоставленным публичным контрактом; исходники или инструкции его реализации не являются зависимостью разработки. При нехватке требования сообщи, какое решение не определено, до его реализации.
Начни с результата и affected areas. До edits проследи flow/invariants, найди
owner и 1–3 примера. Код показывает механизм; случайный аналог не меняет контракт.
Работай напрямую; OpenSpec/SDD lifecycle — только по явному запросу.
Перед Node-командами активируй местную .nvmrc: nvm use --silent.
Сохраняй чужие staged/unstaged/untracked изменения и read-only архивы.
Change scope
Сначала расширь существующего владельца. Иначе используй standard library, платформу или установленную dependency; небольшая новая реализация допустима при собственной ответственности. Не создавай helper/interface/wrapper ради возможного reuse. Общее имя не означает общую бизнес-ответственность. Сохраняй validation, authorization, atomicity, accessibility и migration safety.
После diff выполни Boy Scout review: проверь новое дублирование, owner, callers, небольшие связанные legacy issues и соответствие local conventions. Исправляй непосредственно связанные low-risk проблемы; широкий cleanup — отдельная задача.
Domain values
Finite business vocabulary принадлежит одному domain/module/entity owner.
Переиспользуй его symbols; для machine codes и protocol values используй
строковые enum, для структуры с разными payload — discriminated union.
Сохраняй wire values; generated/external enums не переписывай вручную.
Numeric policy называй по смыслу и единицам. Индексы, Math.max(value, 0) и
обычные labels не выноси в constants без semantic benefit.
Локальный TypeScript/lint профиль определяет дополнительные ограничения.
Dependencies
Проверь аналоги и direct dependencies в местном manifest до добавления пакета.
Новая dependency оправдана текущей потребностью и меньшей общей сложностью;
оцени compatibility, runtime/bundle и maintenance/security. Импортируемый пакет
объявляется напрямую; транзитивная установка не является контрактом.
Сохраняй exact versions и lockfile; воспроизводимая установка — npm ci.
Peer-конфликт решай совместимыми версиями без --force/--legacy-peer-deps.
Используй существующий analyzer; не добавляй второй для той же проверки.
Test Intent
Перед нетривиальным тестом кратко определи наблюдаемый исход, regression risk, значимые edge/error/concurrency cases и самую дешёвую надёжную boundary. Отдельный artifact не нужен. Проверяй результат, а не private call order, декларации, тривиальные wrappers или поведение framework. При bug сначала воспроизведи исход. Mock race не доказывает DB atomicity. Уровни и runnable commands выбирай по местной testing convention.
Проверки и завершение
Code/dependency change: npm ci, полный npm run verify и дополнительные
risk checks из местной testing convention. Targeted tests ускоряют итерацию,
но не заменяют финальный gate. lint:fix/format — edits, не proof.
Markdown-only: проверь новые/изменённые тексты, локальные ссылки/якоря, маршруты
чтения и git diff --check; application build ради текста не нужен.
Повтори routing по staged/unstaged/new files. Запиши краткие команды, результаты
и ограничения. Зелёный lint не заменяет semantic/security review.
Git и релизы
Работа — в codex/<task> от актуального develop, затем PR в develop.
Сохраняй чужие изменения; перед commit просмотри staged paths и diff.
Commits и PR titles — Conventional Commits; допустим spec:. Каждый commit
содержит одну связанную задачу. Root другого checkout не управляет этим repo.
Прямой push в main, force-push и перенос опубликованных тегов не входят в
обычную работу. Перед release/hotfix прочитай местный README, раздел «Релизы».