Andrey Epifancev 12ae96ba6e Библиотека arm_statements вместо копий: спеки, контекст, инструменты docs (AURORA-1677)
- спеки 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>
2026-10-27 16:45:19 +04:00

55 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 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».