- Ссылки на источник истины 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
57 lines
5.0 KiB
Markdown
57 lines
5.0 KiB
Markdown
# 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** все общие цели присутствуют и запускают описанные команды
|