38 Commits

Author SHA1 Message Date
Andrey Epifancev
e064830702 feat: scripts/check_dbml_vs_orm.py — CLI сверки ORM с DBML (версия, таблицы, колонки, типы, FK, индексы, enum'ы)
Ядро сверки перенесено из tests/dbml_parity.py в scripts/dbml_parity.py (единственная
реализация, R-14); tests/dbml_parity.py и dbml_helpers.py — тонкие обёртки с пропуском
теста без docs. Единый формат строк: `<объект>: ожидалось X / фактически Y`,
`<объект>: отсутствует в ORM|DBML`; тип и nullability — одной строкой в нотации DBML.
Версия из шапки DBML сверяется с DBML_VERSION до сравнения таблиц. Коды: 0/1/2.
Без рабочего .env скрипт берёт api/.env.example. Makefile: dbml-check (в check-full),
mypy проверяет scripts.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 19:56:58 +04:00
Andrey Epifancev
218ce88a31 test: поведенческая проверка partial unique consolidation_lock — первая блокировка фиксируется, снятие проверяется rowcount, имя индекса в ошибке
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 19:40:11 +04:00
Andrey Epifancev
f30494e7cf chore: отметка задачи 8
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 19:33:11 +04:00
Andrey Epifancev
ef55485dfc test: чётность частей 07–09 с DBML, полнота 43 таблиц и 27 enum, partial unique consolidation_lock на PG16
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 19:32:48 +04:00
Andrey Epifancev
48525731ff feat: ORM-модели частей 07–09 DBML v5.13 (консолидация, КФО, аудит/ЕХ, required_document_rule)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 19:32:48 +04:00
Andrey Epifancev
842bb584ee chore: отметка задачи 7
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 19:22:33 +04:00
Andrey Epifancev
856ee2129f test: чётность частей 04–06 с DBML, NULLS NOT DISTINCT в компараторе, create_all 25 таблиц на PG16
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 19:22:29 +04:00
Andrey Epifancev
4e363bd00f feat: ORM-модели частей 04–06 DBML v5.13 (файлы, ОСВ, отчётность)
files.py: s3_object, stored_file, document (NULLS NOT DISTINCT), recognition_job;
FK-цикл stored_file <-> recognition_job разорван через use_alter с явным именем.
osv.py: osv_entry. statements.py: financial_statement_meta/column/line/value.
Тест частей 01–03 не привязан к полному составу metadata.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 19:22:29 +04:00
Andrey Epifancev
24fbe74840 test: общий модуль сверки ORM с DBML (dbml_parity): типы колонок, default, partial WHERE; самопроверка компаратора
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 19:12:53 +04:00
Andrey Epifancev
8aa1b80c33 test: типизация хелпера проверки partial unique
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 19:05:56 +04:00
Andrey Epifancev
9936b0a59f chore: отметка задачи 6
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 19:05:09 +04:00
Andrey Epifancev
56c98a5d05 test: чётность ORM частей 01–03 с DBML, create_all на временной БД, фикстура scratch_db_url
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 19:05:04 +04:00
Andrey Epifancev
fb2b9ef9fc feat: ORM-модели частей 01–03 DBML v5.13 (справочники, доступ, учёт), naming_convention в MetaData
16 таблиц: directories, access, accounting; схема dkb, детерминированные имена ограничений.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 19:05:04 +04:00
Andrey Epifancev
a272d6873a chore: отметка задачи 5
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:47:29 +04:00
Andrey Epifancev
8e6223a273 feat: models/enums.py — 27 enum'ов DBML v5.13, фабрика pg_enum, DBML_VERSION
Тест сверяет имена и упорядоченные значения с блоками Enum {} DBML через pydbml.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:47:23 +04:00
Andrey Epifancev
1c56d39b09 test: регрессионные тесты lifespan — старт при недоступных S3/NATS и закрытие созданных ресурсов
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:42:54 +04:00
Andrey Epifancev
12ebb515c2 chore: отметка задачи 4
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:37:05 +04:00
Andrey Epifancev
545994a525 feat: app.py — NATS без nkeys при пустых учётных данных, NATS_ENABLED, nats в /healthcheck, префикс /api/v1
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:36:42 +04:00
Andrey Epifancev
56ab8df3fd chore: отметка задачи 3
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:29:19 +04:00
Andrey Epifancev
353f3cd46a build: @biomejs/cli-linux-x64-musl — в optionalDependencies (EBADPLATFORM на macOS)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:29:02 +04:00
Andrey Epifancev
15a06a075d build: Dockerfile на python:3.11-slim без raisa_*, raisa-* npm в optionalDependencies
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:28:43 +04:00
Andrey Epifancev
e432c1c542 test: test_defaults проверяет умолчания Settings без env-файла
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:23:21 +04:00
Andrey Epifancev
3d1755b7fa chore: отметка задачи 2
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:17:39 +04:00
Andrey Epifancev
dff1e050b9 feat: Settings читает ENV_FILE, поля auth/NATS/outbox, .env.example и .env.test
NATS_SEED/NATS_JWT необязательны (пусто — подключение без nkeys); в app.py
разбор seed защищён от пустого значения (подключение переедет в задаче 22).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:17:19 +04:00
Andrey Epifancev
56ea8dce0c fix: make venv идемпотентен — uv venv --allow-existing
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:08:37 +04:00
Andrey Epifancev
25a594503a chore: отметка задачи 1
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:02:43 +04:00
Andrey Epifancev
72415ab891 style: ruff format и правки линтера на каркасе шаблона
Без смены поведения: форматирование, сортировка импортов, удаление неиспользуемых
импортов, __all__ в src/db, datetime.UTC, HTTPStatus.NOT_FOUND вместо 404,
аннотация lvl в logger, noqa F401 на проверке доступности raisa_fastapi_protected_api,
mypy: miniopy_async не подтягивается (follow_imports=skip).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:02:19 +04:00
Andrey Epifancev
bf63d3a9dc chore: mypy — явные флаги strict для models/domain (strict в overrides действует глобально)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:01:48 +04:00
Andrey Epifancev
bb20d323d0 chore: инструменты шаблона — pyproject (ruff, mypy), requirements-dev, Makefile
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:01:18 +04:00
Andrey Epifancev
b018b6b055 docs: design.md — решения 14–23 (рулинги пред-проверки SDD)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:00:01 +04:00
Andrey Epifancev
23d2ebd5e7 chore: .gitignore — перенос строки после .cursorignore (шаблон без завершающего перевода строки)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 17:54:50 +04:00
Andrey Epifancev
9fcc59ddea chore: план исполнения SDD из tasks.md change'а, служебные каталоги в .gitignore
docs/superpowers/plans/2026-10-03-slice-0-skeleton*.md сгенерирован 1:1 из openspec/changes/slice-0-skeleton/tasks.md
(заголовки «Task N» для скриптов subagent-driven-development, Global Constraints из спеки и CLAUDE.md).
.gitignore: .codegraph/, .superpowers/, .bounded, .DS_Store.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 17:53:56 +04:00
aep
6035375feb Merge pull request 'Срез 0 (proposal): соглашения шаблона в CLAUDE.md, change slice-0-skeleton — скелет ядра' (#2) from feat/1-slice-0-skeleton into main
Reviewed-on: #2
2026-10-03 16:43:07 +03:00
Andrey Epifancev
43cbfe8e38 docs: change slice-0-skeleton под факты платформы — NATS без JetStream, Python 3.11, без CI и Nexus
Обмен с ядром на core NATS: подписка queue group, ack status=processing сразу по получении, process-local
LRU job_id против повторных запросов, публикация результата с повторами; удалены durable consumer / max_deliver /
ack_wait. Dockerfile python:3.11-slim; make check / make check-full вместо CI; raisa_* фильтруются при
dev-установке. Обновлены proposal, design (решения без обсуждения), specs, tasks, CLAUDE.md, openspec/config.yaml.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 16:21:42 +04:00
Andrey Epifancev
f12ce87346 docs: соглашения шаблона в CLAUDE.md и OpenSpec change slice-0-skeleton
Срез 0 (issue #1): раздел «Соглашения шаблона» (что оставлено от шаблона команды, что
вырезается, что добавляется); change openspec/changes/slice-0-skeleton — proposal, design
с таблицей «Decisions made without discussion», спеки и tasks; в openspec/config.yaml
строки с двоеточием взяты в кавычки (YAML разбирал их как словари).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 02:43:34 +04:00
Andrey Epifancev
6081ea5e56 chore: openspec init + контекст и правила change'ей 2026-10-03 00:26:42 +04:00
Andrey Epifancev
8e1f423ad6 chore: вычищены остатки доменного кода, каркас проходит tsc/biome/rsbuild 2026-10-02 23:34:55 +04:00
Andrey Epifancev
ba922225ab chore: каркас из шаблона команды (DKB_ARMKA@ba172f8, доменный код удалён) 2026-10-02 23:15:37 +04:00