Срез 0 (proposal): соглашения шаблона в CLAUDE.md, change slice-0-skeleton — скелет ядра #2

Merged
aep merged 2 commits from feat/1-slice-0-skeleton into main 2026-10-03 16:43:09 +03:00
Owner

Issue #1 (не закрывает: только proposal; код — после ревью спек).

Что внутри

  • CLAUDE.md: раздел «Соглашения шаблона» (команды из api/, раскладка api/src/, DI, настройки, схема dkb, тесты, линтеры, фронт, сборка, NATS без JetStream, работа без Nexus); пути исправлены на api/scripts/, api/src/domain/.
  • openspec/config.yaml: строки с двоеточием взяты в кавычки (YAML разбирал их как словари, правила игнорировались); стек — Python 3.11, PostgreSQL 16, NATS без JetStream.
  • openspec/changes/slice-0-skeleton/: proposal, design (13 решений без обсуждения), 5 спек (data-model, reference-data-seed, authn-authz, recognition-job-exchange, audit-trail), 25 задач ≤ полдня.

Ключевое из дизайна

  • ORM 1:1 с DBML v5.13 (43 таблицы, 27 enum, partial unique, NULLS NOT DISTINCT), миграция 0001 с полным откатом, api/scripts/check_dbml_vs_orm.py на pydbml.
  • Seed api/seed/core (роли, 16 прав, матрица §10, план счетов 94н + субсчета 1С, правила элиминации v1 ББ, чек-лист BASIC/EXTENDED) и api/seed/dev (РФ, по пользователю на роль).
  • Auth: TokenVerifier (dev HS256 за AUTH_DEV_ISSUER + DEBUG, JWKS-каркас для РАИСА), require(permission), GET /api/v1/me.
  • Обмен через recognition_job на core NATS: outbox, ack processing, повторная публикация без ack (30 с × 3 → dlq, error_code = NO_ACK), дедуп по result_msg_id, вахтёр reply_deadline.
  • make check / make check-full вместо CI; python:3.11-slim; make venv без raisa_*; npm raisa-* → optionalDependencies.

Rulings I made

См. таблицу «Decisions made without discussion» в design.md (13 строк). Допущения: ASSUMPTION(OQ-16) матрица прав, ASSUMPTION(OQ-46) все ОСВ расширенного подхода обязательны, OQ-47 план счетов.

Связанные PR

RSHB/arm-ka-docs (сквозной: контракт, compose, проверки), RSHB/arm-tabular-parser, RSHB/arm-scan-gateway — ветки feat/1-slice-0-skeleton.

Проверка

openspec validate slice-0-skeleton --strict — valid. Код не менялся.

🤖 Generated with Claude Code

Issue #1 (не закрывает: только proposal; код — после ревью спек). ## Что внутри - `CLAUDE.md`: раздел «Соглашения шаблона» (команды из `api/`, раскладка `api/src/`, DI, настройки, схема `dkb`, тесты, линтеры, фронт, сборка, NATS без JetStream, работа без Nexus); пути исправлены на `api/scripts/`, `api/src/domain/`. - `openspec/config.yaml`: строки с двоеточием взяты в кавычки (YAML разбирал их как словари, правила игнорировались); стек — Python 3.11, PostgreSQL 16, NATS без JetStream. - `openspec/changes/slice-0-skeleton/`: proposal, design (13 решений без обсуждения), 5 спек (`data-model`, `reference-data-seed`, `authn-authz`, `recognition-job-exchange`, `audit-trail`), 25 задач ≤ полдня. ## Ключевое из дизайна - ORM 1:1 с DBML v5.13 (43 таблицы, 27 enum, partial unique, `NULLS NOT DISTINCT`), миграция 0001 с полным откатом, `api/scripts/check_dbml_vs_orm.py` на pydbml. - Seed `api/seed/core` (роли, 16 прав, матрица §10, план счетов 94н + субсчета 1С, правила элиминации v1 ББ, чек-лист BASIC/EXTENDED) и `api/seed/dev` (РФ, по пользователю на роль). - Auth: `TokenVerifier` (dev HS256 за `AUTH_DEV_ISSUER` + `DEBUG`, JWKS-каркас для РАИСА), `require(permission)`, `GET /api/v1/me`. - Обмен через `recognition_job` на core NATS: outbox, ack `processing`, повторная публикация без ack (30 с × 3 → `dlq`, `error_code = NO_ACK`), дедуп по `result_msg_id`, вахтёр `reply_deadline`. - `make check` / `make check-full` вместо CI; `python:3.11-slim`; `make venv` без `raisa_*`; npm `raisa-*` → `optionalDependencies`. ## Rulings I made См. таблицу «Decisions made without discussion» в `design.md` (13 строк). Допущения: ASSUMPTION(OQ-16) матрица прав, ASSUMPTION(OQ-46) все ОСВ расширенного подхода обязательны, OQ-47 план счетов. ## Связанные PR `RSHB/arm-ka-docs` (сквозной: контракт, compose, проверки), `RSHB/arm-tabular-parser`, `RSHB/arm-scan-gateway` — ветки `feat/1-slice-0-skeleton`. ## Проверка `openspec validate slice-0-skeleton --strict` — valid. Код не менялся. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
aep added 2 commits 2026-10-03 15:23:22 +03:00
Срез 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>
Обмен с ядром на 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>
aep merged commit 6035375feb into main 2026-10-03 16:43:09 +03:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RSHB/arm-core#2
No description provided.