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

5.1 KiB
Raw Blame History

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