{ "comment": "ID сценариев, красный цвет которых сейчас ожидаем (открытые дефекты или ещё не реализованные решения владельца). Когда дефект исправлен и все тесты ID зелёные, scripts/test/run-e2e.mjs падает, пока ID не убран отсюда. Добавлять ID сюда можно только вместе с записью в REPORT.md. Ключи — двойные ID «владелец/мой» (docs/audit/2026-09-26/AUDIT.md и TASK-GROK-2 §2), для сценариев без ID владельца — мой ID.", "defects": { "K4/N1": "POST /employees: 42P08 inconsistent types for $2 на реальной PostgreSQL", "K3/N2": "подтверждение смены / расчёт / утверждение: staff_outbox.occurred_at NULL (23502)", "K12/N3": "SSRF через push-endpoint на внутренние адреса", "K5/N4": "двойное начисление при пересекающихся расчётах (сейчас блокирован N2)", "N9": "перепривязка чужого push-endpoint", "N10": "справочники доступны терминалу", "N11": "импорт с неверным kind → 500", "N12": "pay-assignment без additionalProperties:false и верхних границ", "K1/F2": "standalone без токенов даёт права STANDALONE_ACCESS анониму", "K10/F3": "cookie = сырой токен, logout не отзывает", "K11/F4": "нет rate limit на вход", "F7": "Idempotency-Key не используется", "F10": "CSRF: мутации по cookie без Origin разрешены", "K13/SYNC-A": "устройство само подтверждает смену через upsert_work_session", "K13/SYNC-B": "устройство само утверждает табель через upsert_timesheet_entry", "SYNC-C0": "начальная загрузка /sync/pull падает 500: column status does not exist (staff_org_units)", "S5/SYNC-C": "начальная загрузка обрезается на 100 сущностях (сейчас также блокирована SYNC-C0)", "S5/SYNC-D": "изменения из портала не пишутся в staff_sync_change_log", "S4/SYNC-E": "отметки уволенных сотрудников принимаются через sync", "S4/SYNC-F": "sync не сохраняет org_unit_id отметки и принимает чужую точку", "S3/SYNC-G": "одна битая команда роняет весь пакет (500)", "S8/SYNC-H": "регистрация устройства по cookie без проверки Origin", "K1/SYNC-I": "без токенов анонимно регистрируется устройство", "S2/SYNC-J": "sync принимает отметки вне окна времени", "SYNC-K": "ack принимает курсор больше выданного сервером", "K1/PILOT-1": "deploy/pilot/compose.yaml: 14 подстановок без :? (пустые токены/пароли молча проходят)", "K2/PILOT-2": "deploy/pilot/compose.yaml: app с NODE_ENV=development", "D6/OWN-01": "решение владельца: роли точки (этап 4 Codex)", "D6/OWN-02": "решение владельца: пакет отправляет только бухгалтер", "OWN-03": "решение владельца: уведомления директорам", "OWN-04": "решение владельца: подписывает только директор", "OWN-05": "решение владельца: ledger пуст до подписи", "OWN-06": "решение владельца: подпись → ledger, неизменяемость", "K19/OWN-07": "решение владельца: изменение смены после отправки возвращает пакет", "OWN-08": "решение владельца: возврат с комментарием", "OWN-09": "решение владельца: смена в чужой точке идёт в зарплату той точки", "K17/OWN-10": "решение владельца: нет согласия на биометрию → регистрация запрещена", "K17/OWN-11": "решение владельца: отзыв согласия меняет статус для терминала" } }