## ADDED Requirements ### Requirement: `make check` — быстрые проверки сервиса без Docker Каждый сервисный репозиторий SHALL предоставлять цель `make check`, выполняющую из `api/`: `ruff check .`, `ruff format --check .`, `mypy src` (в `arm-core` — `mypy src scripts`), `pytest -m "not integration"`, тест идентичности вендоренного контракта с `../docs/contracts` (схема копии — с `<имя>.v.schema.json` своего `MAJOR`, если такой файл есть в docs, иначе с основным; примеры — с `examples/v/`, если там есть одноимённый файл, иначе с `examples/`; правило — спека `recognition-contract`, требование «Копия контракта в сервисе идентична источнику»). Цель SHALL завершаться ненулевым кодом при первой упавшей проверке и MUST NOT требовать запущенного Docker, PostgreSQL или NATS. Библиотеку `arm_statements` `make check` сервиса MUST NOT проверять линтерами и её тесты не гоняет: она установлена в окружение и проверяется своим `make check` в репозитории библиотеки. #### Scenario: Файл не отформатирован - **WHEN** в репозитории есть файл, не отформатированный `ruff format` - **THEN** `make check` завершается с кодом 1 на шаге `ruff format --check`, следующие шаги не выполняются #### Scenario: Чистый репозиторий - **WHEN** все проверки проходят - **THEN** `make check` завершается с кодом 0 за время, не превышающее нескольких минут, без обращения к сети #### Scenario: Библиотека не проверяется сервисом - **WHEN** в `tabular-parser` установлена библиотека `pylib-ai-arm-statements` - **THEN** `ruff`, `mypy` и `pytest` сервиса её исходники не обходят; импорты `arm_statements` для `ruff` — сторонние ### 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). Сборка образа (`docker-build`) SHALL собирать его с библиотекой из `STATEMENTS_DIR` и отказывать, если её checkout не на теге `STATEMENTS_TAG` (спека `statement-normalization`, требование «Поставка библиотеки потребителям»). `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» падает #### Scenario: Библиотека не на теге - **WHEN** checkout `../pylib_ai_arm_statements` стоит не на теге `STATEMENTS_TAG` - **THEN** шаг `docker-build` падает с подсказкой, `make check-full` красный ## REMOVED Requirements ### Requirement: `make check` — быстрые проверки без Docker **Reason**: требование описывало проверку копии `arm_statements` в сервисе (`mypy src arm_statements`, тесты копии); копий больше нет (AURORA-1677). **Migration**: «`make check` — быстрые проверки сервиса без Docker». ### Requirement: `make check-full` — полная проверка против compose **Reason**: шаг `statements-check` (`sync-statements.sh --check`) удалён вместе с копиями (AURORA-1677). **Migration**: «`make check-full` — полная проверка сервиса против compose».