33 KiB
Runbook Проверок (Тесты и Валидация по Плану)
Назначение
Этот файл фиксирует, где находятся проверки для каждого пункта P01-P53 и как их запускать.
Использовать перед переводом пункта в статус сделано.
Детальная role-based матрица пользовательских сценариев (UI + corner cases): /Users/tronosfera/Develop/Law/context/13_role_flows_test_matrix.md.
Приоритизированный e2e backlog (P0/P1/P2 + покрытие): /Users/tronosfera/Develop/Law/context/14_e2e_backlog_prioritized.md.
Базовые команды
- Применить миграции:
docker compose exec -T backend alembic upgrade head
- Полный прогон автотестов:
docker compose exec -T backend python -m unittest discover -s tests -p 'test_*.py' -v
- Быстрая проверка импорта/синтаксиса Python:
docker compose exec -T backend python -m compileall app tests alembic
- Проверка сборки admin фронта через Docker Compose (на образе
frontend, entrypointadmin/index.jsx):
docker compose build frontend
docker compose run --rm --no-deps --entrypoint sh frontend -lc "apk add --no-cache nodejs npm >/dev/null && npx --yes esbuild /usr/share/nginx/html/admin/index.jsx --loader:.jsx=jsx --bundle --outfile=/tmp/admin.bundle.js"
- Браузерный E2E (Playwright) для ролевых UI-флоу (PUBLIC / LAWYER / ADMIN) через фиксированный образ
law-e2e-playwright:1.58.2:
docker compose build e2e
docker compose run --rm --no-deps e2e playwright --version
docker compose run --rm --no-deps \
-e E2E_BASE_URL=http://frontend \
-e E2E_ADMIN_EMAIL=admin@example.com \
-e E2E_ADMIN_PASSWORD='admin123' \
-e E2E_LAWYER_EMAIL=ivan@mail.ru \
-e E2E_LAWYER_PASSWORD='LawyerPass-123!' \
e2e playwright test --config=playwright.config.js
Примечание: образ e2e собирается один раз и переиспользуется, браузеры/Playwright не скачиваются при каждом запуске.
6. Очистка e2e/тестовых артефактов в dev-БД (ручной запуск, если нужен вне e2e):
docker compose exec -T backend python -m app.data.cleanup_test_artifacts
- Сид ручных тестовых данных (10 клиентов, 4 юриста, заявки/чаты/счета):
docker compose exec -T backend python -m app.data.manual_test_seed
Доступы и список тестовых заявок сохраняются в /Users/tronosfera/Develop/Law/context/15_manual_test_access.md.
8. Проверка health всех контейнеров после деплоя/рестарта:
docker compose up -d
docker compose ps
curl -fsS http://localhost:8081/health
curl -fsS http://localhost:8081/chat-health
- Оперативная проверка и alert-код для
backend/chat-service(под cron/CI):
./scripts/ops/check_chat_health.sh
echo $? # 0=OK, >0=ALERT
Матрица проверок по задачам
| ID | Что проверяем | Где тесты | Как запускать |
|---|---|---|---|
| P01 | Базовый запуск сервисов и API | smoke + общие тесты | docker compose up -d; затем базовые команды 1-3 |
| P02 | Таблицы и миграции | tests/test_migrations.py |
docker compose exec -T backend python -m unittest tests.test_migrations -v |
| P03 | Universal CRUD + RBAC + audit | tests/admin/* |
docker compose exec -T backend python -m unittest discover -s tests/admin -p 'test_*.py' -v |
| P04 | Пользователи, роли, пароли | tests/admin/* (тесты про admin_users) |
команда как для P03 |
| P05 | Базовый auto-assign | tests/test_auto_assign.py |
docker compose exec -T backend python -m unittest tests.test_auto_assign -v |
| P06 | Админка admin.jsx + базовый UI контур |
сборка admin фронта + CRUD/API тесты | базовая команда 4 + тесты P03 |
| P07 | Доп. темы юристов (admin_user_topics) |
tests/admin/* |
команда как для P03 |
| P08 | Ручной claim (без гонок) | tests/admin/* (claim-тесты) |
команда как для P03 |
| P09 | ADMIN-only переназначение | tests/admin/* (reassign-тесты) |
команда как для P03 |
| P10 | Auto-assign v2 приоритетов | tests/test_auto_assign.py |
команда как для P05 |
| P11 | OTP create/view + 7-day cookie + rate-limit | tests/test_public_requests.py, tests/test_otp_rate_limit.py |
docker compose exec -T backend python -m unittest tests.test_public_requests tests.test_otp_rate_limit -v |
| P12 | Публичный кабинет (статус/чат/файлы/таймлайн) | tests/test_public_cabinet.py |
docker compose exec -T backend python -m unittest tests.test_public_cabinet -v |
| P13 | Read/unread маркеры | tests/test_public_requests.py, tests/admin/*, tests/test_uploads_s3.py |
запустить 3 набора: tests.test_public_requests, tests/admin/* (discover), tests.test_uploads_s3 |
| P14 | Валидация флоу статусов по темам | tests/admin/* (status-flow тесты) |
команда как для P03 |
| P15 | Иммутабельность сообщений/файлов на смене статуса | tests/admin/*, tests/test_uploads_s3.py |
tests/admin/* (discover) + tests.test_uploads_s3 |
| P16 | Шаблоны данных (required + request template) | tests/test_public_requests.py, tests/admin/*, tests/test_migrations.py |
запустить 3 набора + миграции |
| P17 | Файловый контур и лимиты | tests/test_uploads_s3.py, tests/test_worker_maintenance.py |
docker compose exec -T backend python -m unittest tests.test_uploads_s3 tests.test_worker_maintenance -v |
| P18 | SLA-конфиг | tests/admin/*, tests/test_migrations.py |
docker compose exec -T backend alembic upgrade head; затем python -m unittest discover -s tests/admin -p 'test_*.py' -v и python -m unittest tests.test_migrations -v |
| P19 | SLA overdue/FRT расчеты | tests/test_worker_maintenance.py, tests/admin/* (metrics) |
docker compose exec -T backend python -m unittest tests.test_worker_maintenance -v + tests/admin/* (discover); проверить overdue_by_transition |
| P20 | Уведомления | tests/test_notifications.py, а также регрессии tests/test_public_cabinet.py, tests/test_uploads_s3.py, tests/test_worker_maintenance.py |
docker compose exec -T backend python -m unittest tests.test_notifications tests.test_public_cabinet tests.test_uploads_s3 tests.test_worker_maintenance -v; затем полный прогон |
| P21 | Dashboard ADMIN/LAWYER | tests/admin/* (metrics/dashboard) + tests/test_dashboard_finance.py |
docker compose exec -T backend python -m unittest tests.test_dashboard_finance -v + tests/admin/* (discover); проверить role-scope и метрики юристов: загрузка, сумма активных, вал за месяц, зарплата за месяц |
| P22 | Hardening/release | tests/test_http_hardening.py + весь regression + compile + миграции + UI build |
docker compose exec -T backend python -m unittest tests.test_http_hardening -v; затем базовые команды 1-4 |
| P23 | Мобильная адаптация лендинга/клиентских форм | app/web/landing.html + ручная проверка в mobile viewport |
собрать admin фронт при затрагивании админки + открыть landing.html в 320px/375px/768px, проверить формы/чат/файлы без горизонтального скролла |
| P24 | Ставки юриста и ставка заявки | tests/test_rates.py + интеграционные в tests/admin/* |
docker compose exec -T backend python -m unittest tests.test_rates -v + tests/admin/* (discover); проверка что public API не отдает поля ставок/процентов |
| P25 | Billing-статус и шаблон счета | tests/test_billing_flow.py, tests/test_invoices.py + e2e статусных переходов |
docker compose exec -T backend python -m unittest tests.test_billing_flow tests.test_invoices -v + tests/admin/* (discover); валидация автогенерации счета при billing-статусе и фиксации оплаты только при ADMIN->Оплачено (в т.ч. множественные оплаты в одной заявке) |
| P26 | Security audit S3/ПДн | tests/test_security_audit.py + tests/test_uploads_s3.py + tests/test_migrations.py |
docker compose exec -T backend python -m unittest tests.test_security_audit tests.test_uploads_s3 tests.test_migrations -v; проверить события allow/deny в security_audit_log и применимость миграции 0014_security_audit_log |
| P27 | Итоговые E2E критические сценарии | набор tests/test_*.py + новые E2E-тесты |
базовые команды 1-3 + прогон Playwright через сервис e2e (образ law-e2e-playwright:1.58.2) |
| P28 | Все таблицы БД в справочниках (+ clients, если добавляется) |
tests/admin/*, tests/test_migrations.py, UI e2e admin dictionaries |
миграции + python -m unittest discover -s tests/admin -p 'test_*.py' -v + python -m unittest tests.test_migrations -v + e2e admin |
| P29 | Единая модальная форма заявки + тема обращения + удаление рекомендаций | e2e/tests/public_client_flow.spec.js + UI smoke лендинга |
прогон Playwright через docker compose run --rm --no-deps e2e ... + ручная проверка текста/полей на лендинге |
| P30 | Отдельная страница работы с заявкой клиента | новые e2e для client workspace route + tests/test_public_cabinet.py |
добавить e2e route-flow + прогон test_public_cabinet |
| P31 | Вход клиента через phone+OTP модалку | новые e2e OTP modal flow + tests/test_otp_rate_limit.py, tests/test_public_requests.py |
e2e + backend OTP тесты |
| P32 | Переключение между заявками клиента | новые e2e multi-request flow + tests/test_public_cabinet.py |
e2e multi-request + backend regression |
| P33 | Чат в отдельном сервисе | tests/test_public_cabinet.py, tests/admin/* (chat service cases) + UI smoke (client.js, admin.jsx) + container health |
docker compose run --rm backend python -m unittest tests.test_public_cabinet -v + tests/admin/* (discover) + фронт-сборка admin entrypoint + базовые команды 8-9 |
| P34 | Ненавязчивые цитаты в блоке «Первая консультация» | UI e2e/smoke лендинга | визуальная регрессия лендинга + Playwright public smoke |
| P35 | Предпросмотр документов | tests/test_uploads_s3.py (test_public_attachment_object_preview_returns_inline_response) + Playwright (e2e/tests/public_client_flow.spec.js, e2e/tests/lawyer_role_flow.spec.js) |
docker compose run --rm backend python -m unittest tests.test_uploads_s3 -v + Playwright UI-прогон preview в клиенте и во вкладке работы с заявкой юриста/админа через сервис e2e |
| P36 | Навигация в админку и редиректы | e2e/tests/admin_entry_flow.spec.js + redirect checks |
Playwright admin_entry_flow + curl -I -H 'Host: localhost:8081' http://localhost:8081/admin (ожидается 302 и Location: /admin.html) + curl -I http://localhost:8081/admin.html |
| P37 | Единые bootstrap-креды админа | tests/test_admin_auth.py + auth smoke (/api/admin/auth/login) + docs consistency check |
docker compose run --rm backend python -m unittest tests.test_admin_auth -v + UI/API login smoke с admin@example.com / admin123 |
| P38 | Конструктор маршрутов статусов (темы) | tests/admin/*, tests/test_worker_maintenance.py + e2e e2e/tests/admin_status_designer_flow.spec.js |
docker compose exec -T backend python -m unittest tests.test_worker_maintenance -v + tests/admin/* (discover) + docker compose run --rm --no-deps -e E2E_BASE_URL=http://frontend e2e playwright test --config=playwright.config.js e2e/tests/admin_status_designer_flow.spec.js |
| P39 | Канбан заявок для LAWYER/ADMIN | tests/admin/* (test_requests_kanban_returns_grouped_cards_and_role_scope) + e2e e2e/tests/kanban_role_flow.spec.js |
docker compose exec -T backend python -m unittest tests.admin.test_status_flow_kanban.AdminStatusFlowKanbanTests.test_requests_kanban_returns_grouped_cards_and_role_scope -v и docker compose run --rm --no-deps -e E2E_BASE_URL=http://frontend e2e playwright test --config=playwright.config.js e2e/tests/kanban_role_flow.spec.js; дополнительно регресс admin_role_flow, lawyer_role_flow |
| P40 | Подготовка модульной сборки admin фронта | frontend/Dockerfile, app/web/admin/index.jsx, smoke e2e |
базовая команда 4 + e2e/tests/admin_entry_flow.spec.js |
| P41 | Декомпозиция shared-слоя admin | сборка admin фронта + role e2e smoke | базовая команда 4 + e2e/tests/admin_role_flow.spec.js, e2e/tests/kanban_role_flow.spec.js |
| P42 | Декомпозиция feature-слоя admin | сборка admin фронта + role e2e regression | базовая команда 4 + полный e2e через сервис e2e |
| P43 | Декомпозиция backend CRUD | tests/admin/*, tests/test_migrations.py |
docker compose exec -T backend python -m unittest discover -s tests/admin -p 'test_*.py' -v + docker compose exec -T backend python -m unittest tests.test_migrations -v |
| P44 | Декомпозиция backend Requests | tests/admin/*, tests/test_worker_maintenance.py, e2e kanban |
docker compose exec -T backend python -m unittest discover -s tests/admin -p 'test_*.py' -v + docker compose exec -T backend python -m unittest tests.test_worker_maintenance -v + e2e/tests/kanban_role_flow.spec.js |
| P45 | Декомпозиция тестового слоя | пакетный запуск tests/admin/* + discovery |
целевые команды по новым модулям + python -m unittest discover -s tests -p 'test_*.py' -v |
| P46 | Финализация декомпозиции | полный backend + frontend + e2e регресс | базовые команды 1-5 |
| P47 | Запросы клиента по заявке (модель/миграции) | tests/test_migrations.py, tests/test_public_requests.py, tests/admin/test_service_requests.py |
docker compose exec -T backend alembic upgrade head; затем docker compose exec -T backend python -m unittest tests.test_migrations tests.test_public_requests tests.admin.test_service_requests -v |
| P48 | RBAC/видимость запросов + CURATOR extension points | tests/admin/test_service_requests.py + регресс tests/admin/* |
docker compose exec -T backend python -m unittest tests.admin.test_service_requests -v + docker compose exec -T backend python -m unittest discover -s tests/admin -p 'test_*.py' -v |
| SEC-07 | Антивирус и контент-проверка вложений | tests/test_attachment_scan.py, tests/test_uploads_s3.py, tests/test_migrations.py | docker compose exec -T backend python -m unittest tests.test_attachment_scan tests.test_uploads_s3 tests.test_migrations -v |
| SEC-14 | Контроль уязвимостей в CI | .github/workflows/security-ci.yml (bandit, pip-audit, trivy) | GitHub Actions: workflow security-ci (PR/push/schedule/manual). Локальная валидация YAML: ruby -e "require 'yaml'; YAML.load_file('.github/workflows/security-ci.yml')" |
| SEC-15 | Регулярный security smoke | scripts/ops/security_smoke.sh | make security-smoke или ./scripts/ops/security_smoke.sh https://ruakb.online; проверять отчет reports/security/security-smoke-<timestamp>.md |
| SEC-OPS | Полный прод-аудит безопасности | scripts/ops/prod_security_audit.sh, Makefile target prod-security-audit | make prod-security-audit DOMAIN=... WWW_DOMAIN=... SECOND_DOMAIN=... SECOND_WWW_DOMAIN=... LETSENCRYPT_EMAIL=... (AUTO_CERT_INIT=1 при необходимости автоподнятия LE cert) |
| P49 | Клиентский UI запросов (куратор/смена юриста) | e2e e2e/tests/service_requests_flow.spec.js, e2e/tests/public_client_flow.spec.js | docker compose run --rm --no-deps -e E2E_BASE_URL=http://frontend e2e playwright test --config=playwright.config.js e2e/tests/service_requests_flow.spec.js e2e/tests/public_client_flow.spec.js |
| P50 | Админ UI: вкладка Запросы + topbar индикатор | tests/admin/test_metrics_templates.py, tests/admin/test_service_requests.py, e2e e2e/tests/admin_role_flow.spec.js, e2e/tests/service_requests_flow.spec.js | docker compose exec -T backend python -m unittest tests.admin.test_metrics_templates tests.admin.test_service_requests -v + Playwright прогон указанных spec |
| P51 | Тесты контура запросов | backend: tests/admin/test_service_requests.py, tests/admin/test_metrics_templates.py, tests/test_public_requests.py; e2e: e2e/tests/service_requests_flow.spec.js | docker compose exec -T backend python -m unittest tests.admin.test_service_requests tests.admin.test_metrics_templates tests.test_public_requests -v + docker compose run --rm --no-deps -e E2E_BASE_URL=http://frontend e2e playwright test --config=playwright.config.js e2e/tests/service_requests_flow.spec.js |
| P52 | Лендинг: карусель выдающихся юристов | tests/test_migrations.py (таблица карусели), ручной UI smoke лендинга | docker compose exec -T backend python -m unittest tests.test_migrations -v + ручная проверка лендинга (карусель сотрудников с фото) |
| P53 | Справочник карусели сотрудников | tests/admin/* (meta/CRUD), tests/test_migrations.py | docker compose exec -T backend python -m unittest discover -s tests/admin -p 'test_*.py' -v + docker compose exec -T backend python -m unittest tests.test_migrations -v |
Ролевое покрытие (PUBLIC / LAWYER / ADMIN)
PUBLIC (клиент)
- Лендинг и клиентский контур через UI e2e:
e2e/tests/public_client_flow.spec.js(создание заявки, кабинет, чат, загрузка файла). - Клиентские обращения по заявке (куратор/смена юриста):
e2e/tests/service_requests_flow.spec.js. - OTP create/view + 7-day cookie + rate-limit:
tests/test_public_requests.py,tests/test_otp_rate_limit.py. - Просмотр статуса/истории/чата/файлов/таймлайна по
track_number:tests/test_public_cabinet.py. - Переписка клиент -> юрист и маркеры непрочитанного:
tests/test_public_cabinet.py,tests/test_notifications.py. - Загрузка и скачивание файлов + лимиты 25MB/250MB + контроль доступа:
tests/test_uploads_s3.py,tests/test_public_cabinet.py. - Публичные счета и PDF в кабинете:
tests/test_invoices.py.
LAWYER (юрист)
- UI e2e:
e2e/tests/lawyer_role_flow.spec.js(вход, claim неназначенной заявки, новая вкладка работы с заявкой, чтение обновлений, смена статуса). - UI e2e:
e2e/tests/request_data_file_flow.spec.js(юрист создаетЗапроссfile-полем, клиент загружает файл, юрист видит заполнение запроса). - Дашборд юриста (свои, неназначенные, непрочитанные):
tests/test_dashboard_finance.py. - Видимость заявок: свои + неназначенные; запрет доступа к чужим:
tests/admin/*. - Claim неназначенной заявки, запрет takeover, запрет назначения через CRUD:
tests/admin/*. - Смена статуса и завершение только своих заявок:
tests/admin/*. - Оповещения (алерты): список/прочтение и генерация по событиям:
tests/test_notifications.py. - Сообщения/файлы по заявке и непрочитанные маркеры:
tests/test_notifications.py,tests/test_uploads_s3.py,tests/admin/*. - Счета: видимость только своих, запрет ставить
PAID:tests/test_invoices.py,tests/test_billing_flow.py. - Видимость клиентских обращений: backend RBAC
tests/admin/test_service_requests.py(LAWYER видит толькоCURATOR_CONTACT).
ADMIN (администратор)
- UI e2e:
e2e/tests/admin_role_flow.spec.js(вход, справочники, создание пользователя/темы, создание и оплата счета). - UI e2e entry/redirect smoke:
e2e/tests/admin_entry_flow.spec.js(нет CTA админки на лендинге, вход через/admin). - Bootstrap-auth:
tests/test_admin_auth.py(автосоздание bootstrap-admin и негативные кейсы логина). - CRUD пользователей/юристов (пароли, роли, профильная тема, аватар):
tests/admin/*,tests/test_uploads_s3.py. - Темы и флоу статусов (включая ветвление), SLA-переходы:
tests/admin/*,tests/test_worker_maintenance.py. - Шаблоны обязательных/дозапрашиваемых данных:
tests/admin/*,tests/test_public_requests.py. - Счета и оплаты (создание, статусы, подтверждение оплаты, multiple cycles):
tests/test_invoices.py,tests/test_billing_flow.py. - Дашборд портала и загрузка юристов + финансовые метрики:
tests/test_dashboard_finance.py,tests/admin/*. - Безопасность: security-audit по S3 доступам, RBAC и шифрование реквизитов:
tests/test_security_audit.py,tests/test_uploads_s3.py,tests/test_invoices.py. - Вкладка
Запросы+ unread индикатор topbar:tests/admin/test_metrics_templates.py,tests/admin/test_service_requests.py,e2e/tests/service_requests_flow.spec.js.
Минимальный чеклист закрытия пункта
- Выполнить миграции (если были изменения схемы).
- Выполнить целевые тесты пункта по матрице выше.
- Выполнить полный прогон
unittest discover. - Выполнить
compileall. - Для изменений админ-фронта выполнить сборку entrypoint
admin/index.jsxчерез Docker Compose. - После успешной проверки обновить статус пункта в
context/10_development_execution_plan.md.
Последние подтвержденные прогоны
docker compose exec -T backend python -m unittest discover -s tests/admin -p 'test_*.py' -v—32 passed.docker compose run --rm backend python -m unittest -v tests.test_admin_auth—3 passed.docker compose exec -T backend python -m unittest discover -s tests -p 'test_*.py' -v—133 passed.docker compose exec -T backend python -m compileall app tests alembic— успешно.docker compose run --rm --no-deps --entrypoint sh frontend -lc "apk add --no-cache nodejs npm >/dev/null && npx --yes esbuild /usr/share/nginx/html/admin/index.jsx --loader:.jsx=jsx --bundle --outfile=/tmp/admin.bundle.js"— успешно (admin.bundle.jsсобран).docker compose run --rm --no-deps -e E2E_BASE_URL=http://frontend e2e playwright test tests/admin_entry_flow.spec.js --config=playwright.config.js—1 passed.docker compose run --rm --no-deps -e E2E_BASE_URL=http://frontend e2e playwright test --config=playwright.config.js e2e/tests/admin_entry_flow.spec.js e2e/tests/admin_role_flow.spec.js—2 passed.docker compose run --rm --no-deps -e E2E_BASE_URL=http://frontend e2e playwright test --config=playwright.config.js e2e/tests/kanban_role_flow.spec.js—1 passed.docker compose run --rm -e E2E_BASE_URL=http://frontend e2e playwright test e2e/tests/admin_role_flow.spec.js e2e/tests/lawyer_role_flow.spec.js --reporter=line—2 passed(после выносаdashboard/requests/invoicesизadmin.jsx).docker compose run --rm -e E2E_BASE_URL=http://frontend e2e playwright test e2e/tests/admin_role_flow.spec.js e2e/tests/admin_status_designer_flow.spec.js --reporter=line—2 passed(после выносаconfig-секции вConfigSection).docker compose run --rm -e E2E_BASE_URL=http://frontend e2e playwright test e2e/tests/admin_role_flow.spec.js --reporter=line—1 passed(после выносаquotes/availableTables/metaсекций).docker compose run --rm -e E2E_BASE_URL=http://frontend e2e playwright test e2e/tests/admin_role_flow.spec.js e2e/tests/kanban_role_flow.spec.js --reporter=line—2 passed(после выносаuseKanban).docker compose run --rm -e E2E_BASE_URL=http://frontend e2e playwright test e2e/tests/lawyer_role_flow.spec.js --reporter=line—1 passed(после выносаuseRequestWorkspacestate/actions).docker compose run --rm -e E2E_BASE_URL=http://frontend e2e playwright test e2e/tests/request_data_file_flow.spec.js --reporter=line—1 passed(E2E:REQUEST_DATAс типомfile, загрузка клиентом через S3, отметка выполнения у юриста).docker compose run --rm -e E2E_BASE_URL=http://frontend e2e playwright test e2e/tests/admin_role_flow.spec.js e2e/tests/kanban_role_flow.spec.js e2e/tests/lawyer_role_flow.spec.js --reporter=line—3 passed(после внедренияuseTablesStateи переноса registry state таблиц).docker compose run --rm -e E2E_BASE_URL=http://frontend e2e playwright test e2e/tests/admin_role_flow.spec.js e2e/tests/lawyer_role_flow.spec.js --reporter=line—2 passed(после переносаloadRequestModalData/refreshRequestModalвuseRequestWorkspace).docker compose run --rm -e E2E_BASE_URL=http://frontend e2e playwright test e2e/tests/admin_role_flow.spec.js e2e/tests/lawyer_role_flow.spec.js --reporter=line—2 passed(после переносаopenRequestDetailsиsubmitRequestModalMessageвuseRequestWorkspace).docker compose run --rm -e E2E_BASE_URL=http://frontend e2e playwright test e2e/tests/admin_role_flow.spec.js e2e/tests/admin_status_designer_flow.spec.js e2e/tests/kanban_role_flow.spec.js e2e/tests/lawyer_role_flow.spec.js --reporter=line—4 passed(после выносаuseTableActions:loadTable+ paging/sort).docker compose run --rm -e E2E_BASE_URL=http://frontend e2e playwright test e2e/tests/admin_role_flow.spec.js e2e/tests/admin_status_designer_flow.spec.js e2e/tests/kanban_role_flow.spec.js e2e/tests/lawyer_role_flow.spec.js --reporter=line—4 passed(после выносаuseTableFilterActionsиuseAdminCatalogLoaders, закрытиеP42).docker compose run --rm --no-deps -e E2E_BASE_URL=http://frontend -e E2E_ADMIN_EMAIL=admin@example.com -e E2E_ADMIN_PASSWORD='admin123' -e E2E_LAWYER_EMAIL=ivan@mail.ru -e E2E_LAWYER_PASSWORD='LawyerPass-123!' e2e playwright test --config=playwright.config.js e2e/tests/admin_role_flow.spec.js e2e/tests/admin_status_designer_flow.spec.js e2e/tests/kanban_role_flow.spec.js e2e/tests/lawyer_role_flow.spec.js e2e/tests/request_data_file_flow.spec.js --reporter=line—4 passed, 1 skipped.docker compose run --rm --no-deps -e E2E_BASE_URL=http://frontend -e E2E_ADMIN_EMAIL=admin@example.com -e E2E_ADMIN_PASSWORD='admin123' -e E2E_LAWYER_EMAIL=ivan@mail.ru -e E2E_LAWYER_PASSWORD='LawyerPass-123!' e2e playwright test --config=playwright.config.js --reporter=line—6 passed, 1 skipped(рольовые e2e + канбан + запрос данных).docker compose exec -T backend alembic upgrade head— успешно, применена миграция0026_srv_req_str_ids.docker compose exec -T backend python -m unittest tests.admin.test_service_requests tests.admin.test_metrics_templates tests.test_public_requests tests.test_migrations -v—38 passed.docker compose exec -T backend python -m compileall app tests alembic— успешно.docker compose run --rm --no-deps -e E2E_BASE_URL=http://frontend -e E2E_ADMIN_EMAIL=admin@example.com -e E2E_ADMIN_PASSWORD='admin123' e2e playwright test --config=playwright.config.js e2e/tests/service_requests_flow.spec.js --reporter=line—1 passed.docker compose run --rm --no-deps -e E2E_BASE_URL=http://frontend -e E2E_ADMIN_EMAIL=admin@example.com -e E2E_ADMIN_PASSWORD='admin123' -e E2E_LAWYER_EMAIL=ivan@mail.ru -e E2E_LAWYER_PASSWORD='LawyerPass-123!' e2e playwright test --config=playwright.config.js e2e/tests/admin_role_flow.spec.js e2e/tests/service_requests_flow.spec.js --reporter=line—2 passed.docker compose exec -T backend python -m unittest discover -s tests -v—140 passed.docker compose run --rm --no-deps -e E2E_BASE_URL=http://frontend -e E2E_ADMIN_EMAIL=admin@example.com -e E2E_ADMIN_PASSWORD=admin123 e2e playwright test --config=playwright.config.js e2e/tests --reporter=line—7 passed, 1 skipped.docker compose run --rm backend python -m unittest tests.test_public_requests tests.test_worker_maintenance tests.test_security_audit—23 passed(покрытие согласия ПДн + retention cleanup + read-audit).docker compose run --rm backend python -m unittest tests.test_migrations—23 passed(включая0031_pii_retention_and_consent,data_retention_policies,requests.pdn_consent*).docker compose run --rm backend python -m compileall app tests alembic— успешно.docker compose run --rm backend python -m unittest tests.test_security_config tests.test_s3_tls—4 passed(prod TLS guard + S3 TLS verify/CA-bundle wiring).docker compose run --rm backend python -m unittest tests.test_public_requests tests.test_worker_maintenance tests.test_security_audit tests.test_migrations—46 passed(регресс после SEC-05/SEC-06).docker compose run --rm backend python -m compileall app tests alembic— успешно (после SEC-05/SEC-06).docker compose run --rm backend python -m unittest tests.test_crypto_kid_rotation tests.test_reencrypt_with_active_kid tests.test_security_config tests.test_invoices tests.test_public_cabinet—20 passed(SEC-09: KID encryption + re-encrypt flow + регресс invoices/chat).docker compose run --rm backend python -m unittest tests.test_security_config tests.test_http_hardening -v—8 passed(SEC-12: prod CORS validation + CSP hardening headers).ruby -e "require 'yaml'; YAML.load_file('.github/workflows/security-ci.yml'); puts 'ok'"—ok(SEC-14: workflow syntax smoke)../scripts/ops/security_smoke.sh http://localhost:8081—PASS, отчет:reports/security/security-smoke-20260302-125643.md(SEC-15).docker compose run --rm backend python -m unittest tests.test_security_config tests.test_http_hardening tests.test_s3_tls tests.test_public_requests tests.test_public_cabinet tests.test_security_audit tests.test_migrations -v—61 passed(контрольный регресс после закрытия SEC-15).make security-smoke—PASS, отчет:reports/security/security-smoke-20260302-125811.md../scripts/ops/security_smoke.sh https://ruakb.online—PASS, отчет:reports/security/security-smoke-20260302-130511.md(TLS и security headers внешнего контура)../scripts/ops/security_smoke.sh https://ruakb.ru—PASS, отчет:reports/security/security-smoke-20260302-130536.md(TLS и security headers внешнего контура).docker compose run --rm backend alembic upgrade head— успешно после hotfix-миграции0032_email_cols_fix(ремонт legacy-схемы:requests.client_email,otp_sessions.channel/email, индексы).