diff --git a/CLAUDE.md b/CLAUDE.md index 89de9b0..ddd6f16 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -164,4 +164,5 @@ - Алгоритмы — только из `../docs/context/05-domain-rules.md`; номер § — в docstring. - Вычисляемые объекты консолидации — `api/src/domain/`, без ORM-таблиц. - Фронт: пользователь слаб во фронте — для TS/React изменений делай ревью сам и объясняй решения в PR. +- `api/arm_statements/` — копия пакета `arm-statements`, напрямую не править: обновление — `../docs/scripts/sync-statements.sh` (`--in-place` в PR фичи), свежесть — `make statements-check` (в `check-full`). - OpenSpec: `openspec/` здесь; сквозные изменения — change в `../docs`. diff --git a/Makefile b/Makefile index 65ebfcc..c411e17 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ COMPOSE_FILE ?= ../docs/dev/docker-compose.yml # DBML относительно api/: и в основном workspace, и в worktree .wt/<срез>/ это соседний docs/ DBML ?= ../../docs/model/data-model-v5.18.dbml -.PHONY: venv lint test test-integration e2e dbml-check migration-cycle check check-infra docker-build web-check check-full up migrate seed seed-dev +.PHONY: venv lint test test-integration e2e dbml-check migration-cycle check check-infra docker-build web-check statements-check check-full up migrate seed seed-dev # Python 3.11 (версия платформы); внутренние пакеты raisa_* вне банка недоступны — пропускаем их venv: @@ -16,7 +16,7 @@ venv: lint: cd api && $(BIN)/ruff check . cd api && $(BIN)/ruff format --check . - cd api && $(BIN)/mypy src scripts + cd api && $(BIN)/mypy src scripts arm_statements test: cd api && $(BIN)/pytest -m "not integration" @@ -56,11 +56,20 @@ web-check: cd web && npx tsc --noEmit cd web && npm run build +# Свежесть копии api/arm_statements/ (../docs/dev/checks.md): 0 — синхронна; 10 — отстала или перечень кодов в docs +# новее (цель зелёная, предупреждение вписать в описание PR); 20 и 2 — красная. Читает ../docs и ../arm-statements, +# поэтому только в check-full, не в check +ARM_KA_DOCS ?= ../docs +statements-check: + @rc=0; $(ARM_KA_DOCS)/scripts/sync-statements.sh --check --host-dir . || rc=$$?; \ + if [ $$rc -eq 10 ]; then echo "statements-check: ПРЕДУПРЕЖДЕНИЕ — впишите в описание PR"; \ + elif [ $$rc -ne 0 ]; then exit $$rc; fi + # Полная проверка перед PR. Порядок: быстрые без БД (check, dbml-check), затем БД/NATS из compose (test-integration), # затем docker, затем web. Цикл миграций upgrade -> downgrade -> upgrade на чистой БД входит в test-integration # (tests/test_migrations.py), поэтому отдельным шагом не гоняется: второй запуск только удлинил бы прогон. e2e — после # test-integration; без профиля `services` пропускается (не падает) -check-full: check dbml-check check-infra test-integration e2e docker-build web-check +check-full: check statements-check dbml-check check-infra test-integration e2e docker-build web-check up: docker compose -f $(COMPOSE_FILE) up -d diff --git a/api/pyproject.toml b/api/pyproject.toml index f7ede09..4344c37 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -12,7 +12,7 @@ select = ["E", "F", "I", "UP", "B", "PL"] "alembic/versions/*" = ["PLR0915"] [tool.ruff.lint.isort] -known-first-party = ["src", "scripts"] +known-first-party = ["src", "scripts", "arm_statements"] [tool.mypy] python_version = "3.11" @@ -22,10 +22,11 @@ plugins = ["pydantic.mypy"] mypy_path = "." explicit_package_bases = true +# Копия общего кода (sync-statements, не править) — в строгом режиме, как в репозитории arm-statements. # Строгий режим для ORM-моделей и чистого домена. `strict = true` в overrides mypy (2.x) применяет глобально, # а не к модулю, поэтому флаги семейства strict перечислены явно. [[tool.mypy.overrides]] -module = ["src.models.*", "src.domain.*"] +module = ["src.models.*", "src.domain.*", "arm_statements", "arm_statements.*"] disallow_any_generics = true disallow_subclassing_any = true disallow_untyped_calls = true diff --git a/api/pytest.ini b/api/pytest.ini index 12d42ea..cc4a5c6 100644 --- a/api/pytest.ini +++ b/api/pytest.ini @@ -2,6 +2,7 @@ pythonpath = . testpaths = tests + arm_statements/tests python_files = test_*.py tests*.py diff --git a/api/requirements-dev.txt b/api/requirements-dev.txt index b2c5b3a..d4f2691 100644 --- a/api/requirements-dev.txt +++ b/api/requirements-dev.txt @@ -1,8 +1,9 @@ # Инструменты разработки и проверок. Платформенные зависимости — в requirements.txt (не меняем). # Нижние границы мажорных версий: воспроизводимо, но без конфликта с пинами платформы. -r requirements.txt -ruff>=0.8 -mypy>=1.13 +# ruff, mypy, types-PyYAML — те же версии, что в arm-statements (копия пакета проверяется конфигом хоста) +ruff==0.16.10 +mypy==2.4.0 pytest>=8.3 pytest-asyncio>=0.24 pytest-env>=1.1 @@ -10,5 +11,5 @@ pytest-cov>=6.0 PyJWT[crypto]==2.8.0 pydbml>=1.1 jsonschema>=4.23 -types-PyYAML>=6.0 +types-PyYAML==6.0.12.20260906 types-openpyxl>=3.1