# Задание для Grok: тестовый контур на живой базе и независимая приёмка - Репозиторий: https://git.ochenstarik.ru/ochenstarik/krona-staff - Основа: ветка `codex/bootstrap-platform-foundation`, коммит `778ba2d` - Материалы в репозитории: `docs/audit/2026-09-26/` — `AUDIT.md` и `evidence/` со сценариями живой проверки и их выводом. ## Контекст `AUDIT.md` сверен с твоим аудитом `2026-09-26_full-project-audit_grok_3e20544.md`. Итог сверки: - 22 находки подтверждены; - 4 подтверждены частично (F8, F11, N7, N10); - 1 уже исправлена (F5); - 1 не воспроизвелась (N13). После твоего аудита в основную ветку влиты офлайн-синхронизация и новое оформление портала. Находки по синхронизации (S1–S9) в `AUDIT.md` уже учтены. Главный урок: 156 зелёных тестов на поддельной базе не заметили, что создание сотрудника, подтверждение смены и расчёт зарплаты на реальной PostgreSQL всегда падают. ## Твоя роль Продукт ты не исправляешь — это делают Codex и Antigravity. От тебя нужно две вещи: - построить тестовый контур, который ловит дефекты на настоящей базе; - независимо принимать каждое исправление. ## Зона ответственности **Твоя зона:** - `tests/e2e/**` — новый набор сквозных сценариев: живой сервер на живой PostgreSQL; - `tests/integration/tenant-isolation.test.ts`; - `.forgejo/workflows/ci.yml` и вспомогательные скрипты для тестов. **Не трогай:** `src/`, `apps/`, `migrations/`, `deploy/`. Это зоны Codex и Antigravity. Если тесту нужна правка продукта, оставь замечание исполнителю. ## Правила - Ветка `grok/e2e-harness`, маленькие коммиты. В теле каждого коммита объясни причину (AGENTS.md). - Токены и ключи в тестах генерируй случайно. Реальные ФИО и суммы не используй. - К каждому выводу прикладывай команду и фактический вывод. То, что не удалось проверить, помечай «не проверено» явно, как ты уже делаешь. ## Задачи | № | Что сделать | Готово, когда | | --- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | | 1 | **N5.** В тесте изоляции арендаторов очистка идёт ролью приложения, а у неё нет права DELETE на сотрудников. Перенеси очистку на роль мигратора или оберни в транзакцию с откатом | Тест проходит на живой базе; CI с `DATABASE_TEST_URL` из-за него больше не красный | | 2 | **Набор `tests/e2e`.** Поднять сервер на реальной PostgreSQL 17 и прогнать сценарии по всем находкам P0 и P1. За основу взять `evidence/live-audit.mjs.txt` и `evidence/live-sync.mjs.txt`. Каждый сценарий проверяет правильное поведение, поэтому сейчас он красный. Список красных сценариев и есть список открытых дефектов | Есть сценарии для K1, K3, K4, K5, K6, K10, K11, K12, S1, S2, S9, N9, N12 и A4; отчёт «зелёный / красный» по каждому ID | | 3 | **Сценарии по решениям владельца (роли, точки, процесс подтверждения, согласие).** Подробности — в таблице ниже | Сценарии есть и пока красные; это ожидаемо | | 4 | **CI.** Сервис PostgreSQL; роли как в пилоте, но мигратор **без** SUPERUSER. Миграции вверх, откат всех, снова вверх. Запуск `tests/e2e`. `docker build` перенести туда, где есть docker, либо вынести в отдельную задачу. Закрепить действия по SHA (F13) | CI реально проверяет схему и маршруты на живой базе | | 5 | **Проверка пилотного compose** тестом, как сейчас проверяется корневой: переменные с `:?`, нет `NODE_ENV=development`, у приложения нет учётных данных мигратора | — | | 6 | **Приёмка.** Первым проверь немедленную меру Antigravity по S1: устройство больше не создаёт и не меняет смену. Дальше после каждого PR от Codex и Antigravity прогоняй `tests/e2e` и целевые сценарии. На слово ничего не принимай | По каждому закрытому ID есть независимое подтверждение: таблица «ID — было — стало — доказательство» | | 7 | **Повторить N13** (гонка первого расчёта) под нагрузкой: 10–50 параллельных запросов. У меня на двух запросах не воспроизвелось | Вердикт с числом попыток | | 8 | **Snyk** — только если владелец выдаст токен. Без токена не запускать | — | Сценарии для задачи 3: | Сценарий | Ожидаемый результат | | --------------------------------------------- | -------------------------------------------------------------------- | | Управляющий точки А запускает расчёт точки Б | 403 | | Управляющий отправляет пакет на подтверждение | 403 | | Бухгалтер отправляет пакет | успешно; оповещение каждому руководителю ровно одно | | Бухгалтер пытается подписать пакет | 403 | | Реестр до подписи руководителя | начислений и выплат нет | | Руководитель подписывает | начисления и выплаты зарегистрированы; пакет и его смены неизменяемы | | Изменение смены после отправки | подписать пакет нельзя, он возвращается бухгалтеру | | Возврат с комментарием | пакет у бухгалтера, комментарий сохранён | | Сотрудник точки А отработал смену на точке Б | смена попадает в расчёт точки Б | | Сотрудник без согласия на биометрию | сервер отвечает терминалу «регистрация запрещена» | | Отзыв согласия | статус для терминала меняется | Проверки, которым нужна Windows (DPAPI, ACL каталога данных, установщик, WinUI, реальный pipe), в твоём окружении недоступны. Отмечай их «не проверено» и ссылайся на тесты Codex. ## Порядок работы с остальными 1. **Сразу:** задачи 1, 2, 4 и 5. Это не зависит от других исполнителей. 2. **Задача 3** — сразу. Сценарии будут красными, пока Codex не сделает этап 4. 3. **Задача 6** — по мере поступления PR. Первым — немедленная мера Antigravity по S1, затем этап 1 Codex (K3, K4). ## Отчёт Первый PR — после задач 1, 2, 4 и 5. В нём набор сценариев и краткий отчёт: какие сценарии красные. Дальше — приёмочная таблица после каждого PR исполнителей.