From def3d72935cff7d6969482a06675d76f97e7988f Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Mon, 5 Oct 2026 01:56:48 +0400 Subject: [PATCH] =?UTF-8?q?chore(openspec):=20design.md=20=E2=80=94=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=B2=D1=82=D0=BE=D1=80=D0=BD=D0=BE=D0=B3=D0=BE=20seed?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B8=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD=D0=BE=20?= =?UTF-8?q?=D0=BA=20=D1=84=D0=B0=D0=BA=D1=82=D1=83;=20tasks.md=205.1/5.2?= =?UTF-8?q?=20(T15.1,=20T15.2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 5.5 Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2 --- openspec/changes/slice-1-directories/design.md | 5 +++-- openspec/changes/slice-1-directories/tasks.md | 7 ++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/openspec/changes/slice-1-directories/design.md b/openspec/changes/slice-1-directories/design.md index 904a84e..64b6b23 100644 --- a/openspec/changes/slice-1-directories/design.md +++ b/openspec/changes/slice-1-directories/design.md @@ -83,8 +83,9 @@ WHERE is_current`; `ALTER TYPE audit_action ADD VALUE` ×2 (`LEGAL_ENTITY_CHANGE (pre-check `lower(email)`); `external_id` не задаётся (появится при первом входе через РАИСА — Срез JWT). Матрица: `PUT /admin/roles/{code}/permissions` заменяет набор целиком (diff → `ROLE_PERMISSION_CHANGE` с before/after); системные роли (`is_system`) переименовывать/деактивировать нельзя; нельзя снять `USERS_ADMIN` у роли, если это единственная роль с этим правом -у активных пользователей, и нельзя снять её у себя. Новые коды прав не создаются (комментарий seed). Повторный seed не -отзывает права (известное ограничение, OQ из Среза 0 M-8) — задокументировать в README администратора. +у активных пользователей, и нельзя снять её у себя. Новые коды прав не создаются (комментарий seed). Повторный seed +**возвращает** права, снятые администратором (вставка недостающих пар `ON CONFLICT DO NOTHING`; лишние права не отзывает) — +известное ограничение (OQ из Среза 0 M-8), задокументировано в README администратора. ### D-9. Минимальный фронт администратора `web/src/api/client.ts` (fetch с `Authorization: Bearer`, базовый URL `${Config.API_URL}/api/v1`, обработка 401/403 → diff --git a/openspec/changes/slice-1-directories/tasks.md b/openspec/changes/slice-1-directories/tasks.md index e910475..4134358 100644 --- a/openspec/changes/slice-1-directories/tasks.md +++ b/openspec/changes/slice-1-directories/tasks.md @@ -81,6 +81,7 @@ test-integration`). Пути — от корня репозитория. Доп ## 5. Завершение - [x] 5.1 **Документы и проверка.** `README.md` (разделы: API справочников, импорт из ЕЦП — пошагово с `dry_run`, администрирование и - экран `/admin`, ограничение: повторный seed возвращает права, снятые администратором), `CLAUDE.md` (DBML v5.14, `domain/policy.py`, `get_uow_session`, - формат ошибок, `openpyxl`), `api/.env.example` (`IMPORT_MAX_BYTES`), спеки `openspec/specs/*` после merge (archive); - `make check-full` зелёный, вывод — в описание PR. Проверка: OpenAPI (`/docs`) содержит все маршруты спек. + экран `/admin`, ограничение: повторный seed возвращает права, снятые администратором), `CLAUDE.md` (DBML v5.14, `domain/policy.py`, `SessionDep`/`get_async_session`, + формат ошибок, `openpyxl`), `api/.env.example` (`IMPORT_MAX_BYTES`); `make check-full` зелёный, вывод — в описание PR. + Проверка: OpenAPI (`/docs`) содержит все маршруты спек (тест `tests/test_openapi_routes.py`). +- [ ] 5.2 **После merge (человек):** `openspec archive slice-1-directories` — синхронизация спек `openspec/specs/*` (в этом PR не выполняется).