diff --git a/openspec/changes/slice-1-directories/design.md b/openspec/changes/slice-1-directories/design.md index b6699ef..7085c90 100644 --- a/openspec/changes/slice-1-directories/design.md +++ b/openspec/changes/slice-1-directories/design.md @@ -148,3 +148,4 @@ WHERE is_current`; `ALTER TYPE audit_action ADD VALUE` ×2 (`LEGAL_ENTITY_CHANGE | 15 | 2026-10-04 | R-4 (SDD фаза 1, pre-flight): `q` в списке ЮЛ ищет по `name` и `inn` (подстрока) | спека `directories-api`; план не уточнял | нет: надмножество поиска | | 16 | 2026-10-04 | R-5 (SDD фаза 1, Task 1): upgrade 0002 пересоздаёт `related_group_member` (копия → drop → create в порядке колонок DBML → insert), а не `ADD COLUMN`; downgrade — по плану | DBML v5.14 ставит `kind` после `legal_entity_id`, а `ADD COLUMN` добавляет в конец; тест Среза 0 `test_migrated_schema_equals_orm_create_all` сверяет порядок колонок | вернуть `ADD COLUMN` и ослабить сравнение колонок (без порядка) в тесте и миграции; пересоздание теряет GRANT/RLS/триггеры, добавленные платформой вне Alembic (T1.2) | | 17 | 2026-10-04 | R-6 (SDD фаза 1, Task 2): сессия запроса объявляется как `SessionDep = Annotated[AsyncSession, Depends(get_async_session, scope="function")]` (`api/src/api/dependencies/db.py`), а не голым `Depends(get_async_session)`; `get_request_audit(session: SessionDep, …)`; guard-тест падает на объявлении без `scope="function"` | в FastAPI 0.135 yield-зависимость по умолчанию закрывается ПОСЛЕ отправки ответа — commit шёл бы после 201, и его ошибка не доходила бы до клиента; scope входит в ключ кэша зависимостей — смешение даёт две сессии (нарушает R-1) | заменить `SessionDep` на `Depends(get_async_session)` (1 строка) ценой потери гарантии «commit до ответа» | +| 18 | 2026-10-04 | R-7 (SDD фаза 1, Task 4): `legal_entities_visible` фильтрует подзапросом `company_group_id IN (SELECT id FROM company_group WHERE base_regional_office_id = :office) OR (company_group_id IS NULL AND regional_office_id = :office)`, а не outerjoin; ГК без филиала и монозаёмщики без филиала видны только ГО | подзапрос не конфликтует с join'ами вызывающего и с count-запросами, не размножает строки; NULL-семантика закреплена интеграционным тестом на PostgreSQL | при необходимости вернуть outerjoin; изменение видимости «бесхозных» объектов — одна правка фильтра и тестов |