- Ссылки на источник истины v5.13/v5.14/v5.15 → v5.17: openspec/config.yaml, KICKOFF-PROMPT, 00-workspace-layout, 08-source-docs-index, заголовок 05-domain-rules, dev/checks.md; спека quality-checks — без привязки к версии (путь — переменная DBML Makefile). - Диаграммы model/diagrams/part01…09 перерисованы по v5.17 (были v5.12): scripts/gen_model_diagrams.py (разбиение DBML на части + dbml-renderer + resvg через npx, версии закреплены), цель make diagrams; описание в 04-data-model-guide, 06-test-data, 08-source-docs-index. - dev/frontend-api-guide.md: КПП (arm-core #52) и DB_SCHEMA (#53) — из §11 в §1, КПП в маршрутах §5.2/§5.3, схеме §5.8 и каталоге ошибок §9 (сверено с кодом 99669cd). - Ссылки на заархивированные change'и (dev/README, dev/checks, api-contract-slice-3b/4), путь к v4 DBML в индексе. - 09-delivery-plan: статусы Срезов 0, 2d, 3b, 4. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
5.0 KiB
quality-checks Specification
Purpose
Единый набор проверок качества для сервисных репозиториев АРМ КА, выполняемый локально одной командой перед каждым PR: какие проверки обязательны, в каком порядке и с какими внешними ресурсами. Конфигураций CI в репозиториях нет — в Gitea CI не используется, пайплайн платформы банка вне зоны проекта.
Requirements
Requirement: make check — быстрые проверки без Docker
Каждый сервисный репозиторий SHALL предоставлять цель make check, выполняющую из api/: ruff check .,
ruff format --check ., mypy src, pytest -m "not integration", тест идентичности вендоренного контракта с
../docs/contracts. Цель SHALL завершаться ненулевым кодом при первой упавшей проверке и MUST NOT требовать запущенного
Docker, PostgreSQL или NATS.
Scenario: Файл не отформатирован
- WHEN в репозитории есть файл, не отформатированный
ruff format - THEN
make checkзавершается с кодом 1 на шагеruff format --check, следующие шаги не выполняются
Scenario: Чистый репозиторий
- WHEN все проверки проходят
- THEN
make checkзавершается с кодом 0 за время, не превышающее нескольких минут, без обращения к сети
Requirement: make check-full — полная проверка против compose
Каждый сервисный репозиторий SHALL предоставлять цель make check-full: make check плюс pytest -m integration против
инфраструктуры docs/dev/docker-compose.yml (PostgreSQL 16, NATS, MinIO, для scan-gateway — эмулятор). Для arm-core
цель SHALL дополнительно выполнять «alembic upgrade head → alembic downgrade base → alembic upgrade head» на чистой
БД и python scripts/check_dbml_vs_orm.py против текущей версии модели (../docs/model/data-model-v<текущая>.dbml, путь — переменная DBML Makefile). make check-full SHALL быть
выполнен перед созданием PR, его итог вписывается в описание PR.
Scenario: Расхождение ORM и DBML
- WHEN в ORM добавлена колонка, которой нет в DBML
- THEN шаг
check_dbml_vs_ormпадает с перечнем расхождений,make check-fullзавершается с кодом 1
Scenario: Миграция без отката
- WHEN
downgradeревизии не удаляет созданный ею объект - THEN шаг «upgrade → downgrade → upgrade» падает
Requirement: Фикстуры и соседние репозитории — опциональны с предупреждением
Проверки SHALL брать docs и fixtures из соседних каталогов workspace (../docs, ../fixtures) или из переменных
ARM_KA_DOCS, ARM_KA_FIXTURES. При отсутствии фикстур тесты с маркером fixtures SHALL пропускаться с явной причиной;
при отсутствии docs тест идентичности контракта SHALL пропускаться с предупреждением. Отсутствие соседей MUST NOT делать
make check красным.
Scenario: Нет фикстур
- WHEN
../fixturesотсутствует иARM_KA_FIXTURESне задан - THEN тесты с маркером
fixturesпомечены skipped с причиной «ARM_KA_FIXTURES недоступен», остальные выполняются
Requirement: Одинаковый набор целей во всех репозиториях
Makefile каждого сервисного репозитория SHALL содержать цели up, test, test-integration, lint, check,
check-full с одинаковой семантикой (описана в docs/dev/checks.md); репозиторий MAY добавлять свои цели (migrate,
seed, emulator), но MUST NOT менять смысл общих.
Scenario: Сверка с описанием
- WHEN ревьюер сравнивает список общих целей
Makefileсервиса сdocs/dev/checks.md - THEN все общие цели присутствуют и запускают описанные команды