44 Commits

Author SHA1 Message Date
Andrey Epifancev
cd6cca32f2 chore(openspec): рулинг R-6 (SessionDep, scope=function) в design.md
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-04 21:04:26 +04:00
Andrey Epifancev
5976986e1b feat(api): транзакция на запрос, RequestAudit, доменные ошибки 404/409/422, Page
- get_async_session: одна транзакция на запрос (commit при успехе, rollback при исключении), R-1;
  объявляется только через SessionDep (scope="function") — commit до отправки ответа, одна сессия
  на все зависимости запроса; current_user и dev-эмитент переведены на SessionDep.
- DomainError/NotFoundError/ConflictError/DomainValidationError + обработчик
  {"detail": {"code", "message", ...}}; ответы HTTPException и ошибок БД не меняются.
- RequestAudit/get_request_audit: AuditService.record с user_id, ip_address, user_agent запроса.
- schemas/common.py: Page[T], PageParams (limit 1..200, по умолчанию 50; offset >= 0), ErrorDetail.
- tests/test_uow_and_errors.py: формат ошибок, пагинация, аудит, scope сессии во всех маршрутах,
  настоящий commit/rollback на временной БД, commit до http.response.start, ошибка commit -> 409.
- План: Task 2 отмечена; tasks.md: 1.2 отмечен.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-04 21:03:07 +04:00
Andrey Epifancev
c80e029b96 chore(openspec): D-1 приведён к фактической миграции 0002
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-04 20:53:24 +04:00
Andrey Epifancev
3a0ee80504 chore(openspec): рулинг R-5 (миграция 0002 пересоздаёт related_group_member) в design.md
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-04 20:50:55 +04:00
Andrey Epifancev
458392e94d feat(model): DBML v5.14 — related_group_member.kind, audit_action +2, миграция 0002, последовательности кодов
- RelatedGroupMember.kind (related_group_kind, NOT NULL) между legal_entity_id и valid_from, как в DBML;
  частичный уникальный индекс uq_related_group_member_entity_kind_current (legal_entity_id, kind) WHERE is_current —
  ЮЛ одновременно в одной ГСК и одной ГСЗ.
- AuditAction: LEGAL_ENTITY_CHANGE (после GROUP_CHANGE), USER_CHANGE (после USER_ROLE_CHANGE).
- Последовательности company_group_code_seq / related_group_code_seq в metadata (design D-5).
- Миграция 0002_dbml_v5_14: related_group_member пересоздаётся с переносом строк (kind из группы), чтобы порядок
  колонок совпал с DBML и create_all; ALTER TYPE ADD VALUE ×2; downgrade пересоздаёт audit_action v5.13.
- DBML_VERSION = 5.14, пути к data-model-v5.14.dbml (Makefile, dbml_parity), тесты: откат на шаг, перенос строк,
  уникальность gsk+gsz, офлайн-SQL до head.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-04 20:49:32 +04:00
Andrey Epifancev
13d11c074f chore(openspec): рулинги R-2..R-4 (SDD фаза 1, pre-flight) в design.md
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-04 20:41:12 +04:00
Andrey Epifancev
44806c8403 chore: план исполнения Среза 1 (две фазы) и рулинг R-1 в design.md
docs/superpowers/plans/2026-10-04-slice-1-directories-phase{1,2}.md — 15 задач из tasks.md change'а
slice-1-directories: модель v5.14 и инфраструктура запросов, policy, API справочников (фаза 1); импорт ЕЦП,
администрирование, экран /admin, документы и check-full (фаза 2).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-04 20:37:47 +04:00
Andrey Epifancev
39a7affc48 OpenSpec: change slice-1-directories (справочники, импорт ЕЦП, policy, администрирование)
proposal, design, tasks и дельты спек: directories-api, directory-import, directory-policy, users-admin (новые),
data-model (v5.14: related_group_member.kind, audit_action), audit-trail (события справочников и администрирования).

Issue: RSHB/arm-core#5

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-04 20:23:03 +04:00
Andrey Epifancev
db7df33517 chore(openspec): архив change slice-0-skeleton
Срез 0 реализован и влит (PR #3), change перенесён в openspec/changes/archive, спеки — в openspec/specs.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-04 19:44:37 +04:00
Andrey Epifancev
477f037872 docs: сценарий «Системное событие» под R-7, решения 98–105 в design.md (I-4)
audit-trail: WHEN сценария «Системное событие» — «системный процесс (без
пользователя) вызывает сервис аудита»; NOTE: обмен через recognition_job
в Срезе 0 аудит не пишет (R-7, design #20). design.md: R-25, R-26 и
решения fix-волны финального ревью (№100–105). openspec validate --strict
проходит.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 02:01:41 +04:00
Andrey Epifancev
db3c1e5141 docs: предложения открытых вопросов в change slice-0-skeleton (I-5, R-26)
openspec/changes/slice-0-skeleton/open-questions-proposal.md — носитель
15 предложенных вопросов, правок статусов OQ-46/OQ-47 и кандидатов в DBML
v5.14 для docs-PR (открывает владелец ../docs); архивируется вместе с
change. Добавлены пункты финального ревью: аудит LOGIN/LOGIN_FAILED,
CORS * и доверенные прокси, открытые /docs и /openapi.json, статус
stored_file из inbox, срок ответа tabular, append-only на уровне БД,
последовательный callback NATS и длинный маппер, проверка ключа
results/{file_id}/{job_id}/ до чтения результата.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 02:01:41 +04:00
Andrey Epifancev
a880330f1f docs: design.md — решения 24–97 (рулинги контроллера и решения исполнителей, SDD срез 0)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 01:21:59 +04:00
Andrey Epifancev
f7bde3f82f chore: отметка задачи 27
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 01:18:12 +04:00
Andrey Epifancev
18126eeb8f docs: команды make и фактическое устройство в CLAUDE.md, выправлены формулировки tasks/plan/spec
CLAUDE.md: цели make из корня, NATS_ENABLED vs DEBUG, обмен recognition_job, аудит, аутентификация, seed,
сверка ORM-DBML, тесты; Dockerfile для dev и check-full; skip reason у fixtures.
tasks.md/plan: required_document_rule в audit_ex.py (R-4); spec data-model: 43 таблицы модели + alembic_version.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 01:16:56 +04:00
Andrey Epifancev
b3f7deae22 chore: отметка задачи 26
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 01:12:24 +04:00
Andrey Epifancev
d4a29748f5 chore: отметка задачи 25
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 00:59:24 +04:00
Andrey Epifancev
0b4fa3a819 chore: отметка задачи 24
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 00:46:54 +04:00
Andrey Epifancev
c5a5c0bf29 chore: отметка задачи 23
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 00:20:12 +04:00
Andrey Epifancev
a0de203d88 chore: отметка задачи 22
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 23:48:55 +04:00
Andrey Epifancev
1c51fb5459 chore: отметка задачи 21
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 23:21:30 +04:00
Andrey Epifancev
0837e18a0a chore: отметка задачи 20
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 23:01:34 +04:00
Andrey Epifancev
0c1e1b94b2 chore: отметка задачи 19
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 22:39:56 +04:00
Andrey Epifancev
64668085ab chore: отметка задачи 18
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 22:29:02 +04:00
Andrey Epifancev
aaf9490a8d chore: отметка задачи 17
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 22:14:29 +04:00
Andrey Epifancev
f4699ff86a chore: отметка задачи 16
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 21:51:55 +04:00
Andrey Epifancev
7429240f01 chore: отметка задачи 15
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 21:41:19 +04:00
Andrey Epifancev
0f800a1bd0 chore: отметка задачи 14
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 21:29:37 +04:00
Andrey Epifancev
54e072947c chore: отметка задачи 13
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 21:17:22 +04:00
Andrey Epifancev
81af5e7dd7 chore: отметка задачи 12
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 21:07:20 +04:00
Andrey Epifancev
b1f76d0a7d chore: отметка задачи 11
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 20:47:03 +04:00
Andrey Epifancev
3a057b2591 chore: отметка задачи 10
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 20:27:29 +04:00
Andrey Epifancev
dd551faf17 chore: отметка задачи 9
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 19:57:07 +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
842bb584ee chore: отметка задачи 7
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 19:22:33 +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
a272d6873a chore: отметка задачи 5
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:47:29 +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
56ab8df3fd chore: отметка задачи 3
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:29:19 +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
25a594503a chore: отметка задачи 1
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:02:43 +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
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