- спеки statement-normalization, quality-checks, arm-core, recognition-contract — дельты под библиотеку - удалены sync-statements, statements-check, test-sync-statements; новая statements-orders-check в make check - снимок для контура: без шага 0a, цель install вырезается (иначе проверка «нет uv» падает) - 03-architecture, 05-domain-rules, 00-workspace-layout, dev/checks.md, contour-transfer-guide; баннеры убраны Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
55 lines
5.1 KiB
Markdown
55 lines
5.1 KiB
Markdown
## 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<M>.schema.json` своего `MAJOR`,
|
||
если такой файл есть в docs, иначе с основным; примеры — с `examples/v<M>/`, если там есть одноимённый файл, иначе с
|
||
`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».
|