Follow-ups from #5 #8

Open
opened 2026-10-05 10:04:45 +03:00 by aep · 1 comment
Owner

Отложенные находки Среза 1 (PR #6). Формулировки — docs/superpowers/plans/2026-10-04-slice-1-directories-ledger.md. Формат: маркер — суть — откуда.

Миграция и модель

  • T1.1 — нет LOCK TABLE перед копированием в миграции 0002 — T1
  • T1.2 — пересоздание related_group_member теряет GRANT/RLS/триггеры платформы вне Alembic; не отражено в docstring — T1
  • T1.3 — docstring downgrade 0002 не упоминает падение при ЮЛ сразу в ГСК и ГСЗ — T1
  • T1.4 — тест сохранения данных 0002 не проверяет legal_entity_id/valid_from/created_by — T1
  • T1.5 — в плане -k related_group_member не выбирает тестов — T1

Инфраструктура запросов и тесты

  • T2.1 — тест общности сессии current_user и маршрута — T2
  • T2.2 — guard-тест SessionDep обходит только build_api_router, не src.app.app.routes — T2
  • T2.4 — DomainError не переживает pickle/copy — T2
  • T3.2 — pytest.raises(IntegrityError) в test_factories без проверки ограничения — T3
  • T3.3 — AuthClientFactory импортируется из tests.conftest — T3
  • T3.4 — docstring conftest не упоминает новые фикстуры — T3
  • T4.2 — тест policy с JOIN проверяет только FROM — T4
  • T4.3 — лишние проверки подстрок в тесте policy — T4
  • T5.7 — заглушка logger только с warning (logger.disable устойчивее) — T5

Справочники

  • T5.2 — эндпоинт филиалов вызывает репозиторий мимо сервиса — T5
  • T5.3 — эндпоинт ГК пересобирает PageParams/CompanyGroupFilter из CompanyGroupListQuery — T5
  • T5.4 — set_archived(bool) с noqa вместо двух методов — T5
  • T5.5 — OFFICE_NOT_FOUND не проверяет is_active — T5
  • T5.6 — пробелы тестов ГК: multi-field PATCH, повторный archive без аудита, неизменность чужой ГК, collation сортировки — T5
  • T6.2 — тест отката не доказывает откат аудита — T6
  • T6.3 — текст OFFICE_NOT_ALLOWED про ГК возвращается и для ЮЛ — T6
  • T6.4 / T12.6 — _check_office_exists скопирован в трёх сервисах — T6, T12
  • T6.6 — явный null филиала от филиального пользователя при офисе NULL — no-op, не покрыто тестом — T6
  • T8.1 — удаление ГСК/ГСЗ с FK из consolidation/ex_snapshot: нужен код GROUP_IN_USE (OQ-34, Срезы 3/7) — T8
  • T8.4 — нет теста DELETE чужой ГСК филиальным пользователем — T8
  • M-3 — смена имени и филиала ГК одним PATCH пишет одно событие ASSIGNMENT_CHANGE (R-24); разнести на два — финальное ревью

Импорт ЕЦП

  • T9.3 — числовой ИНН теряет ведущий ноль (OQ-93) — T9
  • T9.5 — пустая ГСК/ГСЗ из флага при членстве того же вида в другой группе — T9
  • T9.6 — пустые «Организация»/«Группа компаний» создают сущность с name="" (OQ-92; строка 4034 выгрузки) — T9
  • T9.7 — при существующей ГК + skip новый РФ всё равно создаётся — T9
  • T9.8 — пробелы параметризации тестов ядра импорта — T9
  • T9.9 — workbook.close() в генераторе при GC — T9
  • T9.10 — широкий кортеж исключений вокруг итерации xlsx — T9
  • T9.11 — MAX_UNCOMPRESSED_BYTES 200 МиБ щедрый (кандидат 50 МиБ); нет ограничения колонок и длины ячейки — T9
  • O-7 — MAX_IMPORT_ROWS считает и пустые строки — T9
  • T10.5 — HTTPException(413) в сервисном слое вместо доменной ошибки — T10
  • T10.7 — архивные ГК в снимке импорта обновляются без разархивации (OQ-94) — T10
  • T10.8 — производительность режима update на масштабе не замерена — T10
  • T10.9 — LE_IN_OTHER_GROUP называет ЮЛ из другой ГК (OQ-95) — T10
  • M-7 остаток — зачистка объекта S3 при сбое commit после put_object — T10, финальное ревью
  • T11.1 — print с замером времени в тесте полной выгрузки — T11
  • T11.2 — замер охватывает только HTTP-запрос — T11
  • T11.4 — пробел перед расширением после усечения имени файла — T11
  • T11.5 — кейс «nul» в HTTP-тесте не ловит регрессию — T11

Администрирование

  • T12.2 — гонки update_user × set_role_permissions не проверены — T12
  • T12.5 — в аудите before сортирован, after в порядке запроса — T12
  • T12.7 — email в другом регистре при гонке (fail-closed 403 при входе); UserOut.roles показывает неактивные роли — T12
  • O-9 — EmailStr отвергает *.local, а seed-dev такие адреса создаёт — T12
  • M-4 остаток — GET /admin/regional-offices под USERS_ADMIN, чтобы форма создания не зависела от DIRECTORY_VIEW — финальное ревью
  • M-5 — перечитывать /me после правки администратором самого себя — финальное ревью
  • Срез 0 M-8 — повторный seed возвращает права, снятые администратором через матрицу — T15

Фронт

  • T13.4 — void reloadCount в useMe — T13
  • O-10 — в prod-ветке «Повторить» без токена — no-op; сбой чтения тела не оборачивается — T13
  • T14.7 — множественный выбор ролей = N PUT и N событий аудита — T14
  • O-11 — консольная ошибка Redux «Store does not have a valid reducer» (каркас шаблона, reducer: {}) — T14

Решения владельца (ждут ответа, см. OQ в arm-ka-docs)

  • O-6 / OQ-97 — DIRECTORY_DELETE только у ADMIN
  • R-9 / OQ-96 — UTC vs МСК для effective_date
  • R-23 — системная трактовка LAST_ADMIN
  • R-5 — GRANT платформы после пересоздания таблицы в 0002
Отложенные находки Среза 1 (PR #6). Формулировки — `docs/superpowers/plans/2026-10-04-slice-1-directories-ledger.md`. Формат: маркер — суть — откуда. **Миграция и модель** - T1.1 — нет `LOCK TABLE` перед копированием в миграции 0002 — T1 - T1.2 — пересоздание `related_group_member` теряет GRANT/RLS/триггеры платформы вне Alembic; не отражено в docstring — T1 - T1.3 — docstring downgrade 0002 не упоминает падение при ЮЛ сразу в ГСК и ГСЗ — T1 - T1.4 — тест сохранения данных 0002 не проверяет `legal_entity_id`/`valid_from`/`created_by` — T1 - T1.5 — в плане `-k related_group_member` не выбирает тестов — T1 **Инфраструктура запросов и тесты** - T2.1 — тест общности сессии `current_user` и маршрута — T2 - T2.2 — guard-тест `SessionDep` обходит только `build_api_router`, не `src.app.app.routes` — T2 - T2.4 — `DomainError` не переживает pickle/copy — T2 - T3.2 — `pytest.raises(IntegrityError)` в test_factories без проверки ограничения — T3 - T3.3 — `AuthClientFactory` импортируется из `tests.conftest` — T3 - T3.4 — docstring conftest не упоминает новые фикстуры — T3 - T4.2 — тест policy с JOIN проверяет только FROM — T4 - T4.3 — лишние проверки подстрок в тесте policy — T4 - T5.7 — заглушка logger только с `warning` (`logger.disable` устойчивее) — T5 **Справочники** - T5.2 — эндпоинт филиалов вызывает репозиторий мимо сервиса — T5 - T5.3 — эндпоинт ГК пересобирает `PageParams`/`CompanyGroupFilter` из `CompanyGroupListQuery` — T5 - T5.4 — `set_archived(bool)` с noqa вместо двух методов — T5 - T5.5 — `OFFICE_NOT_FOUND` не проверяет `is_active` — T5 - T5.6 — пробелы тестов ГК: multi-field PATCH, повторный archive без аудита, неизменность чужой ГК, collation сортировки — T5 - T6.2 — тест отката не доказывает откат аудита — T6 - T6.3 — текст `OFFICE_NOT_ALLOWED` про ГК возвращается и для ЮЛ — T6 - T6.4 / T12.6 — `_check_office_exists` скопирован в трёх сервисах — T6, T12 - T6.6 — явный `null` филиала от филиального пользователя при офисе NULL — no-op, не покрыто тестом — T6 - T8.1 — удаление ГСК/ГСЗ с FK из consolidation/ex_snapshot: нужен код `GROUP_IN_USE` (OQ-34, Срезы 3/7) — T8 - T8.4 — нет теста DELETE чужой ГСК филиальным пользователем — T8 - M-3 — смена имени и филиала ГК одним PATCH пишет одно событие `ASSIGNMENT_CHANGE` (R-24); разнести на два — финальное ревью **Импорт ЕЦП** - T9.3 — числовой ИНН теряет ведущий ноль (OQ-93) — T9 - T9.5 — пустая ГСК/ГСЗ из флага при членстве того же вида в другой группе — T9 - T9.6 — пустые «Организация»/«Группа компаний» создают сущность с `name=""` (OQ-92; строка 4034 выгрузки) — T9 - T9.7 — при существующей ГК + `skip` новый РФ всё равно создаётся — T9 - T9.8 — пробелы параметризации тестов ядра импорта — T9 - T9.9 — `workbook.close()` в генераторе при GC — T9 - T9.10 — широкий кортеж исключений вокруг итерации xlsx — T9 - T9.11 — `MAX_UNCOMPRESSED_BYTES` 200 МиБ щедрый (кандидат 50 МиБ); нет ограничения колонок и длины ячейки — T9 - O-7 — `MAX_IMPORT_ROWS` считает и пустые строки — T9 - T10.5 — `HTTPException(413)` в сервисном слое вместо доменной ошибки — T10 - T10.7 — архивные ГК в снимке импорта обновляются без разархивации (OQ-94) — T10 - T10.8 — производительность режима `update` на масштабе не замерена — T10 - T10.9 — `LE_IN_OTHER_GROUP` называет ЮЛ из другой ГК (OQ-95) — T10 - M-7 остаток — зачистка объекта S3 при сбое commit после `put_object` — T10, финальное ревью - T11.1 — `print` с замером времени в тесте полной выгрузки — T11 - T11.2 — замер охватывает только HTTP-запрос — T11 - T11.4 — пробел перед расширением после усечения имени файла — T11 - T11.5 — кейс «nul» в HTTP-тесте не ловит регрессию — T11 **Администрирование** - T12.2 — гонки `update_user` × `set_role_permissions` не проверены — T12 - T12.5 — в аудите `before` сортирован, `after` в порядке запроса — T12 - T12.7 — email в другом регистре при гонке (fail-closed 403 при входе); `UserOut.roles` показывает неактивные роли — T12 - O-9 — `EmailStr` отвергает `*.local`, а `seed-dev` такие адреса создаёт — T12 - M-4 остаток — `GET /admin/regional-offices` под `USERS_ADMIN`, чтобы форма создания не зависела от `DIRECTORY_VIEW` — финальное ревью - M-5 — перечитывать `/me` после правки администратором самого себя — финальное ревью - Срез 0 M-8 — повторный seed возвращает права, снятые администратором через матрицу — T15 **Фронт** - T13.4 — `void reloadCount` в `useMe` — T13 - O-10 — в prod-ветке «Повторить» без токена — no-op; сбой чтения тела не оборачивается — T13 - T14.7 — множественный выбор ролей = N PUT и N событий аудита — T14 - O-11 — консольная ошибка Redux «Store does not have a valid reducer» (каркас шаблона, `reducer: {}`) — T14 **Решения владельца (ждут ответа, см. OQ в arm-ka-docs)** - O-6 / OQ-97 — `DIRECTORY_DELETE` только у ADMIN - R-9 / OQ-96 — UTC vs МСК для `effective_date` - R-23 — системная трактовка `LAST_ADMIN` - R-5 — GRANT платформы после пересоздания таблицы в 0002
Author
Owner

T8.1 (удаление ГСК/ГСЗ, использованной в консолидации) вынес в AURORA-1814.

T8.1 (удаление ГСК/ГСЗ, использованной в консолидации) вынес в AURORA-1814.
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

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